kubernetes Pod无法(通过服务)连接到自身,只能连接到其他Pod容器

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

on-vagrant-single.html)

我有一个服务和一个创建吊舱的复制控制器。这些Pod需要连接到同一服务中的其他Pod(注意:这最终是使我可以使mongo运行带有副本集(非localhost),但是此简单示例演示了mongo的问题)。

当我从任何节点连接到服务时,它将(按预期方式)分发到其中一个Pod。这将一直工作到负载平衡到自身(我所在的容器)为止。然后它无法连接。

抱歉,很冗长,但是我将附加所有文件,以便您可以在此小示例中看到我的工作。

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

建立dockerfile

docker build -t echoserver .

标记并上传到我的k8s集群的注册表

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

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

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

获取我的POD

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

现在多次连接到该服务…它将为我提供所有Pod的应用程序消息,除了到达其自身时会挂起。

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

如何配置事物,以便服务的所有成员都可以连接到所有其他成员,包括自身?

回答:

感谢所有在GitHub上提供帮助的人。

解决方法如下:

tanen01评论于2月4日在k8s v1.1.7稳定版中看到了相同的问题

问题发生于:

kube-proxy --proxy-mode=iptables

一旦我将其更改为:

           --proxy-mode=userspace

(也是默认值),然后它将再次起作用。

因此,如果遇到这种情况,请--proxy-mode在启动时尝试将其关闭kube-proxy

以上是 kubernetes Pod无法(通过服务)连接到自身,只能连接到其他Pod容器 的全部内容, 来源链接: utcz.com/qa/428377.html

回到顶部