背景
我的kafka是在k8s中以statefulset形式部署的,现在需要外部控制台访问。
方法
修改statefulset,需要配置下面的环境变量,添加EXTERNAL地址。
KAFKA_CFG_LISTENERS中也要添加,否则会报错:advertised.listeners listener names must be equal to or a subset of the ones defined in listeners. Found PLAINTEXT,EXTERNAL. The valid options based on the current configuration are PLAINTEXT
env:
- name: TZ
value: Asia/Shanghai
# 连接zk的地址
- name: KAFKA_CFG_ZOOKEEPER_CONNECT
value: zk-svc:2181
# 必须设置通告地址:端口, 就是外部连接kafka的地址,这里是指定pod的fqdn,记得修改为你的pod地址
- name: KAFKA_CFG_ADVERTISED_LISTENERS
value: "PLAINTEXT://kafka-0.kafka-headless.test.svc.cluster.local:9092,EXTERNAL://1.2.3.4:12345"
- name: KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP
value: "PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT"
- name: KAFKA_CFG_INTER_BROKER_LISTENER_NAME
value: "PLAINTEXT"
# 内部监听地址,默认就是PLAINTEXT://:9092
- name: KAFKA_CFG_LISTENERS
value: "PLAINTEXT://:9092,EXTERNAL://0.0.0.0:31090"
# 这里设置不加密, 否则你得配置加密,要不然会报错
- name: ALLOW_PLAINTEXT_LISTENER
value: "true"
配置kafka nodeport,这里的targetPort不能为9092,否则KAFKA_CFG_LISTENERS会报错端口冲突。
apiVersion: v1
kind: Service
metadata:
name: kafka-nodeport
namespace: test
spec:
ports:
- name: kafka
port: 9092
protocol: TCP
targetPort: 12345
nodePort: 12345
selector:
app: kafka
sessionAffinity: None
type: NodePort
使用offset explorer,不需要配置zk,配置如下:
