
# 为ELB Ingress配置QUIC监听器
QUIC协议是基于UDP的快速互联网连接协议，具备低时延、避免队头阻塞的多路复用优势，极佳的弱网性能可以有效解决网络、视频卡顿的问题，提升网络使用体验，同时保障数据传输的安全性。CCE支持为负载均衡类型的Service配置QUIC协议，本文以Nginx应用为例，介绍如何通过QUIC协议实现访问。
#### 前提条件
- 已创建一个CCE Standard或CCE Turbo集群，且集群版本满足以下要求：
  - v1.28集群：v1.28.15-r80及以上版本
  
  - v1.29集群：v1.29.15-r40及以上版本
  
  - v1.30集群：v1.30.14-r40及以上版本
  
  - v1.31集群：v1.31.14-r0及以上版本
  
  - v1.32集群：v1.32.9-r0及以上版本
  
  - v1.33集群：v1.33.7-r0及以上版本
  
  - v1.34集群：v1.34.2-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)。
 
#### 约束与限制
- 仅独享型且是"应用型"或"网络型\&应用型"的负载均衡实例支持创建QUIC监听器。
- QUIC监听器仅支持添加后端协议为HTTP/HTTPS的后端服务器组。
- QUIC监听器关联的后端服务器组流量分配策略不支持源IP算法。
- QUIC监听器不支持添加以下HTTP头字段：
  - X-Forwarded-For-Port：通过重写X-Forwarded-For-Port字段获取客户端的端口。
  
  - X-Real-IP：通过重写X-Real-IP字段获取客户端的源IP地址。
   
- QUIC监听器不支持基于网段的转发策略。
- QUIC监听器不支持双向认证。
- QUIC监听器不支持安全策略。

- 使用QUIC监听器同时配置高级转发动作中的[限速](https://support.huaweicloud.com/usermanual-cce/cce_10_0949.html#cce_10_0949__section1026923902417)功能时，不支持配置perSourceIpQps参数。
 
#### 配置QUIC监听器
您可以使用以下方式为Ingress配置QUIC监听器。
- [通过控制台配置]
  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)
     本示例中展示配置QUIC监听器的关键参数，其余参数可按需配置，详情请参见[通过控制台创建ELB Ingress](https://support.huaweicloud.com/usermanual-cce/cce_10_0251.html)。
     表1关键参数说明 
     | 参数     | 配置说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 示例                                                                                                                                                                                                                                                                                                                                                                                                                      |
     |:---|:---|:---|
     | 名称     | 自定义Ingress名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | ingress-test                                                                                                                                                                                                                                                                                                                                                                                                            |
     | 负载均衡器  | 选择对接的ELB实例或自动创建ELB实例。本例中仅支持选择"独享型"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 独享型ELB                                                                                                                                                                                                                                                                                                                                                                                                                  |
     | 监听器配置  | - 前端协议：为Ingress配置QUIC监听器需选择"QUIC"。  - 对外端口：ELB监听器的端口，QUIC协议的端口默认为443。  - 服务器证书：使用在ELB服务中创建的证书。 如果您没有可选择的ELB证书，可前往ELB服务创建，详情请参见[创建证书](https://support.huaweicloud.com/usermanual-elb/elb_ug_szs_0003.html)。   - 后端协议：选择"HTTP"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                | - 前端协议："QUIC"  - 对外端口：443  - 服务器证书：cert-test  - 后端协议： "HTTP"                        |
     | 转发策略配置 | - 域名：实际访问的域名地址，不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案，一旦配置了域名规则后，必须使用域名访问。  - 路径匹配规则：支持前缀匹配、精确匹配、正则匹配，请按需选择。  - 路径：后端应用对外提供访问的路径，此处添加的访问路径要求后端应用内存在相同的路径，否则转发无法生效。  - 目标服务名称：请选择已有Service，页面列表中的查询结果已自动过滤不符合要求的Service。如果没有满足要求的Service请根据[Ingress支持的Service类型](https://support.huaweicloud.com/usermanual-cce/cce_10_0094.html#cce_10_0094__section1674954315446)新建。  - 目标服务访问端口：可选择目标Service的访问端口。    - （可选）负载均衡配置：可设置健康检查协议为GRPC。单击转发策略中的"更改配置"，启用健康检查，并选择GRPC协议。   | - 域名：无需填写  - 路径匹配规则：前缀匹配  - 路径：/  - 目标服务名称：nginx  - 目标服务访问端口：80   |
        
     图1配置QUIC监听器   
     ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002510570388.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.protocol: QUIC  # ELB监听器前端协议设置为QUIC
         kubernetes.io/elb.tls-certificate-ids: 058cc023690d48a3867ad69dbe9cd6e5 # 服务器证书
         kubernetes.io/elb.pool-protocol: https  # 对接HTTPS协议的后端服务
     spec:
       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
     ```
     
     表2关键参数说明 
     | 参数                                    | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                 |
     |:---|:---|:---|
     | kubernetes.io/elb.protocol            | String | ELB监听器前端协议，配置QUIC前端协议时必须指定为QUIC。                                                                                                                                                                                                                                                                                   |
     | kubernetes.io/elb.tls-certificate-ids | String | ELB服务中的证书ID列表，不同ID间使用英文逗号隔开，列表长度大于等于1。列表中的首个ID为服务器证书，其余ID为SNI证书（SNI证书中必须带有域名）。独享型ELB最多支持50本SNI证书，共享型ELB最多支持30本SNI证书。 如果无法根据客户端请求的域名查找到对应的SNI证书，则默认返回服务器证书。 获取方法：在CCE控制台，单击顶部的"服务列表 \> 网络 \> 弹性负载均衡"，并选择"证书管理"。在列表中复制对应证书名称下的ID即可。 |
     | kubernetes.io/elb.pool-protocol       | String | 后端服务所使用的协议，当监听器前端协议为QUIC时，后端协议只支持http/https。未指定该字段时，默认为http协议。                                                                                                                                                                                                                                                     |
        
     
     
  
  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
     ```
     
     
   
