使用LoadBalancer服务在Kubernetes中公开Kafka集群

时间:2019-03-27 14:05:42

标签: kubernetes apache-kafka

假设我有3个节点的Kafka群集设置。然后,如何使用负载均衡器服务将其公开到云外部?我已阅读参考资料,但有一些疑问。

下面举例来说,这是为经纪人提供的服务

apiVersion: v1 
  kind: Service metadata: 
  name: kafka-0 
  annotations: dns.alpha.kubernetes.io/external: kafka-0.kafka.my.company.com 
  spec: 
    externalTrafficPolicy: Local 
    type: LoadBalancer 
    ports: 
      - port: 9092 
      name: outside 
      targetPort: 9092 
    selector: app: kafka kafka-pod-id: "0"
  1. 什么是端口和targetPort?
  2. 我是否为每个代理设置LoadBalancer服务?
  3. 这些多个代理是否被映射到云LB的单个公共IP地址?
  4. k8s / cloud以外的服务如何访问个人经纪人?通过使用public-ip:port?或使用kafka-<pod-id>.kafka.my.company.com:port?另外,这里使用哪个端口? port还是targetPort
  5. 如何在Kafka经纪人的Advertised.listeners属性中指定此配置?由于k8s集群内部和外部的服务的端口可能不同。

请帮助。

1 个答案:

答案 0 :(得分:0)

根据您提供的信息,我会尽力给您一些答案,最终给出一些建议。

1) port:是使同一K8s群集中运行的其他服务可见的服务的端口号。换句话说,如果服务要调用在同一Kubernetes集群中运行的另一个服务,则可以使用服务规范文件中针对port指定的端口来执行此操作。

targetPort:是运行服务的POD上的端口。您的应用程序需要在此端口上侦听网络请求,服务才能正常工作。

2/3)每个代理应公开为LoadBalancer,并配置为内部通信的无头服务。应该有一个带有外部IP的附加LoadBalancer,用于外部连接。

服务示例

apiVersion: v1
kind: Service
metadata:
  name: kafka-0
  annotations: dns.alpha.kubernetes.io/external: kafka-0.kafka.my.company.com
spec:
  ports:
  - port: 9092
    name: kafka-port
    protocol: TCP
  selector:
    pod-name: kafka-0
  type: LoadBalancer

4),您必须使用kafka-<pod-id>.kafka.my.company.com:port

5)应该将其设置为外部地址,以便客户端可以连接到它。 This文章可能有助于理解。

Github上也有类似情况,它可能也对您有帮助-https://github.com/kow3ns/kubernetes-kafka/issues/3

此外,您还可以考虑Ingress-https://tothepoint.group/blog/accessing-kafka-on-google-kubernetes-engine-from-the-outside-world/