Маршрутизация между кластером Kubernetes и контейнером Docker в виртуальной машине
Я настроил кластер Kubernates на виртуальной машине (Ubuntu 18.04.1 LTS) в облаке Azure, используя предварительно настроенные сценарии.
Докер-контейнер MongoDB работает вместе с кластером K8s. Моя цель - подключить MongoDB к контейнеру CMS, который работает внутри K8.
Docker контейнеры:
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3883f7b397cf mongo "docker-entrypoint.s…" 5 hours ago Up 5 hours 0.0.0.0:27017->27017/tcp mongodb
299239d90cbb mirantis/kubeadm-dind-cluster:v1.12 "/sbin/dind_init sys…" 27 hours ago Up 27 hours 8080/tcp kube-node-2
34c8bd5fad2e mirantis/kubeadm-dind-cluster:v1.12 "/sbin/dind_init sys…" 27 hours ago Up 27 hours 8080/tcp kube-node-1
15a2d6521e6e mirantis/kubeadm-dind-cluster:v1.12 "/sbin/dind_init sys…" 27 hours ago Up 27 hours 127.0.0.1:32768->8080/tcp kube-master
Узлы Куберната:
$ kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26h <none>
mycms LoadBalancer 10.97.53.114 <pending> 80:31664/TCP 18s app=mycms,tier=frontend
Кубернатс сервис:
$ kubectl get services -o wide
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26h <none>
mycms LoadBalancer 10.97.53.114 <pending> 80:31664/TCP 112s app=mycms,tier=frontend
Кубернатс стручки:
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE
mycms-dc4978ffc-khvj2 1/1 Running 0 4m8s 10.244.2.13 kube-node-1 <none>
IP-адрес контейнера MongoDB: 172.17.0.2
IP-адрес главного контейнера Kubernates - 10.192.0.2
IP-адрес контейнера 1-го узла Kubernates - 10.192.0.3
IP-адрес контейнера 2-го узла Kubernates - 10.192.0.4
Поскольку модуль CMS работает на 10.244.2.13, который находится внутри контейнера k8s.
Для тестирования я установил mongo-клиент на хост и проверил соединение, которое работает хорошо.
Но CMS не достигает контейнера MongoDB (я передаю Mongo String в pod в переменной среды).
Лог CMS
MongoError: failed to connect to server [172.17.0.2:27017] on first connect [MongoError: connect EHOSTUNREACH 172.17.0.2:27017]
Как маршрутизировать контейнер MongoDB и контейнер CMS? Что-то не так / упущено в моем подходе?
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Спасибо!
0 ответов
Вам нужно использовать IP-адрес хоста, на котором установлен Docker, а не внутренний IP-адрес контейнера MongoDB, чтобы подключиться к MongoDB из кластера Kubernetes или сформировать любой другой хост. По результатам вашего docker ps -a
, вы выставили 27017
порт для контейнера MongoDB, следовательно <hostIP>:27017
следует использовать, а не 172.17.0.2:27017
,
По умолчанию в Kubernetes нет ограничений для подключения вне кластера.
Кроме того, в Azure могут быть правила брандмауэра, запрещающие соединения между узлами.