
# 为ELB Ingress配置HTTPS协议的后端服务
Ingress可以对接不同协议的后端服务，在默认情况下Ingress的后端代理通道是HTTP协议的，若需要建立HTTPS协议的通道，可在annotation字段中加入如下配置：
```
kubernetes.io/elb.pool-protocol: https
```
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.23集群：v1.23.8-r0及以上版本
  
  - v1.25集群：v1.25.3-r0及以上版本
  
  - 其他更高版本的集群
   
- 集群中需提前部署可用的工作负载用于对外提供访问。若您无可用工作负载，可参见[创建无状态负载（Deployment）](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)、[创建有状态负载（StatefulSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0048.html)或[创建守护进程集（DaemonSet）](https://support.huaweicloud.com/usermanual-cce/cce_10_0216.html)部署工作负载。
- 为提供对外访问的工作负载配置Service，ELB Ingress支持的Service类型请参见[ELB Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section3565202819276)。
- 已准备可信的证书，您可以从证书提供商处获取证书。操作详情请参见[购买SSL证书](https://support.huaweicloud.com/usermanual-ccm/ccm_01_0074.html)。
 
#### 约束与限制
- 仅使用独享型ELB时，Ingress支持对接HTTPS协议的后端服务。
- 对接HTTPS协议的后端服务时，Ingress的对外协议也需要选择HTTPS。
- 由于ELB不支持后端服务协议的更新，因此在Ingress创建完成后，修改不生效。
 
#### 配置HTTPS协议的后端服务
您可以使用以下方式为Ingress配置HTTPS协议的后端服务。
- [通过控制台配置]
  1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
  
  2. 选择左侧导航栏的"服务"，在右侧选择"路由"页签，单击右上角"创建路由"。
  
  3. 设置Ingress参数。 
     ![](https://support.huaweicloud.com/usermanual-cce/public_sys-resources/note_3.0-zh-cn.png)
     本示例中展示配置HTTPS协议后端服务的关键参数，其余参数可按需配置，详情请参见[通过控制台创建ELB Ingress](https://support.huaweicloud.com/usermanual-cce/cce_10_0251.html)。
     表1关键参数说明 
     | 参数     | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
     |:---|:---|:---|
     | 名称     | 自定义Ingress名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | ingress-test                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
     | 负载均衡器  | 选择对接的ELB实例或自动创建ELB实例。本例中仅支持选择"独享型"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 独享型ELB                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
     | 监听器配置  | - 前端协议：为Ingress配置HTTPS协议的后端服务需选择"HTTPS"。  - 对外端口：ELB监听器的端口，HTTPS协议的端口默认为443。  - 证书来源：选择"ELB服务器证书"。  - 服务器证书：使用在ELB服务中创建的证书。 如果您没有可选择的ELB证书，可前往ELB服务创建，详情请参见[创建证书](https://support.huaweicloud.com/usermanual-elb/elb_ug_szs_0003.html)。   - 后端协议：选择"HTTPS"。                                                                                                                                                                                           | - 前端协议："HTTPS"  - 对外端口：443  - 证书来源：ELB服务器证书  - 服务器证书：cert-test  - 后端协议： "HTTPS"    |
     | 转发策略配置 | - 域名：实际访问的域名地址，不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案，一旦配置了域名规则后，必须使用域名访问。  - 路径匹配规则：支持前缀匹配、精确匹配、正则匹配，请按需选择。  - 路径：后端应用对外提供访问的路径，此处添加的访问路径要求后端应用内存在相同的路径，否则转发无法生效。  - 目标服务名称：请选择已有Service，页面列表中的查询结果已自动过滤不符合要求的Service。如果没有满足要求的Service请根据[Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section1674954315446)新建。  - 目标服务访问端口：可选择目标Service的访问端口。   | - 域名：无需填写  - 路径匹配规则：前缀匹配  - 路径：/  - 目标服务名称：nginx  - 目标服务访问端口：80                                                            |
        
     图1配置HTTPS协议的后端服务   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002006861933.png "点击放大")
     
     
  
  4. 配置完成后，单击"创建"。
   
- [通过kubectl命令行配置]
  1. 请参见[通过kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)，使用kubectl连接集群。
  
  2. 创建名为"**ingress-test.yaml** "的YAML文件，此处文件名可自定义。
     
     ```
     vi ingress-test.yaml
     ```
     以关联已有ELB为例，YAML配置文件如下：
     ```
     apiVersion: networking.k8s.io/v1
     kind: Ingress
     metadata:
       name: ingress-test
       namespace: default
       annotations:
         kubernetes.io/elb.port: '443'
         kubernetes.io/elb.id: <your_elb_id>    #本示例中使用已有的独享型ELB，请替换为您的独享型ELB ID
         kubernetes.io/elb.class: performance
         kubernetes.io/elb.pool-protocol: https  # 对接HTTPS协议的后端服务
         kubernetes.io/elb.tls-ciphers-policy: tls-1-2
     spec:
       tls: 
         - secretName: ingress-test-secret   # 根据实际修改配置
       rules:
         - host: ''
           http:
             paths:
               - path: '/'
                 backend:
                   service:
                     name: <your_service_name>  #替换为您的目标服务名称
                     port:
                       number: 80      #替换为您的目标服务端口
                 property:
                   ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                 pathType: ImplementationSpecific
       ingressClassName: cce
     ```
     
     
  
  3. 创建Ingress。 
     ```
     kubectl create -f ingress-test.yaml
     ```
     回显类似如下，表示Ingress服务已创建。
     ```
     ingress.networking.k8s.io/ingress-test created
     ```
     
     
  
  4. 查看已创建的Ingress。 
     ```
     kubectl get ingress
     ```
     回显如下，表示Ingress服务创建成功。
     ```
     NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
     ingress-test  cce      *         121.**.**.**     80,443  10s
     ```
     
     
   
