在Kubernetes中使用LoadBalancer服务暴露Kafka集群

3
假设我有一个三个节点的Kafka集群设置。那么如何使用负载均衡器服务将其暴露在云外?我已经阅读了参考资料,但还有一些疑问。
例如下面是代理(broker)的服务:
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. 端口和目标端口是什么?
  2. 我是否需要为每个代理设置负载均衡服务?
  3. 这些多个代理是否映射到云负载平衡器的单个公共 IP 地址上?
  4. k8s/cloud 外部的服务如何访问单个代理?通过使用 public-ip:port 还是 kafka-<pod-id>.kafka.my.company.com:port?此处使用哪个端口?port 还是 targetPort
  5. 如何在 Kafka 代理的 Advertised.listeners 属性中指定此配置?因为 k8s 群集内外的服务端口可能不同。
1个回答

1

根据您提供的信息,我将尝试给您一些答案,并最终提供一些建议。

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

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

2/3) 每个代理都应该作为LoadBalancer暴露,并配置为无头服务以进行内部通信。还应该有一个额外的LoadBalancer,具有外部IP地址,用于外部连接。

服务示例

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) 应该将其设置为外部地址,以便客户端可以连接。 这篇 文章可能有助于理解。

Github 上有类似的案例,这也可能对你有帮助-https://github.com/kow3ns/kubernetes-kafka/issues/3

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接