# 为负载均衡类型的Service配置HTTPS协议
#### 配置HTTPS协议Service
在工作负载创建完成后对Service进行配置，此配置对工作负载状态无影响，且实时生效。具体操作如下：
1. 登录ELB服务[创建证书](https://support.huaweicloud.com/usermanual-elb/elb_ug_zs_0004.html)。
2. 登录[云容器实例 CCI 2.0](https://console.huaweicloud.com/cci2.0/?#/cci/cluster/list)控制台。
3. 左侧导航栏中选择"服务管理"，在右侧页面单击"YAML创建"。
4. 导入或者添加Service yaml。 
   Service文件格式说明
   - Service.yaml资源描述
     ```
     apiVersion: cci/v2
     kind: Service
     metadata:
       name: kubectl-test
       namespace: kubectl
       annotations:
         kubernetes.io/elb.class: elb
         kubernetes.io/elb.id: 1234567890 #关联的elb id，只支持独享型elb，不支持共享型elb。
         kubernetes.io/elb.protocol-port: "https:443"  # HTTPS协议及端口号，需要与spec.ports中的端口号对应。
         kubernetes.io/elb.cert-id: "17e3b4f4bc40471c86741dc3aa211379"  # ELB服务中的证书ID。
     spec:
       selector:
         app: kubectl-test #关联的负载label。
       ports:
         - name: service-0
           targetPort: 80   #容器开放的端口。
           port: 443         #访问端口。
           protocol: TCP    #协议需指定为TCP。
       type: LoadBalancer
     ```
     
   
   - Service.json资源描述
     ```
     {
     "apiVersion": "cci/v2",
     "kind": "Service",
     "metadata": {
     "name": "kubectl-test",
     "namespace": "kubectl",
     "annotations": {
                             "kubernetes.io/elb.class": "elb",
     "kubernetes.io/elb.id": "1234567890"  #关联的elb id，只支持独享型elb，不支持共享型elb。
                             "kubernetes.io/elb.protocol-port": "https:443"  #HTTPS协议及端口号，需要与spec.ports中的端口号对应。
                             "kubernetes.io/elb.cert-id": "17e3b4f4bc40471c86741dc3aa211379" # ELB服务中的证书ID。
     }
     },
     "spec": {
     "selector": {
     "app": "kubectl-test" #关联的负载label。
     },
                     "type": "LoadBalancer"
     "ports": [
     {
     "name": "service-0",
     "targetPort": 80,     #容器开放的端口。
     "port": 443,          #访问端口。
     "protocol": "TCP",    #协议需指定为TCP。
     }
     ]
     }
     }
     ```
     
   
   
   
   
5. 单击"确定"，创建Service。查看服务管理页面，根据访问地址IP和端口映射中的访问端口\[IP:访问端口\]，即可访问负载。
 
#### 更新Service
您可以在添加完Service后，更新此Service的访问端口。操作如下：
1. 登录[云容器实例 CCI 2.0](https://console.huaweicloud.com/cci2.0/?#/cci/cluster/list)控制台。
2. 左侧导航栏中选择"服务管理 "，在服务管理页面中，选择对应的命名空间，单击需要更新端口配置的Service后的"YAML编辑"。
3. 仅支持更新Service内访问端口参数修改： 
   端口配置：spec.ports\[i\].port：访问端口，端口范围为1-65535，可任意指定。需同步修改 "kubernetes.io/elb.protocol-port": "https:443" 端口。
   ![](https://support.huaweicloud.com/usermanual-cci2/public_sys-resources/note_3.0-zh-cn.png)
   Service创建完成后，不支持修改监听器协议（例如将TCP修改为UDP，或将HTTP修改为HTTPS）。如需修改协议，请删除原Service后重新创建。
   
   
4. 单击"确定"。工作负载已更新Service。
 
#### HTTPS协议Service参数配置
您可以参考下表添加annotations字段配置HTTPS协议类型Service的监听器。
| 参数                                       | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|
| kubernetes.io/elb.http2-enable          | 表示HTTP/2功能的开启状态。开启后，可提升客户端与LB间的访问性能，但LB与后端服务器间仍采用HTTP1.X协议。 取值范围： - true：开启HTTP/2功能；  - false：关闭HTTP/2功能（默认为关闭状态）。 注意： **仅监听器的协议为HTTPS时，支持开启或关闭HTTP/2功能** **。**当监听器的协议为HTTP时，该字段无效，默认将其设置为false。                                                                                                                                                                                                                                                                                                                                            |
| kubernetes.io/elb.tls-certificate-ids    | ELB服务中的SNI证书ID列表（SNI证书中必须带有域名），不同ID间使用英文逗号隔开。 获取方法：在ELB控制台，进入"弹性负载均衡 \> 证书管理"获取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| kubernetes.io/elb.security-pool-protocol | 监听器前端协议为HTTPS时，可以开启后端安全协议，开启后后端协议为HTTPS。**不支持更新已有监听器的后端安全协议，更新后仅对新创建的监听器生效**。 - true：表示开启  - false：表示关闭                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| kubernetes.io/elb.tls-ciphers-policy    | 监听器使用的安全策略。 取值：tls-1-0-inherit,tls-1-0, tls-1-1, tls-1-2,tls-1-2-strict，tls-1-2-fs，tls-1-0-with-1-3, tls-1-2-fs-with-1-3, hybrid-policy-1-0，默认：tls-1-0。 仅对HTTPS协议类型的监听器且关联LB为独享型时有效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| kubernetes.io/elb.x-forwarded-port        | 开启后可以将ELB实例的监听端口从报文的HTTP头中带到后端云服务器。 - true：表示开启  - false：表示关闭   仅独享型ELB的HTTP/HTTPS类型监听器支持配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| kubernetes.io/elb.x-forwarded-for-port    | 开启后可以将客户端的源端口从报文的HTTP头中带到后端云服务器。 - true：表示开启  - false：表示关闭   仅独享型ELB的HTTP/HTTPS类型监听器支持配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| kubernetes.io/elb.x-forwarded-host        | 开启后将以客户端请求头的Host重写X-Forwarded-Host传递到后端云服务器。 - true：表示开启  - false：表示关闭   仅独享型ELB的HTTP/HTTPS类型监听器支持配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| kubernetes.io/elb.gzip-enabled           | 数据压缩。 - true：开启，将对特定文件类型进行压缩。  - false：关闭，不会对任何文件类型进行压缩。在默认情况下数据压缩为关闭。   支持的压缩类型如下： - Brotli支持压缩所有类型。  - Gzip支持压缩的类型包括：text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml application/atom+xml application/xml application/json。   仅独享型ELB的HTTP/HTTPS类型监听器支持配置。 |
   
