kubernetes pod无法连接(通过服务)到自己,只能连接到其他pod-containers

我有一个kubernetes单节点设置(请参阅https://coreos.com/kubernetes/docs/latest/kubernetes-on-vagrant-single.html )

我有一个服务和复制控制器创build窗格。 这些豆荚需要连接到同一服务中的其他豆荚(注意:这最终是为了让我可以运行带有副本集(非本地主机)的mongo,但是这个简单的例子说明了mongo具有的问题)。

当我从任何节点连接到服务时,它将被分配(如预期)到其中一个容器。 这将工作,直到它负载平衡本身(我所在的容器)。 然后它连接失败。

对不起,我要把所有的文件都附上来,这样你就可以看到我在这个小例子中做了什么。

Dockerfile:

FROM ubuntu MAINTAINER Eric H RUN apt-get update; apt-get install netcat EXPOSE 8080 COPY ./entry.sh / ENTRYPOINT ["/entry.sh"] 

这是入口点

 #!/bin/bash # wait for a connection, then tell them who we are while : ; do echo "hello, the date=`date`; my host=`hostname`" | nc -l 8080 sleep .5 done 

build立dockerfile

docker build -t echoserver .

标记并上传到我的k8s群集的registry

 docker tag -f echoserver:latest 127.0.0.1:5000/echoserver:latest docker push 127.0.0.1:5000/echoserver:latest 

这是我的复制控制器

 apiVersion: v1 kind: ReplicationController metadata: labels: role: echo-server app: echo name: echo-server-1 spec: replicas: 3 template: metadata: labels: entity: echo-server-1 role: echo-server app: echo spec: containers: - image: 127.0.0.1:5000/echoserver:latest name: echo-server-1 ports: - containerPort: 8080 

最后,这是我的服务

 kind: Service metadata: labels: app: echo role: echo-server name: echo-server-1 name: echo-server-1 spec: selector: entity: echo-server-1 role: echo-server ports: - port: 8080 targetPort: 8080 

创build我的服务kubectl create -f echo.service.yaml

创build我的rc kubectl create -f echo.controller.yaml

得到我的PODs

 kubectl get po NAME READY STATUS RESTARTS AGE echo-server-1-jp0aj 1/1 Running 0 39m echo-server-1-shoz0 1/1 Running 0 39m echo-server-1-y9bv2 1/1 Running 0 39m 

获取服务IP

 kubectl get svc NAME CLUSTER_IP EXTERNAL_IP PORT(S) SELECTOR AGE echo-server-1 10.3.0.246 <none> 8080/TCP entity=echo-server-1,role=echo-server 39m 

执行到其中一个荚kubectl exec -t -i echo-server-1-jp0aj /bin/bash

现在连接到服务多次…它会给我的所有豆荚的应用程序消息,除了当它到达本身,因此它挂起。

 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 hello, the date=Mon Jan 11 22:02:38 UTC 2016; my host=echo-server-1-y9bv2 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 ^C root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 hello, the date=Mon Jan 11 22:02:43 UTC 2016; my host=echo-server-1-shoz0 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 ^C root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 hello, the date=Mon Jan 11 22:31:19 UTC 2016; my host=echo-server-1-y9bv2 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 hello, the date=Mon Jan 11 22:31:23 UTC 2016; my host=echo-server-1-shoz0 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 hello, the date=Mon Jan 11 22:31:26 UTC 2016; my host=echo-server-1-y9bv2 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 hello, the date=Mon Jan 11 22:31:27 UTC 2016; my host=echo-server-1-shoz0 root@echo-server-1-jp0aj:/# nc 10.3.0.246 8080 

我怎样才能configuration一个服务的所有成员可以连接到所有其他成员,包括自己?

感谢所有在GitHub上帮助过的人。
变通办法原来如下:

tanen01评论2月4日在这里看到同样的问题在k8s v1.1.7稳定

问题发生在:

 kube-proxy --proxy-mode=iptables 

一旦我改变它:

  --proxy-mode=userspace 

(也是默认),那么它再次工作。

所以,如果您遇到这种情况,请尝试在启动kube-proxy时closures--proxy-mode

我已经看到至less有一个其他用户报告。 我提出了一个问题: https : //github.com/kubernetes/kubernetes/issues/20475

我假设你使用了该链接的Kubernetes版本 – 1.1.2。

这应该是工作 – 我们已经用kubernetes v1.1中的iptables代理(不是默认的,但将在v1.2中)对它进行了广泛的testing。 你能说更多关于你的环境吗?