gpt4 book ai didi

kubernetes - 无法从 Inside Service Pod 连接到 Kubernetes Service?

转载 作者:行者123 更新时间:2023-12-02 11:41:08 24 4
gpt4 key购买 nike

我使用来自官方孵化器 repo 的官方 kafka 图表创建了一个单副本 zookeeper + kafka 集群:

helm install --name mykafka -f kafka.yaml incubator/kafka

这给了我两个 pod:

kubectl get pods
NAME READY STATUS
mykafka-kafka-0 1/1 Running
mykafka-zookeeper-0 1/1 Running

还有四个服务(除了默认的kubernetes服务)

kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP
mykafka-kafka ClusterIP 10.108.143.59 <none> 9092/TCP
mykafka-kafka-headless ClusterIP None <none> 9092/TCP
mykafka-zookeeper ClusterIP 10.109.43.48 <none> 2181/TCP
mykafka-zookeeper-headless ClusterIP None <none> 2888/TCP,3888/TCP

如果我进入 zookeeper pod:

> kubectl exec -it mykafka-zookeeper-0 -- /bin/bash

我使用 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 连接尝试挂起,直到我按 ctrl-C:

root@mykafka-zookeeper-0:/# curl -v mykafka-zookeeper:2181
* Rebuilt URL to: mykafka-zookeeper:2181/
* Trying 10.109.43.48...
^C

同样,我可以 shell 进入 kafka pod:

> kubectl exec -it mykafka-kafka-0 -- /bin/bash

通过服务名称连接到 Zookeeper pod 工作正常:

root@mykafka-kafka-0:/# curl mykafka-zookeeper:2181
curl: (52) Empty reply from server

连接到本地主机 kafka 工作正常:

root@mykafka-kafka-0:/# curl localhost:9092
curl: (56) Recv failure: Connection reset by peer

但是通过服务名称连接到 Kafka pod 不起作用,我必须 ctrl-C 尝试 curl :

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 服务?

最佳答案

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

这个主题有几个问题,但这似乎被引用最多: https://github.com/kubernetes/kubernetes/issues/45790

关于kubernetes - 无法从 Inside Service Pod 连接到 Kubernetes Service?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49201842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com