为负载均衡类型的Service配置区间端口监听
在创建负载均衡类型的Service时,您可以为关联的ELB监听器指定需要监听的端口范围,使ELB监听器可以同时监听指定端口号范围内的端口,将这些端口收到的请求都转发到对应的后端服务。
该功能依赖ELB能力,使用该功能前请确认ELB在当前区域是否支持四层协议全端口监听和转发。
前提条件
- 已创建Kubernetes集群,且集群版本满足以下要求:
- v1.23集群:v1.23.18-r0及以上
- v1.25集群:v1.25.13-r0及以上
- v1.27集群:v1.27.10-r0及以上
- v1.28集群:v1.28.8-r0及以上
- v1.29集群:v1.29.4-r0及以上
- v1.30集群:v1.30.1-r0及以上
- 如果您需要通过命令行创建,请使用kubectl连接到集群,详情请参见通过kubectl连接集群。
注意事项
仅使用独享型ELB且选择TCP/UDP/TLS协议时,支持配置区间端口监听。
创建负载均衡并配置区间端口监听
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。
本示例中仅列举配置SNI的必选参数,其余参数保持默认,您可根据需求参考通过控制台创建(新版)进行设置。
- 设置基础配置参数。
参数
说明
示例
访问类型
选择“负载均衡”。
-
服务名称
自定义服务名称,可与工作负载名称保持一致。
nginx
命名空间
工作负载所在命名空间。
default
选择器
您可以添加Pod标签的键值,Service将会根据标签与工作负载的Pod进行关联,将流量导向包含该标签的Pod。
您也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。
app:nginx

- 设置负载均衡配置参数。
参数
说明
示例
负载均衡器
选择弹性负载均衡的类型及创建方式。- 选择已有:仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例,请单击“创建负载均衡器”跳转到ELB控制台创建。
- 自动创建:自动创建的负载均衡实例将创建到集群所在的VPC,具体配置如表1所示。
说明:
当集群使用共享VPC时,不支持自动创建共享型ELB。
选择已有“独享型”的“网络型(TCP/UDP/TLS)&应用型(HTTP/HTTPS)”实例

- 填写访问设置参数。
参数
说明
示例
服务亲和
选择将外部流量路由到节点本地或集群范围的端点,详情请参见服务亲和(externalTrafficPolicy)。- 集群级别:集群下所有节点的IP+节点端口均可以访问到此服务关联的负载,服务访问会因路由跳转导致一定性能损失,且无法获取到客户端源IP。
- 节点级别:只有通过负载所在节点的IP+节点端口才可以访问此服务关联的负载,服务访问没有因路由跳转导致的性能损失,且可以获取到客户端源IP。
集群级别
端口配置
- 协议:请根据业务的协议类型选择。Service在使用ELB提供的TLS或HTTP协议时,根据Kubernetes中定义的实现方案,需要将该参数设置为TCP并选择对应的监听器前端协议。详细说明请参见Service所用的协议。
- 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。
- 服务端口:Service使用的端口。
- 监听器前端协议:ELB监听器的前端协议,是客户端与负载均衡监听器建立流量分发连接所使用的协议。当选择独享型负载均衡器类型时,包含“应用型(HTTP/HTTPS)”方可支持配置HTTP/HTTPS;包含“网络型(TCP/UDP/TLS)”方可支持配置TLS。
说明:在创建LoadBalancer类型Service时,会自动生成一个随机节点端口号(NodePort)。
- 协议:TCP协议
- 容器端口:80
- 服务端口:80-88端口段
- 监听器前端协议:TCP

- 单击“创建”,创建Service。
- 登录CCE控制台,单击集群名称进入集群。
- 选择左侧导航栏的“服务”,在右侧选择“服务”页签,单击右上角“创建服务”。
- 设置Service参数。本示例中仅列举必选参数,其余参数可根据需求参考通过控制台创建(旧版)进行设置。
- Service名称:自定义服务名称,可与工作负载名称保持一致。
- 访问类型:选择“负载均衡”。
- 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。
- 负载均衡器:选择弹性负载均衡的类型、创建方式。
- 类型:本例中仅支持选择“独享型”。
- 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见表3。
- 端口配置:
- 协议:支持选择TCP协议或UDP协议。
- 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。
- 服务端口:Service使用的端口。本例中选择“区间端口监听”,可以同时监听指定端口号范围内的端口,将这些端口收到的请求都转发到对应的后端服务。端口范围取值为1-65535。您最多可添加10个互不重叠的监听端口段。
- 监听器前端协议:当选择独享型负载均衡器类型时,需包含“网络型(TCP/UDP/TLS)”方可支持配置TLS协议。
图1 配置区间端口监听
- 配置完成后,单击“确定”。
- 请参见通过kubectl连接集群,使用kubectl连接集群。
- 创建名为“service-test.yaml”的YAML文件,此处文件名可自定义。
vi service-test.yaml
以关联已有ELB为例,YAML配置文件如下:apiVersion: v1 kind: Service metadata: name: service-test labels: app: test version: v1 namespace: default annotations: kubernetes.io/elb.class: performance #需使用独享型ELB kubernetes.io/elb.id: <your_elb_id> #替换为您已有的ELB ID kubernetes.io/elb.port-ranges: '{"cce-service-0":["100,200", "300,400"], "cce-service-1":["500,600", "700,800"]}' #配置区间端口监听 spec: selector: app: test version: v1 externalTrafficPolicy: Cluster ports: - name: cce-service-0 targetPort: 80 #替换为您的容器端口 nodePort: 0 port: 100 #配置区间端口监听时,该参数值不生效,但不可缺少或重复,默认取值为区间起始端口 protocol: TCP - name: cce-service-1 targetPort: 81 #替换为您的容器端口 nodePort: 0 port: 500 #配置区间端口监听时,该参数值不生效,但不可缺少或重复 protocol: TCP type: LoadBalancer loadBalancerIP: <your_elb_ip> #替换为您已有的ELB私有IP表1 区间端口监听参数说明 参数
是否必填
参数类型
描述
kubernetes.io/elb.port-ranges
是
String
使用独享型ELB且选择TCP/UDP/TLS协议时,支持创建某个端口范围的监听器,端口范围1~65535,您最多可为每个监听器添加10个互不重叠的监听端口段。
参数值格式如下,ports_name和port均不允许重复:
'{"<ports_name_1>":["<port_1>,<port_2>","<port_3>,<port_4>"], "<ports_name_2>":["<port_5>,<port_6>","<port_7>,<port_8>"]}'例如以下示例表示,端口配置名称为cce-service-0,其监听端口范围为100~200和300~400;端口配置名称为cce-service-1,其监听端口范围为500~600和700~800。
'{"cce-service-0":["100,200", "300,400"], "cce-service-1":["500,600", "700,800"]}' - 创建Service。
kubectl create -f service-test.yaml
回显如下,表示Service已创建。
service/service-test created
验证配置
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,找到新建Service所在行,单击负载均衡名称跳转至ELB控制台查看。
- 切换至“监听器”页签,查看新建监听器的端口号。
