В Openshift я обычно показываю свой сервис за пределами кластера через маршрут. Это автоматически создаст новое «доменное имя», которое я могу использовать для доступа к моему приложению, например, мой локальный компьютер в локальной сети.
Это новое доменное имя не публикуется автоматически в Интернете, но оно автоматически работает в локальной сети, поэтому я предполагаю, что работает какой-то DNS-сервер - возможно, как часть платформы OpenShift - где эти маршруты / DNS-имена добавляются / удаляются автоматически. .
Сейчас я работаю над кубернетами и создал объект Ingress для своего сервиса / приложения:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: my-app
namespace: my-ns
spec:
rules:
- host: ???
http:
paths:
- backend:
serviceName: my-app
servicePort: 8080
path: /hello
Но как мне заполнить хост?
Нужно ли мне вручную связываться с администратором DNS-сервера каждый раз, когда мне нужно это сделать, и заставлять его создавать новую запись DNS с уникальным именем в локальной сети?
Или есть какой-то стандартный / автоматический способ сделать это в Kubernetes - похожий на OpenShift?
По умолчанию, kubeadm init развертывает кластер, назначающий сервисам DNS-имена <service_name>.<namespace>.svc.cluster.local
. Вы можете использовать --service-dns-domain
для изменения суффикса имени DNS. Опять же, вам нужно будет обновить /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
файл соответственно, иначе DNS не будет работать правильно.
Вы можете найти Как изменить домен по умолчанию cluster.local в Kubernetes 1.9, развернутом с помощью kubeadm? полезно для себя.
В случае, если у вас есть (возможно, в будущем) внешние DNS-провайдеры - вы можете изучить ExternalDNS направление.
Конечно, вам следует обращаться к определенной документации, в зависимости от ваших требований. Пример конфигурации для GKE: Настройка ExternalDNS в Google Container Engine