使用ALB Ingress时,您需要在集群中创建多种资源以配置由ALB Ingress到后端Pod的完整转发路径。您可以参考本文快速部署示例后端应用,并创建ALB Ingress以对外提供服务。
注意事项
如果您使用的是Flannel网络插件,则ALB Ingress后端Service服务仅支持NodePort和LoadBalancer类型。
AlbConfig、Namespace、Ingress和Service这些资源的名称不能以aliyun开头。
低版本Nginx Ingress Controller无法识别Ingress资源中的
spec:ingressClassName
字段。如果集群中同时存在Nginx Ingress和ALB Ingress,会存在ALB Ingress被低版本Nginx Ingress Controller调谐的风险。因此,请及时升级Nginx Ingress Controller版本,或通过Annotation注解项指定ALB Ingress对应的ingressClass。具体操作,请参见升级Nginx Ingress Controller组件或ALB Ingress服务高级用法。
使用说明
在您开始创建ALB Ingress之前,建议先通过ALB Ingress概述,了解它的原理和要求。确保满足以下资源条件:
ACK专有集群中使用ALB Ingress,需要为ALB Ingress Controller授权。相关操作请参见为ACK专有集群授予ALB Ingress Controller访问权限。
在安装ALB Ingress组件时,您可以选择不同的ALB云原生网关实例来源,这将影响操作结果:
(推荐)选择新建或使用已有:
Controller会自动创建名为
alb
的AlbConfig和相应的IngressClass资源。在AlbConfig中,默认配置一个监听端口为80、协议为HTTP的监听。选择暂不创建:
在创建ALB Ingress之前,您需要先手动创建AlbConfig和IngressClass,因为Controller不会自动创建这些资源。
AlbConfig和IngressClass
AlbConfig:
用于管理ALB实例,其参数决定了ALB实例的配置。一个AlbConfig对应一个ALB实例。更多配置请参见通过AlbConfig配置ALB实例。
IngressClass:
需要关联一个AlbConfig,从而实现与一个ALB实例的关联。在创建ALB Ingress时可以通过指定该IngressClass来引用相应的AlbConfig配置,从而实现特定的应用路由配置和负载均衡策略。
创建示例应用和Service
Service:为具有相同功能的Pod提供了一个稳定、统一的入口。在创建ALB Ingress时需要配置路由规则将外部流量转发到对应的Service。
本文示例介绍安装ALB Ingress组件时ALB云原生网关实例将选择新建。然后将部署名为coffee
和tea
的应用及对应Service,并为其创建一个域名为demo.domain.ingress.top
的ALB Ingress。在完成DNS域名解析后,您将能够访问该应用。
安装组件
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择
。在组件管理页面,单击网络页签,在网络组件区域,在ALB Ingress Controller组件卡片的右下角单击安装。
在安装组件 ALB Ingress Controller对话框,在ALB 云原生网关实例来源中根据情况选择新建,然后单击确定。
实例来源
描述
结果说明
新建
网络类型:根据需要可选择创建公网或私网的ALB实例,计费详情请参见ALB计费规则。
专有网络:默认值,与集群中专有网络相同。
虚拟交换机:展示此专有网络下ALB支持的可用区对应的虚拟交换机。需要指定2个不同可用区的交换机,若不指定,则自动挑选2个可用交换机。您也可以通过单击创建虚拟交换机创建新的交换机。
Controller会自动创建名为
alb
的AlbConfig和相应的IngressClass资源。在AlbConfig中,默认配置一个监听端口为80、协议为HTTP的监听。关于监听扩展请参见创建HTTPS监听。使用已有
您可以从下拉菜单中选择已有的ALB实例进行复用。不支持使用基础版ALB实例。详情请参见复用已有ALB实例。
暂不创建
暂时不创建ALB实例,仅安装ALB Ingress Controller组件。
Controller将不会创建相应资源,您需手动创建AlbConfig和创建IngressClass。
创建示例应用和Service
控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
单击使用YAML创建资源。
示例模板:选择自定义。
模板:输入YAML配置文件代码。该配置文件用于部署两个名称分别为
coffee
和tea
的Deployment,以及两个名称分别为coffee-svc
和tea-svc
的Service。
配置完成后单击创建,页面将提示创建成功。
检查Deployment和Service创建成功:
在左侧导航栏,选择工作负载 > 无状态。可查看到名称为coffee和tea的Deployment已部署。
在左侧导航栏,选择网络 > 服务。可查看到名称为coffee-svc和tea-svc的Service已部署。
kubectl
创建并拷贝以下内容到cafe-service.yaml文件中,用于部署两个名称分别为
coffee
和tea
的Deployment,以及两个名称分别为coffee-svc
和tea-svc
的Service。执行以下命令,部署两个Deployment和两个Service。
kubectl apply -f cafe-service.yaml
预期输出:
deployment "coffee" created service "coffee-svc" created deployment "tea" created service "tea-svc" created
执行以下命令,查看应用和服务的状态。
执行以下命令,查看应用的状态。
kubectl get deployment
预期输出:
NAME READY UP-TO-DATE AVAILABLE AGE coffee 1/2 2 1 2m26s tea 1/1 1 1 2m26s
执行以下命令,查看服务的状态。
kubectl get svc
预期输出:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE coffee-svc NodePort 172.16.XX.XX <none> 80:32056/TCP 9m38s tea-svc NodePort 172.16.XX.XX <none> 80:31696/TCP 9m38s
创建ALB Ingress
控制台
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在路由页面,单击创建 Ingress,在创建 Ingress对话框配置路由。
配置项
说明
示例值
网关类型
可按需选择ALB Ingress、MSE Ingress和Nginx Ingress三种网关类型。
关于三种网关的差异,请参见Nginx Ingress、ALB Ingress和MSE Ingress对比。
ALB Ingress
名称
自定义路由名称。
cafe-ingress
Ingress Class
选择关联AlbConfig的资源类。
alb
规则
单击+ 添加规则可新增多个路由规则。
域名:自定义域名。
说明生产环境:指定自定义域名,需要进行配置域名解析后,通过指定域名进行访问。
测试环境:不指定,为空,通过ALB Ingress自动生成的端点DNS名称进行访问。
路径映射:配置如下配置项。
路径:指定服务访问的URL路径。
匹配规则:
前缀匹配(Prefix):匹配请求URL路径的前缀部分。
完整匹配(Exact):完全匹配请求URL路径。
默认(ImplementationSpecific):由Ingress控制器实现的具体逻辑决定。
更多详情请参见基于URL路径转发请求。
服务名称:选择目标服务,即K8s内的Service。
端口:选择服务需要暴露的端口。
Ingress支持同一个域名下配置多条路径。单击+ 添加路径新增路径。
域名:demo.domain.ingress.top
路径映射:
路径:/tea
匹配规则:前缀匹配(Prefix)
服务名称:tea-svc
端口:80
路径映射:
路径:/coffee
匹配规则:前缀匹配(Prefix)
服务名称:coffee-svc
端口:80
其他配置保持默认,参数详情请参见配置扩展。
配置完成,在创建Ingress页面的左下角,单击确定。
检查Ingress创建成功并复制端点:
在左侧导航栏,选择网络 > 路由。可查看到名称为
cafe-ingress
的Ingress已部署。在
cafe-ingress
的端点列,复制其对应的ALB DNS端点名称。
kubectl
创建并拷贝以下内容到cafe-ingress.yaml文件中,用于创建Ingress。
可调整参数说明如下:
参数
是否必填
说明
metadata.name
是
Ingress的名称。
说明Ingress的名称在集群中必须是唯一的。因此,在创建Ingress时,您需要确保Ingress名称的唯一性,以避免命名冲突。
spec.ingressClassName
是
关联的IngressClass的名称。
spec.rules.host
否
HTTP头部host字段域名信息,需要配置为您的自有域名。
当您在浏览器中访问您的自有域名时,例如“http://demo.domain.ingress.top”,浏览器会在发送HTTP请求时自动添加一个“Host: demo.domain.ingress.top”的头部字段。这样,服务器就可以根据该头部字段来识别请求的目标主机名。在Kubernetes中,Ingress规则中的host字段会与来自请求的Host头部字段进行匹配。当匹配成功时,Ingress规则就会将请求路由到相应的后端服务进行处理。
说明此处如果配置了自有域名,需要确保该自有域名完成备案,否则可能访问时无法解析。具体操作,请参见ICP备案流程。
此处如果未配置,那么该Ingress规则将匹配所有到达Ingress Controller的请求。
spec.rules.http.paths.path
是
转发路径URL。
spec.rules.http.paths.pathType
是
URL匹配规则。详情可参考基于URL路径转发请求。
spec.rules.http.paths.backend.service.name
是
填写您此前创建的Service名称。
spec.rules.http.paths.backend.service.port.number
是
填写您此前创建的Service的服务端口号。
这个端口号的设置非常重要,因为它决定了在路由到后端服务时使用的端口。确保端口号正确设置,以确保请求可以正确路由到后端服务并被处理。
执行以下命令,配置
coffee
和tea
服务对外暴露的域名和path
路径。kubectl apply -f cafe-ingress.yaml
预期输出:
ingress.networking.k8s.io/cafe-ingress created
(可选)执行以下命令获取ALB实例DNS地址。
kubectl get ingress
预期输出:
NAME CLASS HOSTS ADDRESS PORTS AGE cafe-ingress alb demo.domain.ingress.top alb-m551oo2zn63yov****.cn-hangzhou.alb.aliyuncs.com 80 50s
(可选)配置域名解析
在创建 Ingress 时:
如果未指定域名(即
spec.rules.host
为空),则通过ALB DNS端点进行访问。如果指定了自有域名(即
spec.rules.host
有值),您需要完成以下步骤,后续通过指定的自有域名访问服务。
登录域名解析控制台。
在权威域名解析页面单击添加域名。
在添加域名对话框中输入您的域名,然后单击确认。
重要您的主机域名需已完成TXT记录验证。
在目标域名的操作列单击解析设置。
在解析设置页面单击添加记录。
在添加记录面板配置以下信息完成CNAME解析配置,然后单击确认。
配置项
说明
记录类型
在下拉列表中选择CNAME。
主机记录
您的域名的前缀,例如
www
。解析请求来源
选择默认。
记录值
输入域名对应的CNAME地址,即您复制的ALB DNS端点。
TTL
全称Time To Live,表示DNS记录在DNS服务器上的缓存时间,本文使用默认值。
测试流量转发
自有域名
在浏览器中输入“测试域名+URL路径”,测试流量转发是否正确。
测试域名以demo.domain.ingress.top
为例
在浏览器中输入
demo.domain.ingress.top/coffee
,将返回coffee-svc
对应的后端服务界面。在浏览器中输入
demo.domain.ingress.top/tea
,将返回tea-svc
对应的后端服务界面。
未指定域名
在浏览器中输入“ALB DNS端点名称+URL路径”,测试流量转发是否正确。
ALB DNS端点名称以alb-msjXXXXXXccq9ti.cn-hangzhou.alb.aliyuncsslb.com
为例
在浏览器中输入
alb-msjXXXXXXccq9ti.cn-hangzhou.alb.aliyuncsslb.com/coffee
,将返回coffee-svc对应的后端服务界面。在浏览器中输入
alb-msjXXXXXXccq9ti.cn-hangzhou.alb.aliyuncsslb.com/tea
,将返回tea-svc对应的后端服务界面。
(可选)配置扩展
配置项 | 参数说明 | 相关文档 |
TLS配置 | 开启TLS配置开关,配置安全的路由服务。
单击+ 新增TLS配置,可配置多条TLS。 | |
更多配置 | ||
自定义转发规则 |
常见问题
如果遇到问题,您可以对ALB Ingress异常问题进行排查,以下是常见问题。
AlbConfig资源报错listener is not exist in alb, port: xxx?
默认的AlbConfig只配置了端口80的监听,需要创建其他监听请参见创建监听。
配置AlbConfig的HTTP和HTTPS监听后,如何在Ingress资源中同时监听HTTP和HTTPS协议的监听?
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: https-ingress annotations: alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80},{"HTTPS": 443}]' # 使用多个监听时需要添加annotation使ALB Ingress正常工作。 spec: #...