为Kafka创建的Kubernetes端点,但未反映在POD中

时间:2019-08-19 07:41:22

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

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

  

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

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

env:
    - name: BROKER_IP
      value: kafka

POD处于错误状态。在我的引导服务器中,我得到的是 kafka ,而不是所创建的实际端点。有什么想法吗?

更新-刚刚尝试过 kafka:9092 ,它就可以了。那么想知道ENDPOINT仅映射到IP而不映射到端口吗?我的理解正确吗?

1 个答案:

答案 0 :(得分:0)

是否有可能忘记创建与端点匹配的Service对象?因为您要自己提供ip端口对,所以服务必须为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'

但是使用服务的最灵活的方法仍然是使用dns名称(在这种情况下为kafka)。