ALB Ingress Controller是一种用于Kubernetes集群的Ingress Controller,用于将外部流量导入到集群内部的服务。当使用ALB Ingress访问服务时,ALB Ingress Controller会监听Service和Endpoint资源的变化,实时将后端节点的状态同步到对应的后端服务器组中,并将变更同步到ALB控制台。本文介绍在使用ALB Ingress过程中遇到的各种异常事件的诊断和解决方案。
资源同步原理
下方图片展示了ALB Ingress资源同步的执行过程,具体可以描述为:
通过AlbConfig创建ALB实例与监听listener1和listener2。
通过Ingress创建了两条转发规则rule1和rule2并关联到监听listener2上,其中转发规则rule1配置了两个服务,分别为vgroup1和vgroup2,转发规则rule2只将流量转发到vgroup2。
通过监听Service和Endpoint资源的变化,实时将后端节点的状态同步到对应的后端服务器组中。
在资源同步过程中,可能会遇到一些限制导致同步失败。以下介绍如何查看、分析和解决异常事件。
步骤一:查看异常事件
将ALB Ingress Controller组件升级至最新版本。
事件通知会不断更新,因此诊断前需要将ALB组件升级至最新版本。具体操作,请参见升级ALB Ingress Controller组件。
执行以下命令,查看Ingress的异常事件。
kubectl -n <your-namespace> describe ingress <your-ingress-name>
在输出结果中查找以
Events
开头的模块,该模块包含与Ingress相关的事件信息。Scheduled for sync
:表明事件开始。Successfully reconciled
:表明事件成功结束。
步骤二:分析和解决异常事件
常见异常事件的报错原因及解决方案见下表。
报错信息 | 报错原因 | 解决方案 |
listener is not exist, port: 80, protocol: HTTP | 对于2.11.0及以上版本的ALB Ingress Controller组件,Ingress上的监听只会进行关联,不会自动创建。若您未在AlbConfig中创建对应的监听,却在Ingress中使用了监听,就会产生报错信息。 | 若您使用的是2.11.0及以上版本的ALB Ingress Controller组件,请在AlbConfig中创建Ingress资源所需的监听。具体操作,请参见通过AlbConfig配置ALB监听。 |
listener not found for (80/HTTP), with ingresses 1 | 对于2.11.0及以上版本的ALB Ingress Controller组件,如果在AlbConfig中直接移除了Ingress仍在关联的监听,将会产生报错,并显示缺失的监听和关联的Ingress个数。 | 如需移除监听,请将监听关联的Ingress全部移除。 重要 如果移除了预期外的监听,则需重新添加已移除的监听。 |
none certificate found for host | 开启了TLS且有域名使用了自动发现证书功能,但是在证书中心没有发现该域名可用的证书。 |
|
The param of Rules.1.RuleConditions.2.PathConfig.Values.1 is illegal | 创建或修改转发规则时包含非法路径参数。 |
|
The param of ServerGroupName is illegal | 该报错说明ALB后端服务器组命名格式不正确。 | 请按照正确的格式命名服务器组名称。 当前服务器组名称的生成格式是 |
The specified resource sgp-vz2fb219vv792flx3u is in use | 该报错说明该托管到ACK的ALB后端服务器组被另外一个ALB实例引用。 | 登录应用型负载均衡ALB控制台,在左侧导航栏选择 ,在服务器组页面找到对应的后端服务器组,根据需求解除关联的ALB实例。 |
Message: 无效参数,请检查参数输入 | 常见于AlbConfig指定证书时,证书ID配置错误。 | 请检查证书ID是否使用了资源ID或数字ID,应当使用CertIdentifier指定的证书ID。 |