使用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
规则
单击+ 添加规则可新增多个路由规则。
域名:自定义域名。
路径映射:配置如下配置项。
路径:指定服务访问的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
配置域名解析
登录域名解析控制台。
在权威域名解析页面单击添加域名。
在添加域名对话框中输入您的域名,然后单击确认。
重要您的主机域名需已完成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
对应的后端服务界面。
(可选)配置扩展
配置项 | 参数说明 | 相关文档 |
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: #...