首页 > 解决方案 > Kubernetes LoadBalancer 服务在向集群添加新节点后停止响应

问题描述

我们在 GKE(Google Kubernetes Engine 版本 1.13.10)中运行 Kubernetes 集群。它是一个区域集群,从每个区域两个节点开始(总共六个节点)。我们在这个集群上运行了几个服务,包括一些 Web 服务和一个 Kerberos 服务。

最近我们将每个区域的节点数从两个更改为三个(所以我们现在有九个节点)。当我们这样做时,Kerberos 服务变得无法访问。

一些细节:Kerberos 服务在 StatefulSet 中的三个 pod 上运行,位于两个具有静态 IP 地址的服务(UDP 和 TCP)后面。Service 是一个 LoadBalancer 并使用本地外部流量策略,因此我们可以更轻松地记录客户端的 IP 地址。

当我们添加额外的节点时,Kerberos 服务记录了以下事件:

  Type    Reason               Age                From                Message
  ----    ------               ----               ----                -------
  Normal  UpdatedLoadBalancer  53m (x2 over 56m)  service-controller  Updated load balancer with new hosts

pod 继续运行,但服务的外部端点不再可访问:远程登录到端点在另一端没有显示任何内容。重新启动 pod 解决了这个问题。

下面是 TCP 服务的定义:

kind: Service
metadata:
  annotations:
    external-dns.alpha.kubernetes.io/hostname: kdc.example.org
  name: kdc-tcp
  namespace: kdc
spec:
  clusterIP: 10.8.18.71
  externalTrafficPolicy: Local
  healthCheckNodePort: 32447
  loadBalancerIP: 35.101.23.134
  ports:
  - name: kerberos-tcp
    nodePort: 32056
    port: 88
    protocol: TCP
    targetPort: 88
  selector:
    app: kdc
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 35.101.23.134

为什么添加一些额外的节点会导致这种情况发生?我们以后如何避免这个问题?

标签: kubernetesload-balancing

解决方案


推荐阅读