Can';是否从内部服务舱连接到Kubernetes服务?

Can';是否从内部服务舱连接到Kubernetes服务?,kubernetes,Kubernetes,我使用官方孵化器回购的官方卡夫卡图表创建了一个复制版zookeeper+kafka集群: helm install --name mykafka -f kafka.yaml incubator/kafka 这给了我两个豆荚: kubectl get pods NAME READY STATUS mykafka-kafka-0 1/1 Running mykafka-zookeeper-0 1/1 Running

我使用官方孵化器回购的官方卡夫卡图表创建了一个复制版zookeeper+kafka集群:

helm install --name mykafka -f kafka.yaml incubator/kafka
这给了我两个豆荚:

kubectl get pods
NAME                  READY     STATUS
mykafka-kafka-0       1/1       Running
mykafka-zookeeper-0   1/1       Running
和四个服务(除了默认的kubernetes服务)

我使用
curl
工具测试TCP连接。我预计会出现通信错误,因为服务器没有使用HTTP,但如果curl甚至无法连接,我必须按ctrl-C键退出,则TCP连接无法工作

我可以通过
curl localhost:2181
访问本地pod:

root@mykafka-zookeeper-0:/# curl localhost:2181
curl: (52) Empty reply from server
我可以通过
curl mykafka kafka:9092访问其他pod:

root@mykafka-zookeeper-0:/# curl mykafka-kafka:9092
curl: (56) Recv failure: Connection reset by peer
但我无法访问
mykafka zookeeper:2181
。该名称解析为群集IP,但TCP连接的尝试将挂起,直到I ctrl-C:

root@mykafka-zookeeper-0:/# curl -v mykafka-zookeeper:2181
* Rebuilt URL to: mykafka-zookeeper:2181/
*   Trying 10.109.43.48...
^C
类似地,我可以把它扔进卡夫卡吊舱:

> kubectl exec -it mykafka-kafka-0 -- /bin/bash
通过服务名称连接到Zookeeper吊舱工作正常:

root@mykafka-kafka-0:/# curl mykafka-zookeeper:2181
curl: (52) Empty reply from server
root@mykafka-kafka-0:/# curl localhost:9092
curl: (56) Recv failure: Connection reset by peer
连接到本地主机kafka可以正常工作:

root@mykafka-kafka-0:/# curl mykafka-zookeeper:2181
curl: (52) Empty reply from server
root@mykafka-kafka-0:/# curl localhost:9092
curl: (56) Recv failure: Connection reset by peer
但是通过服务名称连接到卡夫卡吊舱不起作用,我必须ctrl-C尝试:

curl -v mykafka-kafka:9092
* Rebuilt URL to: mykafka-kafka:9092/
* Hostname was NOT found in DNS cache
*   Trying 10.108.143.59...
^C

有人能解释为什么使用“我只能从服务外部连接到Kubernetes服务,而不能从服务内部连接到服务吗?

我相信,通过查看Kubernet的运行设置,可以解决您遇到的问题。在启动kubelet时,您可以切换一个名为
--夏萍模式的设置。默认情况下,此设置设置为字符串
promiscuous
,其中pod无法连接到自己的服务,但您可以将其更改为
hairpin-veth
,这将允许pod连接到自己的服务

关于这一主题,有几个问题,但这似乎是引用最多的: