文档首页/ 云容器引擎 CCE/ 常见问题/ 网络管理/ 网络异常问题排查/ 负载均衡类型Service异常问题排查
更新时间:2024-11-06 GMT+08:00
分享

负载均衡类型Service异常问题排查

负载均衡类型Service通过ELB负载均衡对外提供服务,创建负载均衡类型Service时,支持选择已有的ELB实例或自动创建ELB实例。若选择已有的ELB实例,CCE集群会为Service配置ELB监听器、后端服务器组等资源;若选择自动创建ELB实例,CCE除了会为Service配置ELB监听器、后端服务器组等资源,还会负责ELB实例的自动创建。本文将介绍负载均衡型Service的异常问题排查流程。

排查流程

  1. 登录CCE控制台。
  2. 单击集群名称进入集群,在左侧选择“服务”。
  3. 单击对应Service操作栏中的“事件”,查看Service是否存在异常事件。

根据Service异常事件排查

不同异常事件的解决方法如下表所示:

报错信息

说明

解决方案

Quota exceeded for resources: loadbalancer

负载均衡器配额不足,无法为Service自动创建负载监听器。

  • 默认配额为100,请申请提升配额。关于如何查询和提升配额,请参见如何申请扩大配额?
  • 不同Service可以共用同一个负载均衡器,请评估是否可以复用。

Quota exceeded for resources: listener

监听器配额不足,无法为Service创建ELB监听器。

默认配额为200,请申请提升配额。关于如何查询和提升配额,请参见如何申请扩大配额?

can't find backend pod with serivce

Service无后端pod,请确认Service是否已关联Pod且Pod是否正常运行。

failed to ensure load balancer: Not Found

Service关联的负载均衡器不存在。

登录ELB控制台,在对应的region,根据Service的annotations中kubernetes.io/elb.id值,搜索对应的负载均衡器。

如果确认对应的负载均衡器不存在,则按需重建相应的Service,选择其他已有的负载均衡器或选择自动创建负载均衡器。

Update loadbalancer of service([ServiceName]/[Namespace]) error: listener is empty

Service关联的负载均衡器的监听器可能被误删。

登录ELB控制台,在对应的region,根据Service的annotations中kubernetes.io/elb.id值,搜索对应的负载均衡器,并根据端口确认监听器是否存在。

如果确认负载均衡器的指定监听器不存在,则按需重新相应的Service。

Failed to CreateListener : request failed: {"error_msg":"Load Balancer [ELB id] already has a listener with protocol_port of [端口号].","error_code":"ELB.8907","request_id":"xxx"}, status code: 409

监听器端口冲突,ELB侧已有该端口的监听器。

更新Service,设置其他可用的端口号。

Failed to create member : {"error_msg":"Vpc [集群VPC id] of member's subnet_cidr [期望监听器所属的子网] and vpc [ELB VPC id] of loadbalancer [ELB id] mismatch","error_code":"ELB.8902","request_id":"xxx"}, status code: 400

创建Service时,关联了已有的负载均衡器,但负载均衡器和集群不在同一个VPC内。

请确保您选择的负载均衡器和集群在同一个VPC内。

Failed to CreateListener : request failed: {"error_msg":"Loadbalancer [ELB id] has no flavor of type L7_elastic and cannot create listeners of type L7.","error_code":"ELB.8907","request_id":"xxx"}, status code: 409

网络型ELB无法创建七层监听器。

按需准确选择对应规格的负载均衡器实例。

如果需要创建HTTP/HTTPS类型的七层监听器,请使用包含应用型规格的负载均衡器实例。

Failed to CreateListener : request failed: {"error_msg":"Loadbalancer [ELB id] has only flavor of type l7 and cannot create listeners of type l4.","error_code":"ELB.8907","request_id":"xxx"}, status code: 409

应用型ELB无法创建四层监听器。

按需准确选择对应规格的负载均衡器实例。

如果需要创建TCP/UDP类型的四层监听器,请使用包含网络型规格的负载均衡器实例。

根据常见问题对比排查

对于无Service异常事件的异常问题,请参考下表进行排查:

问题类别

问题现象

解决方案

ELB访问类

ELB负载不均

由于负载均衡配置的后端分配策略设置不合理导致ELB负载不均,详情请参见ELB负载不均

集群内无法访问ELB

当Service设置了服务亲和为节点级别,即externalTrafficPolicy取值为Local时,在使用中可能会碰到从集群内部(节点上或容器中)访问不通的情况,详情请参见集群内部无法使用ELB地址访问负载

集群外无法访问ELB

可能是由于ELB配置异常或后端服务器存在异常,详情请参见集群外无法访问ELB

ELB配置类

ELB配置被修改

请参见ELB配置为什么会被修改

ELB的后端被自动删除

请参见服务发布到ELB,ELB的后端为何会被自动删除?

ELB删除类

Service删除后ELB未删除

在不同的场景下,ELB的自动删除策略不同,详情请参见ELB删除策略

ELB负载不均

问题原因

负载均衡配置的后端分配策略设置不合理。

解决方案

  • externalTrafficPolicy为Local的Service需要将ELB后端分配策略设置为加权轮询算法,即为Service添加注解kubernetes.io/elb.lb-algorithm: ROUND_ROBIN。
  • 如果业务为长连接,则需要将ELB后端分配策略设置为加权最少连接算法,即为Service添加注解kubernetes.io/elb.lb-algorithm: LEAST_CONNECTIONS。

集群外无法访问ELB

问题原因

ELB配置异常或后端服务器存在异常。

排查步骤

  1. 执行以下命令,查看Service事件信息,并处理异常事件。具体操作,请参见根据Service异常事件排查
    kubectl -n {your-namespace} describe svc {your-svc-name}
  2. 检查相关端口或URL的后端服务器组是否符合预期。

    如果后端服务器组为空,请检查业务Pod是否正常运行。若关联的Pod运行异常,请解决Pod异常的问题,请参见工作负载状态异常定位方法

ELB配置为什么会被修改

问题原因

CCE集群会在一定条件下根据Service的配置自动更新ELB配置。您额外在ELB控制台上修改的配置均存在被覆盖的风险。

解决方案

建议您使用Annotation配置负载均衡类型的服务对应的ELB。关于注解配置方式的更多信息,请参见使用Annotation配置负载均衡类型的服务

请勿在ELB控制台上手动修改Kubernetes创建并维护的ELB的任何配置,否则有配置丢失的风险,造成Service不可访问。

ELB删除策略

Service删除时对于ELB的自动删除策略如下:

  • 对于Service自动创建的ELB:
    • 如果该ELB未被其他Service使用,则删除原Service时系统会自动删除对应的ELB。
    • 如果其他Service也关联了该ELB,则删除原Service时不会删除对应的ELB。
  • Service选择已有的ELB时,删除Service时,不会删除原有的ELB。

相关文档