docker - 如何从 docker 主机外部生成在容器内运行的 kafka 代理?
问题描述
我正在尝试向 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
异常。
我在这里想念什么?
更新:
卡夫卡-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
解决方案
我假设你有一个 Kubernetes 服务,它的选择器将入口流链接到你的 Kafka 代理,这暴露了nodePort
(而不是clusterIP
)。
https://kubernetes.io/docs/concepts/services-networking/service/
所以 kubernetes pod 应该可以通过localhost:<nodePort>
.
您还可以在 Kubernetes 集群前面设置一个负载均衡器,然后您可以只公开 k8s pod,即允许外部入口。
然后下一步就是利用一些 DNS 记录,这样基于 docker-compose 的容器产生的出站请求将进入 DNS,然后通过负载均衡器返回到 Kubernetes 集群。
推荐阅读
- ios - iOS标签栏项目忽略标题位置
- xamarin.forms - ZXing : 错误信息 appshell, Zxing.Net.Mobile.Forms.iOS.ZXingScannerView Renderer.LayoutSubviews
- c# - C# - 动态切换按钮事件
- python-3.x - 正则表达式匹配 Dataframe Python 中的列项
- python - 检索主键为元组 (a,b) 且所有行 (a,b') 必须存在于 b' 值的给定列表的 a 列值
- javascript - 如何存储套接字 id 并发送给该用户
- r - 如何根据日期和值从数据框中选择行?
- reactjs - ReactNative:如何让第二个文本组件共享 1 个文本组件溢出的行
- c - 堆栈显示垃圾值
- python-3.x - 在日历上循环三遍