spring-boot - 为Kafka创建的Kubernetes端点,但未反射(reflect)在POD中

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

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

Name - kafka
Endpoint - X.X.X.X:9092



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

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

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

最佳答案

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

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

关于spring-boot - 为Kafka创建的Kubernetes端点,但未反射(reflect)在POD中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57552378/

相关文章:

kubernetes - 为什么 Kubernetes v1.12 不再需要升级延迟?

java - Apache Flink 从 Kafka 读取 Avro byte[]

java - 无法自动配置 session 存储库,请检查您的配置( session 存储类型为 'null' )

spring-boot - Spring Data Redis 覆盖默认序列化器

kubernetes - 访问prometheus服务器的入口路由规则

apache-kafka - Kafka 的 session.timeout.ms 和 max.poll.interval.ms 之间的差异 >= 0.10.1

hdfs - 从kafka写入hdfs(使用cloudera cdk?)

spring - 未找到多部分边界

spring - Spring Boot应用中service层有什么用?

docker - 在 Helm chart values.yaml 中拉取 docker hub 镜像