我已使用preconfigured scripts在Azure云上的VM(Ubuntu 18.04.1 LTS)的VM中设置了Kubernates群集。
MongoDB docker容器与K8s集群一起运行。我的目标是将MongoDB连接到在K8内部运行的CMS容器。
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
Kubernates节点:
$ 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
Kubernates服务:
$ 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
Kubernates豆荚:
$ 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>
MongoDB容器的IP地址是172.17.0.2
Kubernates主容器IP地址是10.192.0.2
将节点1容器的IP地址设置为10.192.0.3
将节点2容器的IP地址设置为10.192.0.4
由于CMS容器运行在k8s容器内的10.244.2.13上。
为了进行测试,我在主机上安装了mongo-client并测试了连接是否正常。
但是CMS没有到达MongoDB容器(我正在将Mongo String传递到环境变量中的Pod)。
CMS pod的日志
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 :(得分:1)
您需要使用安装Docker的主机的IP地址(而不是内部MongoDB容器的IP地址)从Kubernetes集群连接到MongoDB或形成任何其他主机。根据您的docker ps -a
的结果,您已经为MongoDB容器暴露了27017
端口,因此应使用<hostIP>:27017
而不是172.17.0.2:27017
。
在Kubernetes中,默认情况下,在群集外部连接没有任何限制。
此外,您可能在Azure中具有禁止主机之间连接的防火墙规则。