我使用官方孵化器回购中的官方kafka图表创建了一个复制品zookeeper + kafka集群:
:host {
&::before {
content: '';
display: block;
width: 100%;
height: $channel-border-w;
background: $color-border-divider-bg;
}
}
这给了我两个豆荚:
helm install --name mykafka -f kafka.yaml incubator/kafka
还有四项服务(除了默认的kubernetes服务)
kubectl get pods
NAME READY STATUS
mykafka-kafka-0 1/1 Running
mykafka-zookeeper-0 1/1 Running
如果我进入zookeeper pod:
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
我使用> kubectl exec -it mykafka-zookeeper-0 -- /bin/bash
工具测试TCP连接。我期望通信错误,因为服务器没有使用HTTP,但如果curl甚至无法连接,我必须ctrl-C out,那么TCP连接不起作用。
我可以通过curl
访问本地广告连播:
curl localhost:2181
我可以通过root@mykafka-zookeeper-0:/# curl localhost:2181
curl: (52) Empty reply from server
访问其他广告连播:
curl mykafka-kafka:9092
但我无法访问root@mykafka-zookeeper-0:/# curl mykafka-kafka:9092
curl: (56) Recv failure: Connection reset by peer
。该名称解析为群集IP,但尝试TCP连接挂起,直到我ctrl-C:
mykafka-zookeeper:2181
同样,我可以进入kafka pod:
root@mykafka-zookeeper-0:/# curl -v mykafka-zookeeper:2181
* Rebuilt URL to: mykafka-zookeeper:2181/
* Trying 10.109.43.48...
^C
通过服务名称连接到Zookeeper pod工作正常:
> kubectl exec -it mykafka-kafka-0 -- /bin/bash
连接到localhost kafka工作正常:
root@mykafka-kafka-0:/# curl mykafka-zookeeper:2181
curl: (52) Empty reply from server
但是通过服务名称连接到Kafka pod不起作用,我必须ctrl-C卷曲尝试:
root@mykafka-kafka-0:/# curl localhost:9092
curl: (56) Recv failure: Connection reset by peer
任何人都可以解释为什么使用我只能从服务外部而不是从服务内部连接到Kubernetes服务?
答案 0 :(得分:1)
我相信您的体验可以通过查看您的kubelet设置如何运行来解决。您可以在启动名为--hairpin-mode
的kubelet时切换设置。默认情况下,此设置设置为字符串promiscuous
,其中pod无法连接到自己的服务,但您可以将其更改为hairpin-veth
,这将允许pod连接到它自己的服务。
关于这个主题有一些问题,但这似乎被引用最多: https://github.com/kubernetes/kubernetes/issues/45790