Разрешение DNS для ExternalName в Minikube на Mac

Я пытаюсь подключиться к контейнеру postgres, запущенному в Docker на моем Mac, из настроек мини-куба в virtualbox. Но я сталкиваюсь с DNS решить проблемы.

Я запускаю postgres как контейнер на докере

> docker ps                                                                                                                                                                                                                                                                                   
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
a794aca3a6dc        postgres            "docker-entrypoint.s…"   3 days ago          Up 3 days           0.0.0.0:5432->5432/tcp   postgres

На моем Mac / VirtualBox / Minikube я создаю сервис

kind: Service
apiVersion: v1
metadata:
  name: postgres-svc
spec:
  type: ExternalName
  externalName: 10.0.2.2
  ports:
    - port: 5432

10.0.2.2 псевдоним интерфейса хоста (эту информацию можно найти здесь)

> kubectl get service --all-namespaces
NAMESPACE     NAME                                             TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes                                       ClusterIP      10.96.0.1        <none>        443/TCP                  21d
hazelnut      postgres-svc                                     ExternalName   <none>           10.0.2.2      5432/TCP                 27m
kube-system   kube-dns                                         ClusterIP      10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   21d
kube-system   kubernetes-dashboard                             ClusterIP      10.108.181.235   <none>        80/TCP                   19d
kube-system   tiller-deploy                                    ClusterIP      10.101.218.56    <none>        44134/TCP                20d

(наше пространство имен hazelnut не спрашивайте:-)

В моем развертывании, если я подключаюсь к 10.0.2.2 напрямую, он подключается к postgres без проблем, но если я пытаюсь разрешить имя хоста службы kubernetes, он не работает. Так что это не проблема межсетевого экрана или маршрутизации, чистый DNS.

я пробовал postgres-svc.hazelnut.cluster.local, postgres-svc, postgres-svc.hazelnut.svc.cluster.local, postgres-svc.hazelnut все приводит к NXDOMAIN

kubernetes.default работает хоть.

> nslookup kubernetes.default
Server:     10.96.0.10
Address:    10.96.0.10#53

Name:   kubernetes.default.svc.cluster.local
Address: 10.96.0.1

В этом посте они упоминают, что использование kube-dns должно решить эту проблему, но я использую это и безрезультатно

> kubectl get svc --namespace=kube-system
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kube-dns               ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   21d
...

Любая идея, как я могу заставить это работать должным образом?

1 ответ

Для службы ExternalName введите externalName должно быть полным доменным именем, а не IP-адресом, например

kind: Service
...
metadata:
  name: postgres-svc
spec:
  type: ExternalName
  externalName: mydb.mytestdomain

Хост-машина должна иметь возможность разрешать имя этого полного доменного имени. Вы можете добавить запись в /etc/hosts на хосте Mac для этого:

10.0.0.2    mydb.mytestdomain

На самом деле, coredns использует преобразователь имен, настроенный в /etc/resolv.conf в Миникубе В.М. Он указывает на преобразователь имен в сети VirtualBox NAT (10.0.2.3). В свою очередь, VirtualBox использует механизм разрешения имен хостов, который просматривает локальные /etc/hosts файл.

Протестировано для: MacOS 10.14.3, VBox 6.0.10, kubernetes 1.15.0, minikube 1.2.0, cornns

Другие вопросы по тегам