更新时间:2025-11-24 GMT+08:00
分享

公网访问

概述

公网访问是指使用外部网络访问负载,您可以给负载添加LoadBalancer类型的Service,配置ELB包含公网IP(ELB必须与负载在同一个VPC内),通过ELB实例访问负载。

约束与限制

  • 创建的ELB需要与负载所在命名空间在同一个VPC内。
  • 在使用弹性公网IP(Elastic IP Address,简称EIP)前,请先了解EIP的使用限制。详细信息,请参见弹性公网IP
  • CCI 2.0暂时不支持共享型负载均衡,建议您创建独享型ELB实例,且ELB实例已绑定公网IP。

配置公网访问-工作负载创建完成后设置

在工作负载创建完成后对Service进行配置,此配置对工作负载状态无影响,且实时生效。具体操作如下:

  1. 登录云容器实例 CCI2.0控制台。
  2. 左侧导航栏中选择“服务管理”,在右侧页面单击“YAML创建”
  3. 导入或者添加Service yaml。

    Service文件格式说明

    • Service.yaml资源描述
      metadata:
        name: service-1
        namespace: hyctest
        annotations:
          kubernetes.io/elb.class: elb
          kubernetes.io/elb.id: 123456789                               # 关联的elb id,只支持独享型elb,不支持共享型elb。
          kubernetes.io/elb.protocol-port: "http:80,https:81"           # ELB的协议及端口号,需要与spec.ports中的端口号对应。
          kubernetes.io/elb.cert-id: 123456789                          # ELB服务中的证书ID。
          kubernetes.io/elb.l7-keepalive-timeout: '0'                   # 七层监听器闲置超时时间。
          kubernetes.io/elb.l4-keepalive-timeout: '10'                  # 四层监听器闲置超时时间。
      spec:
        ports:
          - name: service-1
            protocol: TCP
            port: 80         #访问端口。
            targetPort: 80   #容器开放的端口。
          - name: service-2
            protocol: TCP
            port: 81
            targetPort: 81
          - name: service-3
            protocol: TCP
            port: 82
            targetPort: 82
          - name: service-4
            protocol: UDP
            port: 83
            targetPort: 83
        selector:
          app: a
        type: LoadBalancer
    • Service.json资源描述
      {
      	"metadata": {
      		"name": "service-1",
      		"namespace": "hyctest",
      		"annotations": {
      			"kubernetes.io/elb.class": "elb",               # 关联的elb id,只支持独享型elb,不支持共享型elb。
      			"kubernetes.io/elb.id": 123456789,              
      			"kubernetes.io/elb.protocol-port": "http:80,https:81",# ELB协议及端口号,需要与spec.ports端口号对应。
      			"kubernetes.io/elb.cert-id": 123456789,         # ELB服务中的证书ID。
      			"kubernetes.io/elb.l7-keepalive-timeout": "0",  # 七层监听器闲置超时时间。
      			"kubernetes.io/elb.l4-keepalive-timeout": "10"  # 四层监听器闲置超时时间。
      		}
      	},
      	"spec": {
      		"ports": [
      			{
      				"name": "service-1",
      				"protocol": "TCP",
      				"port": 80,            #访问端口。
      				"targetPort": 80       #容器开放的端口。
      			},
      			{
      				"name": "service-2",
      				"protocol": "TCP",
      				"port": 81,
      				"targetPort": 81
      			},
      			{
      				"name": "service-3",
      				"protocol": "TCP",
      				"port": 82,
      				"targetPort": 82
      			},
      			{
      				"name": "service-4",
      				"protocol": "UDP",
      				"port": 83,
      				"targetPort": 83
      			}
      		],
      		"selector": {
      			"app": "a"
      		},
      		"type": "LoadBalancer"
      	}
      }

  4. 单击“确定”,创建Service。查看服务管理页面,根据访问地址公网IP和端口映射中的访问端口[公网IP:访问端口],即可通过公网访问负载。

公网无法访问如何处理

  • 公网能正常访问的前提是负载已处于运行中状态,如果您的负载处于未就绪或异常状态,公网访问将无法正常使用。
  • 从负载开始创建到公网可以正常访问可需要1分钟到3分钟的时间,在此时间内网络路由尚未完成配置,请稍作等待。
  • 负载创建3分钟以后仍然无法访问。可能原因是用户配置的容器端口实际上没有相应进程在监听,目前云容器实例服务无法检测出该类使用异常,需要您排查镜像是否有监听该容器端口。如果容器端口监听正确,此时无法访问的原因可能为ELB实例本身有问题,请排查ELB实例状态。

更新Service

您可以在添加完Service后,更新此Service的访问端口。操作如下:

  1. 登录云容器实例 CCI2.0控制台。
  2. 左侧导航栏中选择“服务管理 ”,在服务管理页面中,选择对应的命名空间,单击需要更新端口配置的Service后的“YAML编辑”。
  3. 仅支持更新Service内访问端口参数修改:

    端口配置:spec.ports[i].port:访问端口,端口范围为1-65535,可任意指定。

  4. 单击“确定”。工作负载已更新Service。

相关文档