【K8S系列】Kubernetes LoadBalancer 类型的 Service 未分配 IP 地址排查步骤及命令执行结果分析

在 Kubernetes 中,如果 LoadBalancer 类型的 Service 未分配 IP 地址,以下是详细的故障排查步骤及对应命令的执行结果分析。

一、检查 Service 状态

命令

bash 复制代码
kubectl get svc <service-name>

执行结果分析

输出示例:

plaintext 复制代码
NAME          TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
my-service    LoadBalancer   10.96.0.1      <pending>     80:30000/TCP    5m
  • NAME:Service 的名称。
  • TYPE:Service 的类型(LoadBalancer)。
  • CLUSTER-IP:Service 在集群内的虚拟 IP 地址。
  • EXTERNAL-IP :期望的外部 IP 地址,如果显示 <pending>,表示负载均衡器尚未分配 IP。
  • PORT(S) :Service 的端口配置,格式为 外部端口:节点端口/协议
  • AGE:Service 的存在时间。

结论

如果 EXTERNAL-IP 显示为 <pending>,表示负载均衡器尚未创建或未分配 IP 地址,需要进一步排查。

二、查看 Service 详细信息

命令

bash 复制代码
kubectl describe svc <service-name>

执行结果分析

输出示例:

plaintext 复制代码
Name:              my-service
Namespace:         default
Labels:            <none>
Annotations:       cloudprovider.kubernetes.io/external-ip: true
Selector:          app=my-app
Type:              LoadBalancer
IP:                10.96.0.1
Port:              <unnamed>  80/TCP
Endpoints:         10.244.1.2:8080,10.244.1.3:8080
  • Name:Service 的名称和命名空间。
  • Annotations:可能包含影响负载均衡器创建的注释。
  • Selector:确定哪些 Pod 被包括在内,检查是否匹配到正在运行的 Pod。
  • Type:Service 类型,确认为 LoadBalancer。
  • IP:Service 的 Cluster IP。
  • Port:对外暴露的端口和协议。
  • Endpoints:实际后端 Pod 的 IP 地址和端口。

结论

如果 Endpoints 显示为空,表示没有 Pod 可供访问,可能由于选择器匹配错误或 Pod 状态问题。

三、检查 Kubernetes 控制平面日志

命令

bash 复制代码
kubectl logs -n kube-system <kube-controller-manager-pod>

执行结果分析

输出示例:

plaintext 复制代码
I1015 12:34:56.789012 1 service_controller.go:123] Starting service controller
I1015 12:34:57.123456 1 service_controller.go:456] Provisioning load balancer for service my-service
E1015 12:34:58.123456 1 service_controller.go:789] Failed to create load balancer: insufficient permissions
  • I:表示信息日志。
  • E:表示错误日志,后面跟随具体的错误信息。

结论

如果日志中包含 Failed to create load balancer 的错误信息,可能是由于权限不足或其他问题,需检查 IAM 权限或云提供商配置。

四、检查云提供商的控制台

一般情况下,不能通过 Kubernetes 命令直接获取负载均衡器的详细状态。此时,您需要登录到云提供商的管理控制台(如 AWS、GCP、Azure)查看负载均衡器的创建状态和配置。

云控制台检查内容:

  • 负载均衡器列表:确认负载均衡器是否存在。
  • IP 地址:检查是否分配了外部 IP。
  • 健康检查:确认负载均衡器是否通过了健康检查。
  • 安全组/网络 ACL:确保安全组和网络 ACL 允许流量通过。

结论

如果控制台中未找到负载均衡器,可能是 Kubernetes 没有正确创建,需检查配置和权限。

五、检查资源配额

命令

bash 复制代码
kubectl get resourcequotas

执行结果分析

输出示例:

plaintext 复制代码
NAME                 AGE   REQUESTS   LIMITS
loadbalancer-quota   10m   2          5
  • NAME:资源配额的名称。
  • REQUESTSLIMITS:当前请求的负载均衡器数量和最大允许数量。

结论

如果当前请求数量已达到配额限制,则无法创建新的负载均衡器。需要调整配额或释放不再使用的负载均衡器。

六、检查网络配置

如果负载均衡器创建失败,可能是由于 VPC、子网或安全组的问题。

检查步骤:

  • 登录到云提供商控制台,检查 VPC 和子网配置。
  • 确保负载均衡器所在的子网可以路由到外部网络。
  • 检查安全组,确保允许对负载均衡器端口的访问。

结论

如果网络配置存在问题,需调整 VPC 和安全组设置,以允许负载均衡器正常创建和访问。

七、总结

通过执行上述命令并分析结果,可以逐步排查 LoadBalancer 类型 Service 未分配 IP 的原因。确保检查服务状态、详细信息、控制平面日志、云提供商控制台、资源配额和网络配置,能够有效帮助您定位问题并采取相应的解决方案。

相关推荐
Themberfue1 小时前
UDP/TCP ⑤-KCP || QUIC || 应用场景
网络·网络协议·tcp/ip·计算机网络·udp
安的列斯凯奇6 小时前
SpringBoot篇 单元测试 理论篇
spring boot·后端·单元测试
架构文摘JGWZ6 小时前
FastJson很快,有什么用?
后端·学习
BinaryBardC6 小时前
Swift语言的网络编程
开发语言·后端·golang
邓熙榆6 小时前
Haskell语言的正则表达式
开发语言·后端·golang
元气满满的热码式9 小时前
K8S中Service详解(一)
云原生·容器·kubernetes
专职9 小时前
spring boot中实现手动分页
java·spring boot·后端
Ciderw9 小时前
Go中的三种锁
开发语言·c++·后端·golang·互斥锁·
m0_7482463510 小时前
SpringBoot返回文件让前端下载的几种方式
前端·spring boot·后端
啥也学不会a10 小时前
PLC通信
开发语言·网络·网络协议·c#