【发布时间】:2018-08-18 12:03:22
【问题描述】:
我用来自官方孵化器仓库的官方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
同样,我可以进入 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 服务?
【问题讨论】:
标签: kubernetes