Разрешение 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