ACK集群中的服务默认与外部网络隔离。ALB Ingress通过使用具备域名路由、安全防护和高可用能力的应用型负载均衡 ALB作为外部流量入口,以满足将集群内部服务暴露给用户访问的需求。
工作原理
|
Service类型限制
当使用flannel网络插件时,ALB Ingress后端Service仅支持NodePort和LoadBalancer类型。
安装ALB Ingress Controller组件
登录容器服务管理控制台,单击创建集群。
在组件配置阶段的Ingress配置区域,选择安装ALB Ingress。
以新建ALB实例为例,然后按照页面提示创建集群。
实例来源
说明
新建
自动创建ALB实例、AlbConfig和IngressClass。
ALB实例:在集群VPC内自动创建一个标准版、按量付费的公网/私网ALB实例,并配置
HTTP:80监听。AlbConfig和IngressClass:在集群中自动创建与ALB实例关联的AlbConfig和IngressClass资源对象。
使用已有
仅当集群网络配置为使用已有专有网络时可选
使用一个已有的ALB实例,并自动创建AlbConfig和IngressClass。该ALB实例的功能版本需为标准版或WAF增强版,网络类型需为与集群同VPC的公网/私网类型,且未被其他集群关联。
暂不创建
仅安装ALB Ingress Controller组件,后续需手动创建AlbConfig和IngressClass,适用于需要自定义ALB实例配置的场景。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,单击组件管理。
通过搜索栏或者网络页签找到组件,在ALB Ingress Controller组件卡片的右下角,单击安装。
以新建ALB实例为例,然后单击确认。
实例来源
说明
新建
自动创建ALB实例、AlbConfig和IngressClass。
ALB实例:在集群VPC内自动创建一个标准版、按量付费的公网/私网ALB实例,并配置
HTTP:80监听。AlbConfig和IngressClass:在集群中自动创建与ALB实例关联的AlbConfig和IngressClass资源对象。
使用已有
使用一个已有的ALB实例,并自动创建AlbConfig和IngressClass。该ALB实例的功能版本需为标准版或WAF增强版,网络类型需为与集群同VPC的公网/私网类型,且未被其他集群关联。
暂不创建
仅安装ALB Ingress Controller组件,后续需手动创建AlbConfig和IngressClass,适用于需要自定义ALB实例配置的场景。
创建示例应用
示例应用将部署一个名称为coffee的无状态工作负载(Deployment)以及对应的coffee-svc服务(Service)。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
单击使用YAML创建资源,示例模板选择自定义。然后将以下内容复制到模板区域,单击创建。
在弹窗提示中单击查看,确认Pod状态为
Running。
使用以下内容创建
coffee-deployment-service.yaml文件。创建示例应用的Deployment和Service。
kubectl apply -f coffee-deployment-service.yaml确认Pod状态为
Running。kubectl get pod -l app=coffee预期输出:
NAME READY STATUS RESTARTS AGE coffee-84bd6*****-***** 1/1 Running 0 4m22s coffee-84bd6*****-***** 1/1 Running 0 4m22s
创建ALB Ingress
通过配置ALB Ingress的域名和路径映射,实现访问ingress-demo.com/coffee域名即可路由至集群内部coffee-svc服务的功能。
在ACK专有集群中使用ALB Ingress,需要授予ALB Ingress Controller访问权限。
在左侧导航栏,选择。选择
default命名空间,单击创建 Ingress。添加以下Ingress配置,单击确定。
名称:
coffee-ingress域名:
ingress-demo.com路径映射:路径:
/coffee,匹配规则:前缀匹配(Prefix),服务名称:coffee-svc,端口:80。匹配规则(pathType)
说明
前缀匹配(Prefix)
匹配请求URL路径的前缀部分。例如,可匹配
/coffee/1或/coffee/buy/1路径,但不能匹配/cof或/coffeebuy/1。完整匹配(Exact)
完全匹配请求URL路径。仅
/coffee路径可匹配。默认(ImplementationSpecific)
由Ingress Controller实现的具体逻辑决定。在ALB Ingress Controller中为完整匹配(Exact)。
获取端点地址。
ALB Ingress生效过程耗时约10秒,可稍后单击刷新按钮获取端点信息。若长时间未更新端点信息,可单击路由名称,进入事件页签,进行异常问题排查。

测试访问域名和端点地址,若HTTP状态码为
200即表示ALB Ingress已创建成功。curl -H "Host:ingress-demo.com" http://<端点地址>/coffee -s -o /dev/null -w "%{http_code}\n"
创建ALB Ingress。将以下YAML内容保存为
coffee-ingress.yaml文件,然后执行kubectl apply -f coffee-ingress.yaml命令。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: coffee-ingress namespace: default spec: ingressClassName: alb rules: - host: ingress-demo.com http: paths: - path: /coffee backend: service: name: coffee-svc port: number: 80 pathType: Prefix匹配规则(pathType)
说明
前缀匹配(Prefix)
匹配请求URL路径的前缀部分。例如,可匹配
/coffee/1或/coffee/buy/1路径,但不能匹配/cof或/coffeebuy/1。完整匹配(Exact)
完全匹配请求URL路径。仅
/coffee路径可匹配。默认(ImplementationSpecific)
由Ingress Controller实现的具体逻辑决定。在ALB Ingress Controller中为完整匹配(Exact)。
查看Ingress并获取
ADDRESS字段中的端点地址。kubectl get ingress coffee-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'预期输出:
alb-******************.cn-wulanchabu.alb.aliyuncsslb.com测试访问域名和端点地址,若HTTP状态码为
200即表示ALB Ingress已创建成功。curl -H "Host:ingress-demo.com" http://<端点地址>/coffee -s -o /dev/null -w "%{http_code}\n"
计费说明
ALB Ingress Controller组件:该组件为ACK托管组件,不涉及用户侧的资源使用和计费。
ALB实例:每个AlbConfig资源对象会创建一个对应的ALB实例,ALB实例的计费规则为按量付费。
应用于生产环境
配置域名解析:将业务域名通过CNAME记录解析至ALB实例提供的公网访问地址,以解耦域名与ALB实例访问地址,确保服务入口的高可用与灵活配置。
配置HTTPS安全加密:在数字证书管理服务中统一管理证书,并在Ingress资源的
tls字段中声明式地引用该证书,从而实现服务流量的HTTPS安全加密。
配额与限制
AlbConfig、Ingress、Service和Namespace的资源名称不能以
aliyun开头。ALB Ingress的配额限制,请参见ALB配额计算方式。
ALB Ingress支持的地域与可用区,请参见ALB支持的地域与可用区。
常见问题
为什么访问Ingress域名返回了503、502、404等HTTP错误码?
问题原因
503(Service Temporarily Unavailable)错误
路由规则未匹配:请求路径与Ingress实际配置的路由规则不符。
后端无存活Pod:Service关联的Pod全部未就绪或不存在,导致Endpoints对象为空。
502(Bad Gateway)错误
HTTP或HTTPS监听接收到客户端连接请求后,ALB由于无法正常将请求转发至Pod或无法从Pod收到响应,则会向客户端发送HTTP 502 Bad Gateway状态码。
404(Not Found)错误
通常原因为已匹配Ingress中定义的路由规则,但与Pod中应用实际提供服务的URL不匹配。
更多HTTP错误码说明,请参见ALB状态码说明。
解决方案
检查Ingress状态:执行
kubectl describe ingress <ingress-name> -n <namespace>命令,查看Events部分是否有错误信息。如出现类似listener is not exist in alb的事件,请在AlbConfig中创建Ingress资源所需的监听。... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedBuildModel **** ingress listener is not exist in alb, port: 443, protocol: HTTPS Warning FailedBuildModel **** ingress listener not found for (443/HTTPS), with ingresses 1 ...检查后端Endpoints:执行
kubectl get endpoints <service-name> -n <namespace>命令,确认ENDPOINTS字段下有至少一个健康的Pod IP和端口。若为空,则排查Service的selector是否与Pod的labels匹配,以及Pod是否处于Running状态。检查Pod状态与日志:先执行
kubectl get pod -l <app=your-app> -n <namespace>命令,查看Pod运行状态。获取Pod名称之后执行kubectl logs <pod-name> -n <namespace>命令,查看应用日志是否有启动失败或处理请求的错误信息。网络连通性测试:在Pod内或节点上尝试
curl后端Service的ClusterIP或Pod IP,验证集群内部服务是否可达。
配置Ingress TLS后,为什么HTTPS还是无法访问?
问题原因
ALB实例未监听443端口:只配置了Ingress的TLS安全加密,但没有创建对应的
HTTPS:443监听。证书配置错误:Secret类型不是
kubernetes.io/tls或IngressTLS,或者data中的tls.crt和tls.key内容不正确或不匹配。证书更新不生效:在阿里云证书中心更新了证书,但未更新AlbConfig中指定的证书ID,或未触发自动发现证书调谐,导致ALB实例仍引用旧证书。
解决方案
检查监听端口:执行
kubectl describe albconfig <alb-name> -n <namespace>命令,检查是否缺少spec.listeners.port: 443和spec.listeners.protocol: HTTPS配置。检查Ingress配置:检查Ingress的配置中是否缺少注解
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}],该注解将Ingress关联到HTTP和HTTPS监听上。检查Secret配置:检查Ingress的配置中
spec.tls的secretName字段,确认引用了正确的Secret。执行kubectl get secret <secret-name> -n <namespace> -o yaml命令,确认Secret类型和数据完整性。
如何为Ingress配置域名解析?
以添加一个记录类型为
CNAME、主机记录为@(表示直接解析主域名,如ingress-demo.com)、记录值为Ingress端点地址的解析记录为例。在浏览器中访问http://ingress-demo.com/coffee,验证域名解析生效。

请替换为实际注册域名进行验证。如发现解析不生效,请参考解析不生效问题快速排查。
如何为Ingress配置HTTPS安全加密?
以下载
ingress-demo.com域名、服务器类型为其他的PEM格式证书文件为例。创建Secret存储证书文件。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。
在保密字典页面,选择
default命名空间,单击左侧创建。添加以下配置,单击确定。名称:
ingress-tls类型:TLS证书
证书:已下载并解压的证书文件(.pem)中的完整内容
密钥:已下载并解压的证书私钥文件(.key)中的完整内容

更新AlbConfig,为ALB实例新增
HTTPS:443监听。在左侧导航栏,选择。在资源对象浏览器页签中,搜索AlbConfig,然后单击搜索结果。
在AlbConfig资源对象列表中,找到目标资源
alb,单击其右侧操作列下的YAML编辑。新增
spec.listeners.port: 443和spec.listeners.protocol: HTTPS字段,然后单击确定。
更新Ingress,添加TLS配置并关联
HTTPS:443监听。在左侧导航栏,选择。在目标路由右侧操作栏中,单击更新。
添加以下配置,单击确定。
TLS配置:开启
域名:
ingress-demo.com保密字典:
ingress-tls注解:
alb.ingress.kubernetes.io/listen-ports: [{"HTTP": 80}, {"HTTPS": 443}]
在浏览器中访问
https://ingress-demo.com/coffee,验证HTTPS加密访问。
请替换为实际注册域名进行验证。
更多HTTPS证书的配置方式,请参见配置HTTPS证书以实现加密通信。
相关文档
- 本页导读 (1)
- 工作原理
- Service类型限制
- 安装ALB Ingress Controller组件
- 创建示例应用
- 创建ALB Ingress
- 计费说明
- 应用于生产环境
- 配额与限制
- 常见问题
- 相关文档

