本文汇总了使用ALB Ingress时遇到的常见问题。
索引
为什么ALB Ingress规则不生效?
ALB Ingress和Nginx Ingress有什么区别?
ALB后端默认监听转发到kube-system-fake-svc-80服务器组,该服务器组的作用是什么?
ALB Ingress是否支持同时使用公网和私网?
为什么在集群中看不到ALB Ingress Controller Pod?
如何保证ALB Ingress使用固定的ALB域名?
创建ACK托管版集群时选择使用ALB Ingress,是否会自动创建ALB实例?
为什么在ALB控制台手动变更的配置会丢失,并且添加的规则会被删除,访问日志会被关闭?
ALB Ingress转发规则创建后被立即删除,出现503状态码怎么办?
ALB Ingress无异常事件,但是变更不生效怎么办?
在控制台上配置完创建的ALB实例后,使用kubectl apply命令更新AlbConfig的ACL(访问控制列表)配置,为什么会导致部分监听被删除?
如何优化Service中Pod变配场景下的Server调谐时间?
为什么ALB Ingress规则不生效?
ALB实例是按照串行的方式维护路由规则。也就是说,如果多个ALB Ingress使用的是同一个ALB实例,那么一个ALB Ingress配置有问题,其他的ALB Ingress变更都不会生效。
如果您创建的ALB Ingress没有生效,那么有可能是之前创建的ALB Ingress发生了错误。您需要将错误的ALB Ingress修正为正确后,新创建的ALB Ingress才能生效。
ALB Ingress和Nginx Ingress有什么区别?
推荐您使用ALB Ingress,相较于Nginx Ingress需要您自己运维,ALB Ingress基于阿里云应用型负载均衡ALB(Application Load Balancer),属于全托管免运维的云服务,提供了更为强大的Ingress流量管理方式和高性能的网关服务。关于Nginx Ingress与ALB Ingress的对比详情,请参见Nginx Ingress、ALB Ingress和MSE Ingress对比。
ALB后端默认监听转发到kube-system-fake-svc-80服务器组,该服务器组的作用是什么?
创建监听必须有一个默认转发规则,并且转发规则目前只支持转发到某个服务器组。所以,当前需要通过创建kube-system-fake-svc-80服务器组实现监听功能。该服务器组不参与业务处理,但不能被删除。
ALB Ingress是否支持同时使用公网和私网?
支持。如果您想同时使用公网和私网访问ALB Ingress,您需要创建公网ALB实例,该实例会在每个可用区创建一个公网EIP,ALB实例可以通过EIP与公网通信。同时,该实例还会提供一个私网VIP,您可以通过私网VIP访问ALB实例,实现从私网访问的效果。如果您只想私网访问ALB Ingress,建议您创建一个私网ALB实例。
为什么在集群中看不到ALB Ingress Controller Pod?
仅ACK专有版才能在kube-system命名空间下看到ALB Ingress Controller Pod。ACK标准版、ACK Pro版和ACK Serverless托管了ALB Ingress Controller组件,因此无法在集群中看到ALB Ingress Controller Pod。关于ACK专有版升级到ACK Pro版的具体操作,请参见热迁移ACK专有版集群至ACK集群Pro版。
如何保证ALB Ingress使用固定的ALB域名?
通过ALBConfig创建ALB实例之后,ALB Ingress会通过IngressClass引用ALBConfig,从而使用对应的ALB实例域名。如果ALB Ingress关联的IngressClass以及ALBConfig不做变更,则域名保持不变。
创建ACK托管版集群时选择使用ALB Ingress,是否会自动创建ALB实例?
不会。创建ACK托管版集群时选择ALB Ingress,将会安装ALB Ingress Controller,并不会自动创建ALB实例。
为什么在ALB控制台手动变更的配置会丢失,并且添加的规则会被删除,访问日志会被关闭?
ALB Ingress需要通过修改集群内资源来实现配置变更,相应的配置会以ALB Ingress或ALBConfig的形式保存在集群的APIServer中。在ALB控制台手动修改配置的行为并没有修改APIServer中的资源,所以修改的配置并不会生效。如果触发集群内调和操作,就会使用Ingress或ALBConfig中的配置对控制台配置进行变更,导致出现手动修改的配置被覆盖的现象。建议您通过修改ALB Ingress或AlbConfig来修改对应配置。
ALB Ingress转发规则创建后被立即删除,出现503状态码怎么办?
检查转发规则对应Ingress是否都配置了canary:true
注解项。由于Canary灰度强制需要主干版本才能引流,所以对于主干版本的Ingress,不需要添加canary:true
注解。关于如何使用ALB Ingress实现服务的灰度发布,请参见通过ALB Ingress实现灰度发布。
Canary灰度方式仅支持两个Ingress且条件有限,推荐您使用自定义转发规则,使用更丰富的引流方案 。具体操作,请参见自定义ALB Ingress的转发规则。
ALB Ingress无异常事件,但是变更不生效怎么办?
当出现未执行AlbConfig相关的调和事件,或者变更事件没有成功处理时,原因可能是IngressClass和AlbConfig的绑定关系错误。请按照使用文档检查IngressClass中指定的parameters
参数是否正确。具体信息,请参见使用IngressClass关联AlbConfig与Ingress。
在控制台上配置完创建的ALB实例后,使用kubectl apply命令更新AlbConfig的ACL(访问控制列表)配置,为什么会导致部分监听被删除?
优先推荐使用kubectl edit
命令直接更新资源的配置。如果必须使用kubectl apply
命令来更新资源,请在执行kubectl apply
命令之前先执行kubectl diff
命令预览变更点,确保变更符合预期,然后再使用kubectl apply
命令将变更应用到Kubernetes集群。
kubectl apply
命令的语义会对ALBConfig进行覆盖式更新。因此,在使用kubectl apply
命令更新ALBConfig的ACL配置时,请确保YAML文件中包含了完整的监听配置,以免未包含的监听被删除。
若执行kubectl apply
命令后发现有监听被删除,推荐您按照以下方式进行恢复。
查看YAML文件中是否指定了完整的监听列表。
若监听列表中缺少被删除的监听,请执行下一步操作。否则,无需执行。
执行以下命令,编辑对应的AlbConfig,将被删除的监听配置添加回来。
kubectl -n <namespace> edit AlbConfig <albconfig-name> # 将<namespace>和<albconfig-name>分别替换为AlbConfig资源所在的命名空间和AlbConfig资源的名称。
如何优化Service中Pod变配场景下的Server调谐时间?
在Kubernetes环境下,Service进行Pod扩缩容时,Server调谐时间的长短可能受到关联的Ingress数量影响。为保证Server调谐效率,您可以采取以下措施:
限制Ingress数量:同一个Service挂载的Ingress数不超过30条。
合并Ingress规则:当Ingress数量过多时,您可以将多个Service挂载在同一个Ingress下,然后通过在同一个Ingress资源下定义多条转发规则来提升Server调谐性能。