Docker Container和Kubernetes Pod之间的通信

时间:2017-07-26 14:23:09

标签: docker kubernetes

我有3台服务器:1。kubernetes Master 2. kubernetes Minion1 3. kubernetes Minion2

在kubernetes master上运行的复制控制器(带有http服务),带有4个副本(pods),群集IP 10.254.x.x

群集IP可以通过kubectl命令创建的busybox pod访问。

现在我已经在kubernetes主服务器上安装了docker

然后使用docker run命令启动容器。 那么现在我的问题是:如何在这个docker容器和kubernetes集群IP之间进行通信?

实际目标是:docker容器将充当kubernetes集群IP的反向代理

Docker container IP : 172.17.x.x
Kubernetes Pods IP : 172.17.x.x
Kubernetes cluster IP : 10.254.x.x 

感谢。

3 个答案:

答案 0 :(得分:2)

正如@Grimmy所说,我也认为这是通过使用ingress resource and an ingress controller来实现的。

例如,具有nginx和入口控制器的pod可用作Internet和pod之间的负载平衡器。

答案 1 :(得分:0)

在很大程度上取决于您如何配置kubernetes集群。

要访问在kube群集中运行的服务/容器/容器,您需要在主服务器上运行kube-proxy,并在群集使用的覆盖网络中运行非kube docker容器。

服务ClusterIPs是通过kube-proxy设置iptables规则在节点上实现的,因此,假设您有一个不错的覆盖配置,您应该不仅可以从docker访问它们,还可以访问它自己的主机(可能有一些路由/ nat根据设置解决问题)。另一个问题是服务发现,它在kube中通常通过DNS工作,而不是外部暴露,因此您需要将外部容器/进程指向不同的DNS服务器(或使用不同的服务发现方式,例如查询。 /看kubernetes api)。

您还可以使用服务通过NodePort公开您的流量,您可以在kube群集或Ingress(以及使用NodePort / LB公开的IngressController)的每个节点的固定端口上访问您的svc。

也就是说,也许您可​​以在kubernetes中运行此容器并强制它在主节点上进行调度(查找节点亲和性和容差)

答案 2 :(得分:0)

您可以使用类型为NodePort的服务公开容器。然后,您也可以访问网络外部的Pod。如果您已将公共IP分配给节点,那么它将公开给公众。使用该URL,您可以连接到k8s群集之外的容器。