kubernetes - 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
为什么添加一些额外的节点会导致这种情况发生?我们以后如何避免这个问题?
解决方案
推荐阅读
- python - Python动画多子图matplotlib不会显示
- timer - 更新到小数点后的计时器
- spring-boot - @Transaction 不能跨不同服务中的多个方法工作
- intellij-idea - 当我在 IntelliJ Idea Ultimate 中更改模块时,FTP 部署选项不显示
- gcc - 如何使用abspath链接.so?
- javascript - 如何在 Angular 上使用 Highchart?
- angular - 无法在验证器中读取表单组值
- java - CompletableFuture 和垃圾收集
- amazon-web-services - 无法从 AWS CLI/控制台/开发工具包通过 AWS SNS 发送文本消息
- jenkins-plugins - 自定义 Jenkins 插件在重新配置作业时不记得它自己的变量