我正在尝试制作一个在kubernetes启动的容器中运行的kafka代理。我正在玩KAFKA_ADVERTISED_LISTENERES
和KAFKA_LISTERNERS
。
我尝试设置这两个环境变量KAFKA_ADVERTISED_LISTENERES
= PLAINTEXT://<host-ip>:9092
和KAFKA_LISTERNERS
= PLAINTEXT://0.0.0.0:9092
,并使用docker-compose运行。而且我能够从主机之外的应用程序中生成产品。
但是在Kubernetes.yml文件中设置了这两个环境变量,我得到了No broker list available
异常。
我在这里想念什么?
更新:
kafka-pod.yaml:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
namespace: casb-deployment
name: kafkaservice
spec:
replicas: 1
template:
metadata:
labels:
app: kafkaservice
spec:
hostname: kafkaservice
#hostNetwork: true # to access docker out side of host container
containers:
- name: kafkaservice
imagePullPolicy: IfNotPresent
image: wurstmeister/kafka:1.1.0
env: # for production
- name: KAFKA_ADVERTISED_LISTENERES
value: "PLAINTEXT://<host-ip>:9092"
- name: KAFKA_LISTERNERS
value: "PLAINTEXT://0.0.0.0:9092"
- name: KAFKA_CREATE_TOPICS
value: "Topic1:1:1,Topic2:1:1"
- name: KAFKA_MESSAGE_TIMESTAMP_TYPE
value: "LogAppendTime"
- name: KAFKA_LOG_MESSAGE_TIMESTAMP_TYPE
value: "LogAppendTime"
- name: KAFKA_ZOOKEEPER_CONNECT
value: "zookeeper:2181"
ports:
- name: port9092
containerPort: 9092
---
apiVersion: v1
kind: Service
metadata:
namespace: casb-deployment
name: kafkaservice
labels:
app: kafkaservice
spec:
selector:
app: kafkaservice
ports:
- name: port9092
port: 9092
targetPort: 9092
protocol: TCP
答案 0 :(得分:1)
我假设您有一个Kubernetes服务,其选择器将入口流链接到您的Kafka Broker,该服务公开了nodePort
(而不是clusterIP
)。
https://kubernetes.io/docs/concepts/services-networking/service/
因此,应该可以通过localhost:<nodePort>
来访问kubernetes pod。
您还可以在Kubernetes集群之前设置负载均衡器,然后只需暴露k8s吊舱即可,即允许外部进入。
然后下一步是仅利用一些DNS记录,以便基于docker-compose的容器产生的出站请求将转到DNS,然后通过负载平衡器返回到Kubernetes集群。