Kubernetes:来自另一个 pod 的 kafka pod rechability 问题

Kubernetes: kafka pod rechability issue from another pod

我知道以下信息不足以追踪问题,但我仍然需要一些解决方案。

我们有 Amazon EKS 集群。

目前我们面临Kafka pod可达性问题

环境:

工作:

问题:

问题与 kube-proxy 有关。我们需要帮助来解决这个问题。

谁能帮忙指导一下? 我可以重启 kube-proxy 吗?会影响其他pods/deployments吗?

我认为这个问题是由 AWS 的 NLB 仅 TCP 性质引起的(如评论中所述)。

简而言之,your pod-to-pod communication fails when hairpin is needed

要确认这是根本原因,您可以验证当 telnet 工作时,kafka pod 和 client pod 不在 同一个 EC2 节点中。当它们在同一个 EC2 服务器中时,telnet 失败。

有(至少)两种方法可以解决这个问题:

  1. 使用K8s内部网络 - 参考k8s Service的URL

每个 K8s 服务都有 its own DNS FQDN 供内部使用(意味着仅使用 k8s 网络,无需到达 LoadBalancer 并再次返回 k8s)。您可以通过 LB 远程登录而不是 NodePort。 IE。假设您的 kafka 服务名为 kafka。然后你就可以telnet kafka.svc.cluster.local(在kafka服务暴露的端口上)

  1. 使用K8s anti-affinity确保客户端和kafka永远不会在同一个节点上调度。

哦,如 this answer 中所述,您可能需要使该服务 headless