本文介绍如何在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配置词典。