假设我有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"
public-ip:port
?或使用kafka-<pod-id>.kafka.my.company.com:port
?另外,这里使用哪个端口? port
还是targetPort
?Advertised.listeners
属性中指定此配置?由于k8s集群内部和外部的服务的端口可能不同。请帮助。
答案 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/