
# 为ELB Ingress配置HTTP/2
Ingress支持HTTP/2的方式暴露服务，在默认情况下，客户端与负载均衡之间采用HTTP1.X协议，若需开启HTTP/2功能，可[通过控制台配置]和[通过kubectl命令行配置]。
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.23集群：v1.23.13-r0及以上版本
  
  - v1.25集群：v1.25.8-r0及以上版本
  
  - v1.27集群：v1.27.5-r0及以上版本
  
  - v1.28集群：v1.28.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)。
 
#### 约束与限制
- 仅当负载均衡端口使用HTTPS协议时，支持使用HTTP/2功能。
- 配置HTTP/2后，如果您在CCE控制台删除开启HTTP/2的高级配置或在YAML中删除对应的annotation，ELB侧会同时关闭HTTP/2。
- 多个Ingress使用同一个ELB实例的同一个对外端口时，建议每个Ingress的HTTP/2配置相同，否则将以第一个创建的Ingress配置为准。详情请参见[同一集群中多个Ingress使用同一个ELB的配置说明](https://support.huaweicloud.com/usermanual-cce/cce_10_0954.html)。
 
#### Ingress配置HTTP/2
您可以使用以下方式配置HTTP/2。
- [通过控制台配置]
  
  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)
     本示例中展示配置HTTP/2的关键参数，其余参数可按需配置，详情请参见[通过控制台创建ELB Ingress](https://support.huaweicloud.com/usermanual-cce/cce_10_0251.html)。
     表1关键参数说明 
     | 参数     | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                        |
     |:---|:---|:---|
     | 名称     | 自定义Ingress名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | ingress-test                                                                                                                                                                                                                                                                                                                                                                                                                              |
     | 负载均衡器  | 选择对接的ELB实例或自动创建ELB实例。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 独享型ELB                                                                                                                                                                                                                                                                                                                                                                                                                                    |
     | 监听器配置  | - 前端协议：选择"HTTPS"。  - 对外端口：ELB监听器端口，HTTPS协议的端口默认为443。  - 证书来源：选择"ELB服务器证书"或"LTS密钥"。  - 服务器证书： - 证书来源为"ELB服务器证书"：使用在ELB服务中创建的证书。如果您没有可选择的ELB证书，可前往ELB服务创建，详情请参见[创建证书](https://support.huaweicloud.com/usermanual-elb/elb_ug_szs_0003.html)。  - 证书来源为"LTS密钥"：支持使用kubernetes.io/tls和IngressTLS两种TLS密钥类型。如果您没有可选择的密钥证书，可新建TLS类型的密钥证书，对应参数详情请参见[创建密钥](https://support.huaweicloud.com/usermanual-cce/cce_10_0153.html)。    - 高级配置：添加高级配置，选择"开启HTTP2"，状态设置为"开启"。   | - 前端协议："HTTPS"  - 对外端口：443  - 证书来源："ELB服务器证书"  - 服务器证书：cert-test  - 高级配置：开启HTTP2   |
     | 转发策略配置 | - 域名：实际访问的域名地址，不配置时可通过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配置HTTP/2   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002006590673.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
       annotations: 
         kubernetes.io/elb.class: performance  #ELB类型    
         kubernetes.io/elb.id: <your_elb_id>  #替换为您已有的ELB ID
         kubernetes.io/elb.ip: <your_elb_ip>  #替换为您已有的ELB IP
         kubernetes.io/elb.port: '443'
         kubernetes.io/elb.http2-enable: 'true' # 开启HTTP/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
     ```
     表2HTTP/2参数说明 
     | 参数                             | 是否必填 | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                   |
     |:---|:---|:---|:---|
     | kubernetes.io/elb.http2-enable | 否    | String | 表示HTTP/2功能的开启状态。开启后，可提升客户端与ELB间的访问性能，但ELB与后端服务器间仍采用HTTP1.X协议。 取值范围： - true：开启HTTP/2功能；  - false：关闭HTTP/2功能（默认为关闭状态）。   注意：**只有当监听器的协议为HTTPS时，才支持开启或关闭HTTP/2功能**。当监听器的协议为HTTP时，该字段无效，默认将其设置为false。 |
        
     
     
  
  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
     ```
     
     
   
