本文介绍如何在ACK托管集群(智能托管模式)中部署一个工作负载,并通过ALB Ingress实现公网访问。完成后,您可以通过设定的域名访问该应用,实现外部流量的高效管理和负载均衡。
本文将指引完成以下操作。
- 为示例应用创建一个命名空间。 
- 部署一个Nginx示例应用,并创建Service以将应用暴露到集群网络。 
- 创建ALB Ingress,以通过ALB实现应用的公网访问。需要手动创建AlbConfig用于管理ALB实例,创建IngressClass以关联AlbConfig。 
- 验证部署是否成功,并通过浏览器访问应用。后续资源如无需使用,可释放。 
操作完成后,可实现如下内容。
- 运行一个2副本的Nginx示例应用。 
- 通过 ALB Ingress 和 Service 为应用提供稳定的公网入口。 
- 基于智能托管模式,ACK 将自动根据应用负载动态扩缩容,并接管节点的生命周期管理,以减少运维负担。 
前提条件
步骤一:创建命名空间
您可以为本实践创建一个命名空间,以便实现资源隔离。
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择命名空间与配额。 
- 单击创建,在弹出的对话框自定义命名空间名称(本文以my-nginx-namespace为例),按照页面指引配置其他信息,然后单击确定。 
步骤二:部署Nginx应用并创建Service
本小节将部署一个名为my-nginx的Nginx示例Deployment,以及一个名为my-nginx-svc的Service来公开该应用。
- Deployment:副本数为2,镜像使用Nginx示例应用,暴露80端口以接收 HTTP 网络流量。 
- Service:Service类型为ClusterIP,将Service 的端口 80 映射到 Pod 容器的端口 80,并通过Label Selector来匹配Pod。 
本小节仅提供示例流程。如需详细了解工作负载和Service的创建流程,请参见创建工作负载、Service管理。
- 参见以下代码创建一个名为my-nginx.yaml的文件,用于在命名空间中部署Deployment和Service。 - apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx # 示例应用的名称。 namespace: my-nginx-namespace # 替换为此前创建的命名空间名称。 labels: app: nginx spec: replicas: 2 # 设置副本数量。 selector: matchLabels: app: nginx # 对应服务中Selector的值需要与其一致,才可以通过服务公开此应用。 template: metadata: labels: app: nginx spec: # nodeSelector: # env: test-team containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 # 需要在服务中暴露该端口。 --- apiVersion: v1 kind: Service metadata: labels: app: nginx name: my-nginx-svc namespace: my-nginx-namespace # 替换为此前创建的命名空间名称。 spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: ClusterIP # 若为Flannel,则需使用Nodeport。
- 部署Deployment和Service。 - kubectl apply -f my-nginx.yaml
- 查看Deployment和Service的状态。 - 查看Deployment的状态。 - kubectl get deployment my-nginx -n my-nginx-namespace- 预期输出: - NAME READY UP-TO-DATE AVAILABLE AGE my-nginx 2/2 2 2 4m36s
- 查看Service的状态: - kubectl get svc my-nginx-svc -n my-nginx-namespace- 预期输出: - NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE my-nginx-svc ClusterIP 192.XX.XX.164 <none> 80/TCP 42s
 
步骤三:创建ALB Ingress及其关联资源
通过ALB Ingress管理访问集群应用的外部流量时,您需要准备以下资源。
创建ALB Ingress之前,建议您通过ALB Ingress管理了解其原理和要求。
- ALB Ingress Controller:负责管理Ingress资源的组件。集群开启智能托管模式后,ALB Ingress Controller 已为默认安装。 
- AlbConfig:由ALB Ingress Controller创建的一种CRD,声明ALB实例的配置。一个AlbConfig对应一个ALB实例。ALB实例是用户请求流量的入口,负责将用户请求转发到后端Service中。 
- IngressClass:创建ALB Ingress时可以通过指定该IngressClass来引用相应的AlbConfig配置,从而实现特定的应用路由配置和负载均衡策略。 
创建AlbConfig
- 创建并拷贝以下内容到alb.yaml文件中,用于创建AlbConfig。 - 该AlbConfig指定 - addressType为- Internet,即ALB实例会拥有公网IP地址,DNS域名可被解析到公网IP,可在公网环境下访问。
- 请填写 - vSwitchId为两个不同可用区的虚拟交换机ID。交换机需与集群处于同一VPC,且为ALB支持的可用区。- 您可以在专有网络管理控制台的交换机页面获取交换机ID。如需创建交换机,请参见创建和管理交换机。 
 - apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: name: alb addressType: Internet # 负载均衡的地址类型,Internet类型可在公网环境下访问。 zoneMappings: - vSwitchId: vsw-uf6ccg2a9g71hx8go**** # 替换为您的虚拟交换机的ID。 - vSwitchId: vsw-uf6nun9tql5t8nh15**** # 替换为您的虚拟交换机的ID。 listeners: - port: 80 protocol: HTTP
- 创建AlbConfig。 - kubectl apply -f alb.yaml
- 查看AlbConfig资源。 - kubectl get AlbConfig alb- 预期输出: - NAME ALBID DNSNAME PORT&PROTOCOL CERTID AGE alb alb-****** alb-******.<regionID>.alb.aliyuncs.com 60s说明- 创建HTTPS监听并为其配置证书后, - PORT&PROTOCOL和- CERTID中才会显示内容,内容为空是正常现象。
创建IngressClass
- 使用以下代码创建一个名为ingress_class.yaml文件,用于创建IngressClass。 - apiVersion: networking.k8s.io/v1 kind: IngressClass metadata: name: alb spec: controller: ingress.k8s.alibabacloud/alb parameters: apiGroup: alibabacloud.com kind: AlbConfig name: alb # IngressClass关联的AlbConfig的名称
- 创建IngressClass。 - kubectl apply -f ingress_class.yaml
创建ALB Ingress
- 登录容器服务管理控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在路由页面,切换命名空间为此前创建的命名空间,然后单击创建 Ingress,在创建 Ingress对话框配置路由,按照页面提示完成Ingress的创建。 - 下表仅介绍核心配置项。详细配置项说明和相关操作(例如配置域名解析),请参见创建ALB Ingress。 - 配置项 - 说明 - 网关类型 - 选择类型为ALB Ingress。 - 名称 - 自定义路由名称,例如my-albingress。 - Ingress Class - 选择此前创建的Ingress Class,以引用相应的AlbConfig配置。 - 规则 - 服务名称:选择目标服务,即此前创建的Service。 
- 端口:选择服务需要暴露的端口,即本示例使用的80。 
 - 其余配置保持默认即可。 - 创建完成后,您可以在左侧导航栏,选择网络 > 路由,查看Ingress是否成功部署。等待1分钟左右,在端点列查看并复制ALB DNS的端点名称。 
步骤四:访问应用
将ALB DNS的端点名称直接粘贴到浏览器中,以访问Nginx应用。

(可选)步骤五:清理资源
本文创建的资源包括Deployment、Service、AlbConfig、IngressClass以及ALB Ingress。请参见以下命令清理资源。
以下命令中的资源名称均为示例值。执行时请替换为实际的资源名称。
kubectl delete deployment my-nginx
kubectl delete Service my-nginx-svc
kubectl delete ALBIngress my-albingress
kubectl delete AlbConfig alb
kubectl delete IngressClass alb相关文档
- 使用HTTPS协议进行监听时需配置SSL/TLS证书。关于ALB Ingress支持的证书配置证书方式,请参见配置HTTPS证书以实现加密通信。 
- 您可通过配置AlbConfig资源以自定义ALB实例的配置,请参见ALB Ingress配置词典。