文档首页/ 云容器实例 CCI/ 最佳实践/ 网络管理/ 使用PoolBinding发布应用
更新时间:2025-08-12 GMT+08:00

使用PoolBinding发布应用

应用场景

您在云容器实例CCI服务部署工作负载后,可以通过弹性负载均衡(ELB)服务实现使用公网访问负载实例。CCI提供了PoolBinding对象帮助您自动将部署的容器实例更新至对应的后端服务器组(Pool)后端,您可以在弹性负载均衡(ELB)侧自定义负载均衡器和监听器配置,以及配置高级转发策略等,实现七层负载均衡的能力。

示例说明

本文以Nginx镜像为例创建无状态工作负载,部署两个版本的服务。创建后端服务器组和PoolBinding对象,将部署的实例自动更新至后端服务器组后端。创建弹性负载均衡器和监听器,并配置高级转发策略,将流量导向不同的后端应用。

操作步骤

  1. 登录华为云弹性负载均衡服务控制台,左侧菜单栏选择“后端服务器组”,单击“创建后端服务器组”。由于示例将部署两个工作负载,请参考以下步骤创建两个后端服务器组。

    1. 配置后端分配策略。
      • 实例类型:独享型
      • 服务器组类型:混合类型
      • 转发模式:负载均衡
      • 虚拟私有云:需与后续创建的Deployment和Service所在Namespace下的虚拟私有云保持一致,因此请合理选择虚拟私有云
      • 其它参数:可自定义配置

    1. 添加后端服务器。

      通过PoolBinding关联的对象无需用户手动添加,用户只需配置对应的健康检查信息,选择是否开启健康检查,若开启,编辑“参数设置”,修改健康检查参数,并确认配置的参数信息可成功访问后端业务。

      示例以Nginx镜像为例,开启健康检查并使用默认配置。

    1. 确认配置

      确认配置无误后,单击“立即创建”。

  2. 在华为云云容器实例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
    • 如果您希望创建的PoolBinding关联的后端对象为Service,请执行3
    • 如果您希望创建的PoolBinding关联的后端对象为Deployment,请执行4

  3. 返回华为云云容器实例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

  4. 创建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中配置的访问端口。

  5. 在华为云弹性负载均衡服务控制台,单击查看1创建的后端服务器组详情,选择“后端服务器”,检查对应的负载实例是否完成刷新。

  6. 返回弹性负载均衡服务控制台,单击“购买弹性负载均衡”。

    • 基础配置中,实例类型选择“独享型”。
    • 实例规格中,规格选择“固定规格”,同时勾选“网络型"和“应用型”。
    • 网络配置中,网络类型选择“IPv4私网”,所属VPC需与2中工作负载所在VPC相同。
    • 公网访问中,选择“现在购买”。
    • 其余参数用户可自定义。

  7. 确认配置概要信息无误后,单击“立即购买”。
  8. 返回弹性负载均衡服务控制台,选择6创建的弹性负载均衡,查看“监听器”,单击“添加监听器”。

    1. 配置监听器。您可根据实际情况自定义配置其它参数。完成后单击“下一步:配置后端分配策略”。
      • 名称:自定义名称
      • 前端协议:HTTP
      • 前端端口:填写前端端口
      • 高级转发策略:开启

    1. 配置后端分配策略。选择后端服务器,勾选“使用已有”,搜索并选择1创建的其中一个后端服务器组作为默认后端服务器组,单击“下一步:确认配置”。

    1. 确认配置。确认配置无误后,单击“提交”。

  9. 返回弹性负载均衡服务控制台,选择6创建的弹性负载均衡,查看“监听器”,选择8创建的监听器,单击“添加/编辑转发策略”。

  10. 添加转发策略。单击“添加转发策略”,编辑策略,选择转发规则,以“HTTP请求头”为例,填写HTTP请求头键值信息。选择“转发的后端服务器组”,即1创建的另一个未绑定至监听器的后端服务器组。确认信息无误后,单击“保存”。

  11. 测试验证。

    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
      • $IP:弹性负载均衡IPv4公网地址。
      • $port:配置的监听器前端全口。

    2. 发送请求,查看后端流量。

      执行HTTP请求命令,以Nginx镜像为例部署的工作负载,可以通过ccictl logs命令查看后端接收的请求情况。

      ccictl logs -n $namespace $pod-name -f --tail=5 | grep -v "elb-healthcheck"
      • $namespace:创建的工作负载所在的命令空间。
      • $pod-name:创建的工作负载Pod实例名称。
    3. 查看结果示例。
      • 如果HTTP请求头不包含对应的请求头“Type: always”,则流量导向默认后端服务器组后端。

      • 如果HTTP请求头包含对应的请求头“Type: always”,则流量导向转发策略中配置的后端服务器组后端。