负载均衡类型Service异常问题排查
负载均衡类型Service通过ELB负载均衡对外提供服务,创建负载均衡类型Service时,支持选择已有的ELB实例或自动创建ELB实例。若选择已有的ELB实例,CCE集群会为Service配置ELB监听器、后端服务器组等资源;若选择自动创建ELB实例,CCE除了会为Service配置ELB监听器、后端服务器组等资源,还会负责ELB实例的自动创建。本文将介绍负载均衡型Service的异常问题排查流程。
排查流程
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“服务”。
- 单击对应Service操作栏中的“事件”,查看Service是否存在异常事件。
- 如果Service存在异常事件,可通过根据事件,参考根据Service异常事件排查查找异常的解决方案。
- 如果Service不存在异常事件,则一般为访问类问题或周边服务配置引入的问题,可参考根据常见问题对比排查查找异常的解决方案。
根据Service异常事件排查
不同异常事件的解决方法如下表所示:
报错信息 |
说明 |
解决方案 |
---|---|---|
Quota exceeded for resources: loadbalancer |
负载均衡器配额不足,无法为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删除类 |
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配置异常或后端服务器存在异常。
排查步骤
- 执行以下命令,查看Service事件信息,并处理异常事件。具体操作,请参见根据Service异常事件排查。
kubectl -n {your-namespace} describe svc {your-svc-name}
- 检查相关端口或URL的后端服务器组是否符合预期。
如果后端服务器组为空,请检查业务Pod是否正常运行。若关联的Pod运行异常,请解决Pod异常的问题,请参见工作负载状态异常定位方法。
ELB配置为什么会被修改
问题原因
CCE集群会在一定条件下根据Service的配置自动更新ELB配置。您额外在ELB控制台上修改的配置均存在被覆盖的风险。
解决方案
建议您使用Annotation配置负载均衡类型的服务对应的ELB。关于注解配置方式的更多信息,请参见使用Annotation配置负载均衡类型的服务。
请勿在ELB控制台上手动修改Kubernetes创建并维护的ELB的任何配置,否则有配置丢失的风险,造成Service不可访问。