0

我已经使用预配置脚本在 Azure 云上的 VM(Ubuntu 18.04.1 LTS)中设置了 Kubernates 集群。

MongoDB docker 容器与 K8s 集群一起运行。我的目标是将 MongoDB 连接到在 K8s 内运行的 CMS 容器。

码头集装箱:

$ 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

Kubernetes 节点:

$ 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

Kubernetes 服务:

$ 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

Kubernetes pod:

$ 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

Kubernetes 主容器 IP 地址为 10.192.0.2

Kubernetes 节点 1 容器 IP 地址为 10.192.0.3

Kubernetes 节点 2 容器 IP 地址为 10.192.0.4

由于 CMS pod 在 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 容器?我的方法有什么问题/遗漏吗?

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

4

1 回答 1

1

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

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

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

于 2018-12-03T11:02:10.963 回答