公式のインキュベーターリポジトリからの公式のkafkaチャートを使用して、1つのレプリカのzookeeper + kafkaクラスターを作成します。
helm install --name mykafka -f kafka.yaml incubator/kafka
これにより、2つのポッドが得られます。
kubectl get pods
NAME READY STATUS
mykafka-kafka-0 1/1 Running
mykafka-zookeeper-0 1/1 Running
そして4つのサービス(デフォルトの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
動物園の飼育係のポッドに砲撃した場合:
> kubectl exec -it mykafka-zookeeper-0 -- /bin/bash
このcurl
ツールを使用してTCP接続をテストします。サーバーがHTTPを使用していないため、通信エラーが発生することが予想されますが、curlが接続できず、ctrl-Cを実行する必要がある場合は、TCP接続が機能していません。
ローカルポッドには次の方法でアクセスできます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
しかし、私はアクセスできません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ポッドにシェルすることができます。
> kubectl exec -it mykafka-kafka-0 -- /bin/bash
サービス名でZookeeperポッドに接続すると、正常に機能します。
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ポッドに接続することはできず、curlの試行を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サービスに接続でき、サービス内からは接続できない理由を誰かが説明できますか?
あなたが経験していることは、あなたのkubeletがどのように実行されるように設定されているかを見ることで解決できると思います。と呼ばれるkubeletを起動するときに切り替えることができる設定があります--hairpin-mode
。デフォルトでは、この設定は文字列promiscuous
に設定されており、ポッドは独自のサービスに接続できませんが、ポッドを独自のサービスに接続できるように変更できhairpin-veth
ます。
このトピックにはいくつかの問題がありますが、これは最も参照されているようです:https://github.com/kubernetes/kubernetes/issues/45790
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加