ALB Ingress Controller是一种用于Kubernetes集群的Ingress Controller,用于将外部流量导入到集群内部的服务。当使用ALB Ingress访问服务时,ALB Ingress Controller会监听Service关联的Endpoint资源的变化,实时将后端节点的状态同步到对应的后端服务器组中,并将变更同步到ALB实例。本文介绍在使用ALB Ingress过程中遇到的各种异常事件的诊断和解决方案。
工作原理
通过ALB Ingress访问服务时,ALB Ingress Controller组件会监控各类资源的变更,并将变更同步至关联的ALB实例。同步过程中可能会因为各项限制或配置错误导致同步过程失败,不同资源的逻辑对应关系和同步情况如下图所示。
步骤一:查看异常事件
控制台方式:在左侧导航栏,选择。选择目标命名空间,单击目标Ingress名称进入基本信息页面,然后切换到事件页签。
kubectl方式:
kubectl describe ingress <ingress-name> -n <namespace>预期输出:
... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedBuildModel 2m28s (x10 over 6m43s) ingress listener is not exist in alb, port: 443, protocol: HTTPS Normal Sync 19s (x32 over 11d) ingress Scheduled for sync Normal SuccessfullyReconciled 4s (x20 over 11d) ingress Successfully reconciled
在事件详细描述或者Message中查找与Ingress相关的事件信息。
Scheduled for sync:表明事件开始。Successfully reconciled:表明完成调谐(reconciled),事件成功结束。Warning类型的报错信息请参考步骤二排查。若无异常事件,但是变更未生效,请参见ALB Ingress无异常事件,但是变更不生效怎么办?
步骤二:分析和解决异常事件
常见异常事件的报错原因及解决方案见下表。
为避免老版本ALB Ingress Controller组件不兼容新功能导致的异常事件,诊断前可参考发布记录将组件升级至目标版本。
报错信息(Message) | 报错原因 | 解决方案 |
listener is not exist in alb, 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。 |
Message: Failed to create SSL Certificate with name default-https-secret-1-b585e6 ({namespace}-{name}-{identity}). Error: 证书已经过期。 | Secret证书已过期。异常信息中证书名称由三部分组成:
|
详细配置方式,请参见配置HTTPS证书以实现加密通信。 |
failed to createSSLCertificateWithName: XXX ErrorCode: NameRepeat Message: 名称重复,请重新输入。 | Ingress使用Secret证书,证书过期后使用配置AlbConfig方式上传证书会复用过期证书的名称,导致SSL证书名称重复。 | |
invalid server group Cookie: |
| 使用重写Cookie方式时,需配置实际的Cookie值: 更多参数说明,请参见通过注解实现会话保持。 |
| 通过组件管理升级ALB Ingress Controller组件。 | |
The quota of alb_quota_server_added_num is exceeded for resource eni-xxxx, usage 202/200 | 触发了ALB的 | 通过配额中心提升服务器组配额。 |
常见问题
ALB Ingress无异常事件,但是变更不生效怎么办?
当出现未执行AlbConfig相关的调谐事件,或者变更事件没有成功处理时,原因可能是IngressClass和AlbConfig的绑定关系错误。请参考使用IngressClass关联AlbConfig与Ingress检查IngressClass中指定的spec.parameters参数是否关联了正确的AlbConfig资源对象名称。