为负载均衡类型的Service配置HTTP/HTTPS协议
负载均衡类型的Service默认创建4层TCP/UDP协议的监听器,您也可以配置HTTP/HTTPS协议,以实现更精细和多样化的任务调度,确保应用能够安全地对外提供访问。
约束与限制
- Service使用HTTP/HTTPS协议存在以下场景的集群版本约束。
表1 ELB支持HTTP/HTTPS协议的场景 ELB类型
使用场景
是否支持HTTP/HTTPS协议
说明
共享型ELB
对接已有ELB
支持
-
自动创建ELB
支持
-
独享型ELB
对接已有ELB
支持
v1.19.16及以上版本集群支持,其中对于ELB规格的要求在以下小版本中存在变更:
- v1.19.16-r50、v1.21.11-r10、v1.23.9-r10、v1.25.4-r10、v1.27.1-r10以下版本:ELB规格需要同时支持网络型和应用型
- v1.19.16-r50、v1.21.11-r10、v1.23.9-r10、v1.25.4-r10、v1.27.1-r10及以上版本:ELB规格需要支持应用型
自动创建ELB
支持
v1.19.16及以上版本集群支持,其中对于ELB规格的要求在以下小版本中存在变更:
- v1.19.16-r50、v1.21.11-r10、v1.23.9-r10、v1.25.4-r10、v1.27.1-r10以下版本:ELB规格需要同时支持网络型和应用型
- v1.19.16-r50、v1.21.11-r10、v1.23.9-r10、v1.25.4-r10、v1.27.1-r10及以上版本:ELB规格需要支持应用型
- 请勿将Ingress与使用HTTP/HTTPS的Service对接同一个ELB下的同一个监听器,否则将产生端口冲突。
步骤一:部署示例应用
本文以Nginx无状态工作负载为例。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“工作负载”,单击页面右上角“创建工作负载”。
- 在工作负载的“基本信息”中,填写负载名称,本示例中为nginx。其他参数保持默认值。
- 在“容器配置 > 容器信息”中,填写容器镜像名称和镜像版本。其他参数保持默认值。
配置项
配置示例
镜像名称
单击“选择镜像”,选择“镜像中心”页签,搜索nginx,选择nginx后单击“确定”。
镜像版本
选择需要部署的镜像版本为latest。
- 其余参数均可保持默认,单击“创建工作负载”,完成创建。
步骤二:创建负载均衡并配置HTTP/HTTPS协议
本文中使用示例证书为cert-test,使用时请根据实际情况进行替换。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。
本示例中仅列举使用HTTP/HTTPS协议的必选参数,其余参数保持默认,您可根据需求参考通过控制台创建(新版)进行设置。
- 设置基础配置参数。
参数
说明
示例
访问类型
选择“负载均衡”。
-
服务名称
自定义服务名称,可与工作负载名称保持一致。
nginx
命名空间
工作负载所在命名空间。
default
选择器
您可以添加Pod标签的键值,Service将会根据标签与工作负载的Pod进行关联,将流量导向包含该标签的Pod。
您也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。
app:nginx

- 设置负载均衡配置参数。
参数
说明
示例
负载均衡器
选择弹性负载均衡的类型及创建方式。其中独享型ELB需选择“应用型(HTTP/HTTPS)”或“网络型(TCP/UDP/TLS)&应用型(HTTP/HTTPS)”,否则监听器端口将无法启用HTTP/HTTPS。- 选择已有:仅支持选择与集群在同一个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
- 服务端口:443
- 监听器前端协议:HTTPS

- 设置负载监听器HTTP/HTTPS相关配置参数,其余参数可保持默认。
参数
说明
使用限制
示例
SSL解析方式
- 单向认证:仅进行服务器端认证。如需认证客户端身份,请选择双向认证。
- 双向认证:双向认证需要负载均衡实例与访问用户互相提供身份认证,从而允许通过认证的用户访问负载均衡实例,后端服务器无需额外配置双向认证。
当“监听器前端协议”选择“HTTPS”或“TLS”时支持该配置。
独享型ELB在v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。共享型ELB在v1.28.15-r60、v1.29.15-r20、v1.30.14-r20、v1.31.10-r20、v1.32.6-r20、v1.33.5-r10及以上版本的集群支持。
单向认证
CA证书
SSL解析方式选择“双向认证”时需要添加CA证书,用于认证客户端身份。CA证书又称客户端CA公钥证书,用于验证客户端证书的签发者;在开启HTTPS双向认证功能时,只有当客户端能够出具指定CA签发的证书时,HTTPS连接才能成功。
当“监听器前端协议”选择“HTTPS”或“TLS”,且“SSL解析方式”选择“双向认证”时支持该配置。
-
服务器证书
选择一个服务器证书。如果当前无可选证书,需前往弹性负载均衡控制台进行创建,详情请参见创建证书。
当“监听器前端协议”选择“HTTPS”或“TLS”时支持该配置。
cert-test

- 单击“创建”,创建Service。
- 登录CCE控制台,单击集群名称进入集群。
- 在左侧导航栏中选择“服务”,在右上角单击“创建服务”。
- 设置Service参数。本示例中仅列举使用HTTP/HTTPS协议必选参数,其余参数可根据需求参考通过控制台创建(旧版)进行设置。
- Service名称:自定义服务名称,可与工作负载名称保持一致。
- 访问类型:选择“负载均衡”。
- 选择器:添加标签,Service根据标签选择Pod,填写后单击“确认添加”。也可以引用已有工作负载的标签,单击“引用负载标签”,在弹出的窗口中选择负载,然后单击“确定”。
- 负载均衡器:选择弹性负载均衡的类型、创建方式。
- 类型:“独享型”或“共享型”,其中独享型ELB需选择“应用型(HTTP/HTTPS)”或“网络型(TCP/UDP/TLS)&应用型(HTTP/HTTPS)”,否则监听器端口将无法启用HTTP/HTTPS。
- 创建方式:本文中以选择已有ELB为例进行说明,关于自动创建的配置参数请参见表3。
- 端口配置:
- 协议:请选择TCP协议,选择UDP协议将无法使用HTTP/HTTPS。
- 服务端口:Service使用的端口,端口范围为1-65535。
- 容器端口:工作负载程序实际监听的端口,需用户确定。例如nginx默认使用80端口。
- 监听器前端协议:设置监听器端口是否开启HTTP/HTTPS。当选择独享型负载均衡器类型时,需包含“应用型(HTTP/HTTPS)”方可支持配置HTTP/HTTPS。
- 监听器配置:
- SSL解析方式:当监听器端口启用HTTPS时可选择SSL解析方式。独享型ELB在v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。共享型ELB在v1.28.15-r60、v1.29.15-r20、v1.30.14-r20、v1.31.10-r20、v1.32.6-r20、v1.33.5-r10及以上版本的集群支持。
- 单向认证:仅进行服务器端认证。如需认证客户端身份,请选择双向认证。
- 双向认证:双向认证需要负载均衡实例与访问用户互相提供身份认证,从而允许通过认证的用户访问负载均衡实例,后端服务器无需额外配置双向认证。
- CA证书:SSL解析方式选择“双向认证”时需要添加CA证书,用于认证客户端身份。CA证书又称客户端CA公钥证书,用于验证客户端证书的签发者;在开启HTTPS双向认证功能时,只有当客户端能够出具指定CA签发的证书时,HTTPS连接才能成功。
- 服务器证书:当监听器前端协议选择“HTTPS”或“TLS”时,必须选择一个服务器证书。如果当前无可选证书,需前往弹性负载均衡控制台进行创建,详情请参见创建证书。
- SNI:当监听器前端协议选择“HTTPS”或“TLS”时,可以选择是否添加SNI证书。如果需要添加SNI证书,证书中必须包含域名。如果当前无可选证书,需前往弹性负载均衡控制台进行创建,详情请参见创建证书。
- 安全策略:当监听器前端协议选择“HTTPS”时,支持选择可用的安全策略,更多信息请参见安全策略。v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。
- 后端协议:当监听器前端协议选择“HTTPS”时,支持使用HTTP或HTTPS协议对接后端服务,默认为HTTP。v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。
当发布多个HTTPS的服务,所有监听器会使用相同的证书配置。
- SSL解析方式:当监听器端口启用HTTPS时可选择SSL解析方式。独享型ELB在v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。共享型ELB在v1.28.15-r60、v1.29.15-r20、v1.30.14-r20、v1.31.10-r20、v1.32.6-r20、v1.33.5-r10及以上版本的集群支持。
图1 配置HTTP/HTTPS协议
- 单击“确定”,创建Service。
Service使用HTTP/HTTPS协议时,需要注意以下配置要求:
- 不同的ELB类型以及集群版本对flavor存在不同的要求,详情请参见表1。
- spec.ports中两个端口需要与kubernetes.io/elb.protocol-port中对应,本例中将443端口、80端口分别发布成HTTPS、HTTP协议。
以自动创建独享型ELB为例,配置示例如下:
apiVersion: v1
kind: Service
metadata:
annotations:
# 在自动创建ELB参数中指定4层和7层的flavor
kubernetes.io/elb.autocreate: '
{
"type": "public",
"bandwidth_name": "cce-bandwidth-1634816602057",
"bandwidth_chargemode": "bandwidth",
"bandwidth_size": 5,
"bandwidth_sharetype": "PER",
"eip_type": "5_bgp",
"available_zone": [
"cn-north-4b"
],
"l7_flavor_name": "L7_flavor.elb.s2.small",
"l4_flavor_name": "L4_flavor.elb.s1.medium"
}'
kubernetes.io/elb.class: performance # 独享型ELB
kubernetes.io/elb.protocol-port: "https:443,http:80" # HTTP/HTTPS协议及端口号,需要与spec.ports中的端口号对应
kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379" # ELB服务中的证书ID
labels:
app: nginx
name: test
name: test
namespace: default
spec:
ports:
- name: cce-service-0
port: 443
protocol: TCP
targetPort: 80
- name: cce-service-1
port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
version: v1
sessionAffinity: None
type: LoadBalancer
|
参数 |
参数类型 |
描述 |
|---|---|---|
|
kubernetes.io/elb.protocol-port |
String |
Service使用TLS/HTTP/HTTPS时,需设置协议及端口号,格式为protocol:port。 其中,
例如,本示例中将443端口、80端口分别发布成HTTPS、HTTP协议,因此参数值为https:443,http:80。 |
|
kubernetes.io/elb.cert-id |
String |
ELB服务中的证书ID,作为TLS/HTTPS服务器证书。 获取方法:在ELB控制台,选择“证书管理”。在列表中复制对应证书名称下的ID即可。 |
|
kubernetes.io/elb.client-ca-cert-id |
String |
仅配置双向认证时填写该注解,ELB服务中的证书ID,作为CA证书。 获取方法:在ELB控制台,选择“证书管理”。在列表中复制对应证书名称下的ID即可。 独享型ELB在v1.23.14-r0、v1.25.9-r0、v1.27.6-r0、v1.28.4-r0及以上版本的集群支持。共享型ELB在v1.28.15-r60、v1.29.15-r20、v1.30.14-r20、v1.31.10-r20、v1.32.6-r20、v1.33.5-r10及以上版本的集群支持。 |
步骤三:访问工作负载
- Service创建完成后,复制弹性负载均衡公网IP。

- 在浏览器中使用HTTPS协议访问该地址。
