【发布时间】:2018-07-10 01:18:23
【问题描述】:
我在 AWS 上运行 KOPS Kubernetes 集群,试图让 kubernetes-kafka 示例与弹性负载均衡器一起工作。这是两个经纪人的外部服务部分:
kind: Service
apiVersion: v1
metadata:
name: outside-0
namespace: kafka
spec:
selector:
app: kafka
kafka-broker-id: "0"
ports:
- protocol: TCP
targetPort: 9094
port: 32400
nodePort: 32400
type: NodePort
---
kind: Service
apiVersion: v1
metadata:
name: outside-1
namespace: kafka
spec:
selector:
app: kafka
kafka-broker-id: "1"
ports:
- protocol: TCP
targetPort: 9094
port: 32401
nodePort: 32401
type: NodePort
这是我尝试通过 ELB 公开这些代理(实际 FQDN 替换为 my.copmany.com)。
apiVersion: v1
kind: Service
metadata:
name: kafka-0
annotations:
dns.alpha.kubernetes.io/external: kafka-0.kafka.my.company.com
spec:
type: LoadBalancer
ports:
- port: 32400
name: outside
targetPort: 32400
selector:
app: outside-0
---
apiVersion: v1
kind: Service
metadata:
name: kafka-1
annotations:
dns.alpha.kubernetes.io/external: kafka-1.kafka.my.company.com
spec:
type: LoadBalancer
ports:
- port: 32401
name: outside
targetPort: 32401
selector:
app: outside-1
查看 AWS ELB 控制台显示 3 个实例中有 0 个可用于每个 Kafka ELB 代理,并使用 Kafka 命令行客户端超时生成到 kafka-1.kafka.my.company.com:9094。 outside-0 NodePort 服务如何通过kafka-0 LoadBalancer 服务暴露?还是有其他方法可以考虑?
【问题讨论】:
-
@DmitryMinkovsky - 谢谢你的链接,两个最重要的答案都有一些很好的元素,第一个通过
ec2-host:port公开它,第二个使用elb:port。我的挑战是每个卡夫卡经纪人都需要拥有自己的“永久”网址,例如subdomain-on-company-domain:port,例如kafka-1.kafka.my.company.com:9094. -
是的,我自己从来没有完全弄清楚。幸运的是,在我的情况下,我最终意识到我可以从内部发送数据,而不是向外部开放 Kafka。如果你明白这一点,请发布答案。
-
ELB DNS 对服务来说是永久的。如果您重新部署甚至删除部署,它不会改变。如果您删除该服务,它将被释放。如果您拥有自己的 DNS,例如 my.kafka.com,则可以将其别名为 ELB DNS
标签: amazon-web-services apache-kafka kubernetes amazon-elb