1

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

名称 - kafka
端点 - XXXX:9092

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

env:
    - name: BROKER_IP
      value: kafka

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

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

4

1 回答 1

0

您是否可能忘记创建与端点匹配的服务对象?因为您自己提供 ip-port 对,所以 Service 需要是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在这种情况下)。

于 2019-08-19T07:53:22.350 回答