# 为负载均衡类型的Service配置HTTP/HTTPS协议
负载均衡类型的Service默认创建4层TCP/UDP协议的监听器，您也可以配置HTTP/HTTPS协议，以实现更精细和多样化的任务调度，确保应用能够安全地对外提供访问。
#### 约束与限制
- Service使用HTTP/HTTPS协议存在以下场景的集群版本约束。
   表1ELB支持HTTP/HTTPS协议的场景 
  | ELB类型   | 使用场景      | 是否支持HTTP/HTTPS协议 | 说明                                                                                                                                                                                                                                                                                                                                                         |
  |:---|:---|:---|:---|
  | 共享型ELB | 对接已有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 | 自动创建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无状态工作负载为例。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"工作负载"，单击页面右上角"创建工作负载"。
3. 在工作负载的"基本信息"中，填写负载名称，本示例中为**nginx**。其他参数保持默认值。
4. 在"容器配置 \> 容器信息"中，填写容器镜像名称和镜像版本。其他参数保持默认值。 
   
   | 配置项   | 配置示例                                      |
   |:---|:---|
   | 镜像名称  | 单击"选择镜像"，选择"镜像中心"页签，搜索nginx，选择nginx后单击"确定"。 |
   | 镜像版本 | 选择需要部署的镜像版本为latest。                         |
      
   
   
5. 其余参数均可保持默认，单击"创建工作负载"，完成创建。
 
#### 步骤二：创建负载均衡并配置HTTP/HTTPS协议
您可以通过以下方式进行创建。
- [通过控制台创建]
  本文中使用示例证书为cert-test，使用时请根据实际情况进行替换。
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 在左侧导航栏中选择"服务"，在右上角单击"创建服务"。 
     本示例中仅列举使用HTTP/HTTPS协议的必选参数，其余参数保持默认，您可根据需求参考[通过控制台创建](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section6880821105120)进行设置。
     
     
  
  3. 设置基础配置参数。 
     
     | 参数    | 说明                                                                                                                                                               | 示例       |
     |:---|:---|:---|
     | 访问类型 | 选择"负载均衡"。                                                                                                                                                      | -       |
     | 服务名称   | 自定义服务名称，可与工作负载名称保持一致。                                                                                                                                          | nginx     |
     | 命名空间 | 工作负载所在命名空间。                                                                                                                                                   | default |
     | 选择器   | 您可以添加Pod标签的键值，Service将会根据标签与工作负载的Pod进行关联，将流量导向包含该标签的Pod。 您也可以引用已有工作负载的标签，单击"引用负载标签"，在弹出的窗口中选择负载，然后单击"确定"。 | app:nginx |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002407634521.png "点击放大")
     
     
     
  
  4. 设置负载均衡配置参数。 
     
     | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 示例                                              |
     |:---|:---|:---|
     | 负载均衡器 | 选择弹性负载均衡的类型及创建方式。其中独享型ELB需选择"应用型（HTTP/HTTPS）"或"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"，否则监听器端口将无法启用HTTP/HTTPS。 - 选择已有：仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例，请单击"创建负载均衡器"跳转到ELB控制台创建。  - 自动创建：自动创建的负载均衡实例将创建到集群所在的VPC，具体配置如[表1](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__table3428724185319)所示。 说明： 当集群使用共享VPC时，不支持自动创建共享型ELB。    | 选择已有"独享型"的"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"实例 |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002374155156.png "点击放大")
     
     
     
  
  5. 填写访问设置参数。 
     
     | 参数      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 示例                                                                                                                                                                                                                                                                                                 |
     |:---|:---|:---|
     | 服务亲和  | 选择将外部流量路由到节点本地或集群范围的端点，详情请参见[服务亲和（externalTrafficPolicy）](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html#cce_10_0249__section18134208069)。 - 集群级别：集群下所有节点的IP+节点端口均可以访问到此服务关联的负载，服务访问会因路由跳转导致一定性能损失，且无法获取到客户端源IP。  - 节点级别：只有通过负载所在节点的IP+节点端口才可以访问此服务关联的负载，服务访问没有因路由跳转导致的性能损失，且可以获取到客户端源IP。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 集群级别                                                                                                                                                                                                                                                                                                |
     | 后端分配策略 | - 全局配置：所有端口使用相同的后端分配策略，具体设置参数请参见[表2]。 注意： 当添加多个端口时，如果部分端口选择的监听器前端协议不同，后端分配策略的全局配置无法对多种协议同时生效，未匹配成功的协议将使用默认配置，监听器与后端服务器组的前端/后端协议匹配关系详见[负载均衡前/后端协议对应关系说明及配置样例](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section740184231718)。建议使用自定义配置。   - 自定义配置：每个端口支持指定不同的后端分配策略，您可以在"[端口配置 \> 后端分配策略]"中进行设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 自定义配置                                                                                                                                                                                                                                                                                              |
     | 端口配置    | - 协议：请根据业务的协议类型选择。Service在使用ELB提供的TLS或HTTP协议时，根据Kubernetes中定义的实现方案，需要将该参数设置为TCP并选择对应的[监听器前端协议]。详细说明请参见[Service所用的协议](https://kubernetes.io/zh-cn/docs/reference/networking/service-protocols/#special-cases)。  - 容器端口：工作负载程序实际监听的端口，需用户确定。例如nginx默认使用80端口。  - 服务端口：Service使用的端口。 - 单端口监听：端口范围为1-65535。  - 区间端口监听：负载均衡服务支持创建某个端口范围的监听器，您最多可为每个监听器添加10个互不重叠的监听端口段。 为负载均衡服务配置区间端口监听需满足以下条件： - 集群版本为v1.23.18-r0、v1.25.13-r0、v1.27.10-r0、v1.28.8-r0、v1.29.4-r0、v1.30.1-r0及以上。  - 使用独享型ELB且选择TCP/UDP/TLS协议。  - 该功能依赖ELB能力，使用该功能前请确认ELB在当前区域是否支持四层协议全端口监听和转发。      - 监听器前端协议：ELB监听器的前端协议，是客户端与负载均衡监听器建立流量分发连接所使用的协议。当选择独享型负载均衡器类型时，包含"应用型（HTTP/HTTPS）"方可支持配置HTTP/HTTPS；包含"网络型（TCP/UDP/TLS）"方可支持配置TLS。  - 后端分配策略：[后端分配策略]选项设置为"自定义配置"时，可以为不同协议的端口配置后端分配策略，参数说明请参见[表2]。   说明： 在创建LoadBalancer类型Service时，会自动生成一个随机节点端口号（NodePort）。 | - 协议：TCP协议  - 容器端口：80  - 服务端口：443  - 监听器前端协议：HTTPS   |
        
      表2后端分配策略参数 
     | 参数  | 说明                                                                                                                                                                                                                                                                                                                                                                                                        | 示例     |
     |:---|:---|:---|
     | 后端协议  | ELB后端服务器组的后端协议，是后端云服务器自身提供的网络服务的协议。支持TCP/HTTP/HTTPS/TLS/QUIC/UDP，监听器与后端服务器组的前端/后端协议匹配关系详见[负载均衡前/后端协议对应关系说明及配置样例](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section740184231718)。                                                                                                                                                                                        | HTTP      |
     | 分配策略类型 | 负载均衡会根据配置的流量分配策略，将来自客户端的请求按照对应的流量分配策略转发至相应的后端服务器。 - 加权轮询算法：根据组内后端服务器设置的权重，按照访问顺序依次将请求分发给不同的服务器。  - 加权最少连接：将请求分发给（当前连接/权重）比值最小的后端服务器进行处理。  - 源IP算法：根据请求的源IP地址进行哈希计算，源IP相同的请求会被分配到同一台后端服务器。   | 加权轮询算法 |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002511481992.png "点击放大")
     
     
  
  6. 设置负载监听器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://support.huaweicloud.com/usermanual-elb/elb_ug_zs_0004.html)。                                                                                                                    | 当"监听器前端协议"选择"HTTPS"或"TLS"时支持该配置。                                                                                                                                                                                                      | cert-test |
        
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002374501986.png "点击放大")
     
     
     
  
  7. 单击"创建"，创建Service。
   
- [通过kubectl命令行创建]
  Service使用HTTP/HTTPS协议时，需要注意以下配置要求：
  - 对于不同的ELB类型以及集群版本存在不同的要求，详情请参见[表1]。
  
  - spec.ports中两个端口需要与kubernetes.io/elb.protocol-port中对应，本例中将443端口、80端口分别发布成HTTPS、HTTP协议。
  
  
  以自动创建独享型ELB为例，配置示例如下：
  ```
  apiVersion: v1
  kind: Service
  metadata:
    annotations:
      # 在自动创建ELB参数中指定4层和7层的ELB实例规格
      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
      kubernetes.io/elb.security-pool-protocol: 'off'      # 后端安全协议，开启后，后端协议为HTTPS，否则为HTTP
    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
  ```
  表3关键参数说明 
  | 参数                                       | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                      |
  |:---|:---|:---|
  | kubernetes.io/elb.protocol-port        | String   | Service使用TLS/HTTP/HTTPS时，需设置协议及端口号，格式为protocol:port。 其中， - protocol：为监听器端口对应的协议，取值为tls、http或https。  - port：为Service的服务端口，即spec.ports\[\].port指定的端口。   例如，本示例中将443端口、80端口分别发布成HTTPS、HTTP协议，因此参数值为*https:443,http:80*。 |
  | kubernetes.io/elb.cert-id                | String  | ELB服务中的证书ID，作为TLS/HTTPS服务器证书。 获取方法：在[ELB控制台](https://console.huaweicloud.com/vpc/#/elb/list/grid)，选择"证书管理"。在列表中复制对应证书名称下的ID即可。                                                                                                                                                                                                                                                                          |
  | kubernetes.io/elb.client-ca-cert-id    | String  | 仅配置双向认证时填写该注解，ELB服务中的证书ID，作为CA证书。 获取方法：在[ELB控制台](https://console.huaweicloud.com/vpc/#/elb/list/grid)，选择"证书管理"。在列表中复制对应证书名称下的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及以上版本的集群支持。                                                                               |
  | kubernetes.io/elb.security-pool-protocol | String | 监听器前端协议为HTTPS时，可以开启后端安全协议，开启后，后端协议为HTTPS。不支持更新已有监听器的后端安全协议，更新后仅对新创建的监听器生效（通过更新协议或者端口会创建新的监听器）。 - on/true：表示开启  - off/false：表示关闭   说明： 当添加多个端口时，如果部分端口选择的监听器前端协议非HTTPS，该配置仅对HTTPS端口生效。                                                              |
     
#### 步骤三：访问工作负载
1. Service创建完成后，复制弹性负载均衡公网IP。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002408121109.png "点击放大")
   
   
   
2. 在浏览器中使用HTTPS协议访问该地址。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002374525278.png "点击放大")
   
   
 
