【问题标题】:Kubernetes Endpoint created for Kafka but not reflecting in POD为 Kafka 创建的 Kubernetes 端点,但未反映在 POD 中
【发布时间】:2019-12-24 09:58:56
【问题描述】:

在 Kubernetes 集群中,我创建了指向 Kafka 集群的端点。端点创建成功。

名称 - kafka
端点 - X.X.X.X:9092

在我的 Spring Boot 应用程序的部署 yaml 中,我保留了环境变量 BROKER_IP。对于这个环境变量我已经指出:

env:
    - name: BROKER_IP
      value: kafka

POD 处于错误状态。在我的 bootstrap-server 中,我得到的是 kafka 而不是创建的实际端点。有什么想法吗?

更新 - 刚刚尝试了 kafka:9092 并且成功了。所以想知道 ENDPOINT 是否仅映射到 IP 而不是端口?我的理解正确吗?

【问题讨论】:

    标签: spring-boot kubernetes apache-kafka spring-kafka kubernetes-service


    【解决方案1】:

    您是否可能忘记创建与端点匹配的服务对象?因为您自己提供 ip-port 对,所以服务需要是 selectorless

    这对我有用:

    kind: Endpoints
    apiVersion: v1
    metadata:
      name: kafka
    subsets:
      - addresses: [{ip: "1.2.3.4"}]
        ports: [{port: 9092}]
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: kafka
    spec:
      ports: [{port: 9092}]
    

    测试它:

    $ kubectl run kafka-dns-test --image=busybox --attach --rm --restart=Never -- nslookup kafka
    If you don't see a command prompt, try pressing enter.
    Server:         10.96.0.10
    Address:        10.96.0.10:53
    
    Name:   kafka.default.svc.cluster.local
    Address: 10.96.220.40
    

    查找成功,忽略额外 *** Can't find xxx: No answer消息

    另外,由于有一个 Service 对象,您可以在 Pod 中获得一些环境变量(无需声明它们):

    KAFKA_PORT='tcp://10.96.220.40:9092'
    KAFKA_PORT_9092_TCP='tcp://10.96.220.40:9092'
    KAFKA_PORT_9092_TCP_ADDR='10.96.220.40'
    KAFKA_PORT_9092_TCP_PORT='9092'
    KAFKA_PORT_9092_TCP_PROTO='tcp'
    KAFKA_SERVICE_HOST='10.96.220.40'
    KAFKA_SERVICE_PORT='9092'
    

    但使用 Service 最灵活的方式仍然是使用 dns 名称(在本例中为kafka)。

    【讨论】:

    • 刚刚使用我的原始配置进行了测试 - kafka:9092 有效!仍然想知道我错过了什么。我只想使用 'kafka' 将尝试您的配置并确认...
    • cannot user dns name as bootstrap server in Spring 期望 hostname:port 已经创建了服务和端点。
    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 2022-10-07
    • 2021-05-06
    • 2021-05-26
    • 2019-10-25
    相关资源
    最近更新 更多