在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而不映射到端口吗?我的理解正确吗?
答案 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
)。