簡體   English   中英

使用 loadBalancer 服務時,無法在 Kubernetes 上生產/消費到 Kafka

[英]Unable to produce/consume to Kafka on Kubernetes when using loadBalancer Service

背景

我在 kuberentes 上使用融合的開源 helm 圖表運行 Kafka。 我已經有一個運行托管節點組的 eks 集群。

當我使用 NodePort 公開代理時,它工作正常。 但是我想啟用負載均衡器,我能夠啟用它並且每個代理 pod 創建服務。 (啟用內部網絡負載均衡器)我們所有的生產者都在 aws 中。

$ kubectl get svc -n kafka
NAME                          TYPE           CLUSTER-IP       EXTERNAL-IP                                                                     PORT(S)             AGE
kafka-0-external              LoadBalancer   10.100.185.40    ac5b7fccb69bc4738b2e498995e65de2-9d6b81206f5d1d7d.elb.us-east-2.amazonaws.com   31090:30366/TCP     10m
kafka-1-external              LoadBalancer   10.100.192.249   ae035d93de7874c49bc2402d5c174403-65cdb5cda161fa89.elb.us-east-2.amazonaws.com   31090:31063/TCP     10m
kafka-2-external              LoadBalancer   10.100.80.80     a36dc44c757f4429b81163ab651a7012-e94e40584210b988.elb.us-east-2.amazonaws.com   31090:32700/TCP     10m
kafka-cp-kafka                ClusterIP      10.100.163.158   <none>                                                                          9092/TCP            10m
kafka-cp-kafka-connect        ClusterIP      10.100.139.66    <none>                                                                          8083/TCP            10m
kafka-cp-kafka-headless       ClusterIP      None             <none>                                                                          9092/TCP            10m
kafka-cp-kafka-rest           ClusterIP      10.100.146.106   <none>                                                                          8082/TCP            10m
kafka-cp-schema-registry      ClusterIP      10.100.103.114   <none>                                                                          8081/TCP            10m
kafka-cp-zookeeper            NodePort       10.100.22.195    <none>                                                                          2181:32724/TCP      10m
kafka-cp-zookeeper-headless   ClusterIP      None             <none>                                                                          2888/TCP,3888/TCP   10m

現在我想通過生產和消費來測試。 我在同一個 vpc 中啟動了一個新的 ec2 實例。 我可以獲得元數據,但我不能生產和消費。

ubuntu@ip-192-168-87-196:~/kafka_2.11-2.3.1/bin$ kafkacat -b ae035d93de7874c49bc2402d5c174403-65cdb5cda161fa89.elb.us-east-2.amazonaws.com:31090 -L
Metadata for all topics (from broker -1: ae035d93de7874c49bc2402d5c174403-65cdb5cda161fa89.elb.us-east-2.amazonaws.com:31090/bootstrap):
 3 brokers:
  broker 0 at kafka-cp-kafka-0.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090
  broker 2 at kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090
  broker 1 at kafka-cp-kafka-1.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090
 8 topics:
  topic "test" with 25 partitions:
    partition 0, leader 1, replicas: 1,2,0, isrs: 1,0,2
    partition 5, leader 0, replicas: 0,2,1, isrs: 1,0,2
    partition 10, leader 2, replicas: 2,1,0, isrs: 1,0,2

當我嘗試生產時出現此錯誤

ubuntu@ip-192-168-87-196:~/kafka_2.11-2.3.1/bin$ kafkacat -b ae035d93de7874c49bc2402d5c174403-65cdb5cda161fa89.elb.us-east-2.amazonaws.com:31090 -C -t test
% ERROR: Local: Host resolution failure: kafka-cp-kafka-0.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090/0: Failed to resolve 'kafka-cp-kafka-0.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090': Temporary failure in name resolution
% ERROR: Local: Host resolution failure: kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090/2: Failed to resolve 'kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090': Temporary failure in name resolution
% ERROR: Local: Host resolution failure: kafka-cp-kafka-1.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090/1: Failed to resolve 'kafka-cp-kafka-1.kafka-cp-kafka-headless.kafka.svc.cluster.local:31090': Temporary failure in name resolution

這些是我的聽眾

$ kubectl logs kafka-cp-kafka-2 -n kafka -c cp-kafka-broker | grep -i listeners
+ export KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka:9092,EXTERNAL://:31090
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka:9092,EXTERNAL://:31090
        advertised.listeners = PLAINTEXT://kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka:9092,EXTERNAL://:31090
        listeners = PLAINTEXT://0.0.0.0:9092,EXTERNAL://0.0.0.0:31090
        advertised.listeners = PLAINTEXT://kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka:9092,EXTERNAL://:31090
        listeners = PLAINTEXT://0.0.0.0:9092,EXTERNAL://0.0.0.0:31090
        advertised.listeners = PLAINTEXT://kafka-cp-kafka-2.kafka-cp-kafka-headless.kafka:9092,EXTERNAL://:31090
        listeners = PLAINTEXT://0.0.0.0:9092,EXTERNAL://0.0.0.0:31090

我現在嘗試了幾天,希望得到一些指導。 如果有人有什么要分享的,請告訴我,我錯過了什么?

如果您在 k8s 集群外運行 kafka 客戶端,則必須使用外部 IP 或 KAFKA_ADVERTISED_LISTENERS 在集群外可見的主機名:

KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka-cp-kafka-0.kafka-cp-kafka-headless.kafka:9092,EXTERNAL://ac5b7fccb69bc4738b2e498995e65de2-9d6b81206f5d1d7d.elb.us-east-2.amazonaws.com:30366

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM