VM中Kubernetes集群和Docker容器之间的路由

时间:2018-11-30 12:54:05

标签: docker kubernetes dind

我已使用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容器?我的方法有什么错误/遗漏吗?

如果您需要更多信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

您需要使用安装Docker的主机的IP地址(而不是内部MongoDB容器的IP地址)从Kubernetes集群连接到MongoDB或形成任何其他主机。根据您的docker ps -a的结果,您已经为MongoDB容器暴露了27017端口,因此应使用<hostIP>:27017而不是172.17.0.2:27017

在Kubernetes中,默认情况下,在群集外部连接没有任何限制。

此外,您可能在Azure中具有禁止主机之间连接的防火墙规则。