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。 你能说更多关于你的环境吗?