更新时间:2025-08-12 GMT+08:00
使用PoolBinding发布应用
应用场景
您在云容器实例CCI服务部署工作负载后,可以通过弹性负载均衡(ELB)服务实现使用公网访问负载实例。CCI提供了PoolBinding对象帮助您自动将部署的容器实例更新至对应的后端服务器组(Pool)后端,您可以在弹性负载均衡(ELB)侧自定义负载均衡器和监听器配置,以及配置高级转发策略等,实现七层负载均衡的能力。
示例说明
本文以Nginx镜像为例创建无状态工作负载,部署两个版本的服务。创建后端服务器组和PoolBinding对象,将部署的实例自动更新至后端服务器组后端。创建弹性负载均衡器和监听器,并配置高级转发策略,将流量导向不同的后端应用。
操作步骤
- 登录华为云弹性负载均衡服务控制台,左侧菜单栏选择“后端服务器组”,单击“创建后端服务器组”。由于示例将部署两个工作负载,请参考以下步骤创建两个后端服务器组。
- 配置后端分配策略。
- 在华为云云容器实例CCI2.0控制台,选择“负载管理”,选择对应的命名空间,单击“YAML创建”,创建无状态负载。
参考如下yaml示例,分别创建两个工作负载。
Deployment的YAML示例:kind: Deployment apiVersion: cci/v2 metadata: name: deploy-1 namespace: test-ns spec: replicas: 1 selector: matchLabels: app: nginx-test-1 template: metadata: creationTimestamp: null labels: app: nginx-test-1 spec: containers: - name: nginx image: 'nginx:latest' ports: - containerPort: 80 //容器开放端口 protocol: TCP resources: limits: cpu: 500m memory: 1Gi requests: cpu: 500m memory: 1Gi terminationMessagePath: /dev/termination-log terminationMessagePolicy: File restartPolicy: Always terminationGracePeriodSeconds: 30 dnsPolicy: Default securityContext: {} schedulerName: default-scheduler strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 25% maxSurge: 25% progressDeadlineSeconds: 600
- 返回华为云云容器实例CCI2.0控制台,选择“服务管理”,选择对应的命名空间,单击“YAML创建”,创建Service。参考如下yaml示例,分别创建两个Service。
Service YAML示例:
apiVersion: cci/v2 kind: Service metadata: name: svc-1 namespace: test-ns annotations: kubernetes.io/elb.class: elb kubernetes.io/elb.id: 123******* //关联的elb id,只支持独享型elb,不支持共享型elb。 kubernetes.io/elb.protocol-port: "http:2222" // HTTP协议及端口号,需要与spec.ports中的端口号对应 spec: selector: app: nginx-test-1 //关联的负载label。 ports: - name: service-0 targetPort: 80 //容器开放的端口。 port: 2222 //访问端口。 protocol: TCP //访问负载的协议。 type: LoadBalancer
- 创建PoolBinding对象。
目前console暂不支持PoolBinding对象创建,您可以使用curl命令或者ccictl工具创建。
以ccictl工具为示例创建PoolBinding对象。ccictl配置步骤请参考ccictl配置指南。
参考以下ccictl命令和示例,创建2个PoolBinding,分别与1创建的两个后端服务器组,以及2创建的两个Deployment(或3创建的两个Service)关联。
ccictl create -f poolbinding.yaml
- 若PoolBinding关联的后端对象是Deployment,则YAML示例如下:
apiVersion: loadbalancer.networking.openvessel.io/v1 kind: PoolBinding metadata: name: plb-test-1 //创建的PoolBinding对象名称。 namespace: test-ns //创建的PoolBinding对象所属的命名空间,需与关联的Deployment在同一命名空间下。 spec: poolRef: id: e08*****-****-****-****-********29c1 //关联的后端服务器组ID,即步骤1创建的后端服务器组ID。 targetRef: kind: Deployment //关联的后端对象类型,该示例为Deployment。 group: cci/v2 //关联的后端对象group。 name: deploy-1 //关联的后端对象名称,即步骤2创建的Deployment名称。 port: 80 //关联的后端对象目标端口号,若后端对象为Deployment,即开放的容器端口。
- 若PoolBinding关联的后端对象是Service,则YAML示例如下:
apiVersion: loadbalancer.networking.openvessel.io/v1 kind: PoolBinding metadata: name: plb-test-c1 //创建的PoolBinding对象名称。 namespace: test-ns //创建的PoolBinding对象所属的命名空间,需与关联的Deployment在同一命名空间下。 spec: poolRef: id: e08*****-****-****-****-********29c1 //关联的后端服务器组ID,即步骤1创建的后端服务器组ID。 targetRef: kind: Service //关联的后端对象类型,该示例为Service。 group: cci/v2 //关联的后端对象group。 name: svc-1 //关联的后端对象名称,即步骤3创建的Service名称。 port: 2222 //关联的后端对象目标端口号,若后端对象为Service,即Service中配置的访问端口。
- 若PoolBinding关联的后端对象是Deployment,则YAML示例如下:
- 在华为云弹性负载均衡服务控制台,单击查看1创建的后端服务器组详情,选择“后端服务器”,检查对应的负载实例是否完成刷新。
- 返回弹性负载均衡服务控制台,单击“购买弹性负载均衡”。
- 基础配置中,实例类型选择“独享型”。
- 实例规格中,规格选择“固定规格”,同时勾选“网络型"和“应用型”。
- 网络配置中,网络类型选择“IPv4私网”,所属VPC需与2中工作负载所在VPC相同。
- 公网访问中,选择“现在购买”。
- 其余参数用户可自定义。
- 确认配置概要信息无误后,单击“立即购买”。
- 返回弹性负载均衡服务控制台,选择6创建的弹性负载均衡,查看“监听器”,单击“添加监听器”。
- 配置后端分配策略。选择后端服务器,勾选“使用已有”,搜索并选择1创建的其中一个后端服务器组作为默认后端服务器组,单击“下一步:确认配置”。
- 配置后端分配策略。选择后端服务器,勾选“使用已有”,搜索并选择1创建的其中一个后端服务器组作为默认后端服务器组,单击“下一步:确认配置”。
- 返回弹性负载均衡服务控制台,选择6创建的弹性负载均衡,查看“监听器”,选择8创建的监听器,单击“添加/编辑转发策略”。
- 添加转发策略。单击“添加转发策略”,编辑策略,选择转发规则,以“HTTP请求头”为例,填写HTTP请求头键值信息。选择“转发的后端服务器组”,即1创建的另一个未绑定至监听器的后端服务器组。确认信息无误后,单击“保存”。
- 测试验证。
- 构造HTTP请求。
查看弹性负载均衡IPv4公网地址,构造curl请求命令。命令格式如下:
//未携带请求头 while sleep 0.2;do curl http://$IP:$port;done //携带请求头 while sleep 0.2;do curl http://$IP:$port -H "Type: always";done
- 发送请求,查看后端流量。
执行HTTP请求命令,以Nginx镜像为例部署的工作负载,可以通过ccictl logs命令查看后端接收的请求情况。
ccictl logs -n $namespace $pod-name -f --tail=5 | grep -v "elb-healthcheck"
- $namespace:创建的工作负载所在的命令空间。
- $pod-name:创建的工作负载Pod实例名称。
- 查看结果示例。
- 构造HTTP请求。
父主题: 网络管理