
# 为负载均衡类型的Service配置后端为QUIC协议的UDP监听器
前端为UDP协议的监听器，支持QUIC（Quick UDP Internet Connection）作为后端监听协议。配合连接ID算法，将同一个连接ID的请求转发到后端服务器。使用QUIC协议的监听器具有低延迟、高可靠和无队头阻塞的优点，非常适合移动互联网使用、支持在WIFI和运营商网络中无缝切换，而不用重新去建立连接。
#### 前提条件
- 已创建一个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及以上版本
  
  - 其他更高版本的集群
   
- 集群中需提前部署支持处理QUIC协议的工作负载用于对外提供访问。若您无可用工作负载，可参考[创建无状态负载（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)部署工作负载。
 
#### 约束与限制
负载均衡实例为独享型，并且类型为"网络型"或"网络型\&应用型"。
#### 步骤一：部署支持处理QUIC协议请求的应用
假设http3-server镜像是支持处理QUIC协议请求的应用镜像，并已将其上传至SWR镜像仓库中。本文以http3-server为例创建状态工作负载。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"工作负载"，单击页面右上角"创建工作负载"。
3. 在工作负载的"基本信息"中，填写负载名称，本示例中为**http3-server**。其他参数保持默认值。
4. 在"容器配置 \> 容器信息"中，填写容器镜像名称和镜像版本。其他参数保持默认值。 
   
   | 配置项  | 配置示例                                                      |
   |:---|:---|
   | 镜像名称 | 单击"选择镜像"，选择"镜像中心"页签，搜索http3-server，选择http3-server后单击"确定"。 |
   | 镜像版本 | 选择需要部署的镜像版本为latest。                                       |
      
   
   
5. 其余参数均可保持默认，单击"创建工作负载"，完成创建。
 
#### 步骤二：创建负载均衡并添加后端为QUIC协议的UDP监听器
您可以通过以下方式进行创建。
- [通过控制台创建]
- [通过kubectl命令行创建]
本文中使用示例证书为cert-test，使用时请根据实际情况进行替换。
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)，单击集群名称进入集群。
2. 在左侧导航栏中选择"服务"，在右上角单击"创建服务"。 
   本示例中仅列举添加后端为QUIC协议的UDP监听器的必选参数，其余参数保持默认，您可根据需求参考[通过控制台创建](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section6880821105120)进行设置。
   
   
3. 设置基础配置参数。 
   
   | 参数   | 说明                                                                                                                                                            | 示例               |
   |:---|:---|:---|
   | 访问类型 | 选择"负载均衡"。                                                                                                                                                     | -                |
   | 服务名称 | 自定义服务名称，可与工作负载名称保持一致。                                                                                                                                         | http3-server     |
   | 命名空间 | 工作负载所在命名空间。                                                                                                                                                   | default          |
   | 选择器  | 您可以添加Pod标签的键值，Service将会根据标签与工作负载的Pod进行关联，将流量导向包含该标签的Pod。 您也可以引用已有工作负载的标签，单击"引用负载标签"，在弹出的窗口中选择负载，然后单击"确定"。 | app:http3-server |
      
   
   
4. 设置负载均衡配置参数。 
   
   | 参数    | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | 示例                                              |
   |:---|:---|:---|
   | 负载均衡器 | 选择弹性负载均衡的类型及创建方式。其中独享型ELB需选择"网络型（TCP/UDP/TLS）"或"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"，否则监听器端口将无法启用UDP。 - 选择已有：仅支持选择与集群在同一个VPC下的ELB实例。如果没有可选的ELB实例，请单击"创建负载均衡器"跳转到ELB控制台创建。  - 自动创建：自动创建的负载均衡实例将创建到集群所在的VPC，具体配置如[表1](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__table3428724185319)所示。   | 选择已有"独享型"的"网络型（TCP/UDP/TLS）\&应用型（HTTP/HTTPS）"实例 |
      
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002542957627.png "点击放大")
   
   
   
5. 填写访问设置参数。 
   
   | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 示例                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|:---|
   | 服务亲和   | 选择将外部流量路由到节点本地或集群范围的端点，详情请参见[服务亲和（externalTrafficPolicy）](https://support.huaweicloud.com/usermanual-cce/cce_10_0249.html#cce_10_0249__section18134208069)。 - 集群级别：集群下所有节点的IP+节点端口均可以访问到此服务关联的负载，服务访问会因路由跳转导致一定性能损失，且无法获取到客户端源IP。  - 节点级别：只有通过负载所在节点的IP+节点端口才可以访问此服务关联的负载，服务访问没有因路由跳转导致的性能损失，且可以获取到客户端源IP。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 集群级别                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 后端分配策略 | - 全局配置：所有端口使用相同的后端分配策略，具体设置参数请参见[表1]。 注意： 当添加多个端口时，如果部分端口选择的监听器前端协议不同，后端分配策略的全局配置无法对多种协议同时生效，未匹配成功的协议将使用默认配置，监听器与后端服务器组的前端/后端协议匹配关系详见[负载均衡前/后端协议对应关系说明及配置样例](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section740184231718)。建议使用自定义配置。   - 自定义配置：每个端口支持指定不同的后端分配策略，您可以在"[端口配置 \> 后端分配策略]"中进行设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 全局配置                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 端口配置   | - 协议：请根据业务的协议类型选择，本文需要选择UDP。  - 容器端口：工作负载程序实际监听的端口，需用户确定。通常QUIC协议默认使用443端口。  - 服务端口：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监听器的前端协议，是客户端与负载均衡监听器建立流量分发连接所使用的协议。当前端协议选择UDP时，支持使用QUIC后端协议。  - 后端分配策略：[后端分配策略]选项设置为"自定义配置"时，可以为不同协议的端口配置后端分配策略，参数说明请参见[表1]。   说明： 在创建LoadBalancer类型Service时，会自动生成一个随机节点端口号（NodePort）。 | - 协议：UDP协议  - 容器端口：443  - 服务端口：443  - 监听器前端协议：UDP   |
      
    表1后端分配策略参数 
   | 参数     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 示例                                                                                                                                                                                                                                                                                                                                                           |
   |:---|:---|:---|
   | 后端协议   | ELB后端服务器组的后端协议，是后端云服务器自身提供的网络服务的协议。支持TCP/HTTP/HTTPS/TLS/QUIC/UDP，监听器与后端服务器组的前端/后端协议匹配关系详见[负载均衡前/后端协议对应关系说明及配置样例](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section740184231718)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | QUIC                                                                                                                                                                                                                                                                                                                                                         |
   | 分配策略类型 | 负载均衡会根据配置的流量分配策略，将来自客户端的请求按照对应的流量分配策略转发至相应的后端服务器。 - 加权轮询算法：根据组内后端服务器设置的权重，按照访问顺序依次将请求分发给不同的服务器。  - 加权最少连接：将请求分发给（当前连接/权重）比值最小的后端服务器进行处理。  - 源IP算法：根据请求的源IP地址进行哈希计算，源IP相同的请求会被分配到同一台后端服务器。  - 连接ID算法：根据QUIC协议请求的ID进行哈希计算，相同QUIC ID连接上的请求会被分配到同一台后端服务器，仅后端协议为QUIC的时候才可配置。 - 连接ID哈希因子：负载均衡器使用QUIC客户端目的连接ID中的部分字节，作为连接ID算法调度的一致性哈希因子，从而维持QUIC连接会话的一致性。起始位置加取值长度的数值需要小于等于20。 起始位置：0-19字节，默认1 取值长度：1-20字节，默认3      | - 分配策略类型：连接ID算法  - 连接ID哈希因子： - 起始位置：1  - 取值长度：3     |
      
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002542132989.png "点击放大")
   
   
   
6. 其余参数可保持默认，单击"创建"，创建Service。
 
Service添加后端为QUIC协议的UDP监听器时，需要注意以下配置要求：
- 负载均衡实例必须是独享型，并且必须是"网络型"或"网络型\&应用型"。
- Service的端口协议要为UDP
本示例中使用已有的独享型ELB为例，配置示例如下：
```
apiVersion: v1
kind: Service
metadata:
  annotations:
    kubernetes.io/elb.id: <your_elb_id>    #本示例中使用已有的独享型ELB，请替换为您的独享型ELB ID
    kubernetes.io/elb.class: performance  # 独享型ELB
    # 添加QUIC协议的后端
    kubernetes.io/elb.pools-options:  |
      [{
  "protocol": "QUIC",
  "lb_algorithm": "QUIC_CID"
      }]
  labels:
    app: http3-server
  name: http3-server
  namespace: default
spec:
  ports:
  - name: cce-service-0
    port: 443
    protocol: UDP
    targetPort: 443
  selector:
    app: http3-server
  sessionAffinity: None
  type: LoadBalancer
```
表2关键参数说明 
| 参数                              | 参数类型   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|:---|
| kubernetes.io/elb.pools-options | String | 后端服务器组配置，支持设置后端协议、分配策略类型以及会话保持。 注解值格式为Json字符串数组，具体配置项和说明请参见[表3]。 注意： 配置kubernetes.io/elb.pools-options注解后，不支持同时配置老的分配策略（kubernetes.io/elb.lb-algorithm）、会话保持（kubernetes.io/elb.session-affinity-option或kubernetes.io/elb.session-affinity-options）、后端协议（kubernetes.io/elb.security-pool-protocol）注解。 |
   
 表3后端服务器组配置参数说明 
| 参数                     | 是否必选 | 参数类型                                                 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
|:---|:---|:---|:---|
| protocol               | 是    | String                                               | **参数解释**：后端服务器对应的协议。在前端协议和端口没有发生改变时，无法更新后端协议。 **约束限制** ：自定义配置时，需要与前端监听器的协议匹配，匹配规则见[负载均衡前/后端协议对应关系说明及配置样例](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section740184231718)。全局配置时，无限制。 **取值范围**：TCP/TLS/UDP/HTTP/HTTPS/QUIC **默认取值**：不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| target_service_port    | 否    | String                                               | **参数解释**：用来匹配该配置在哪个后端服务器组生效，由spec.ports下对应port的协议和端口号组成，如：TCP:80，表示该配置在spec.ports下protocol为TCP，port为80对应的后端服务器组上生效。无该字段或者值为\*时，表示该配置为全局配置，对所有后端服务器组生效。 **约束限制** ：全局配置时，数组长度只能为1。由于单个Service内可以创建不同前端协议的监听器，对应的后端协议会有限制，所以当配置为全局参数时，如果后端协议与前端协议不匹配则将使用默认值，匹配规则见[负载均衡前/后端协议对应关系说明及配置样例](https://support.huaweicloud.com/usermanual-cce/cce_10_0681.html#cce_10_0681__section740184231718)。而配置内的其他参数由于都和后端协议有关系，所以可能会不生效而使用默认值。 **取值范围**：\<protocol\>:\<port\> **默认取值**：无，即使用全局配置                                                                                                                                                                                                                                                                           |
| lb_algorithm           | 是    | String                                               | **参数解释**：分配策略类型，即后端服务器组的负载均衡算法。 **约束限制**： - 当该字段的取值为SOURCE_IP或QUIC_CID时，后端服务器组绑定的后端服务器的weight字段无效。  - 只有pool的protocol为QUIC时，才支持QUIC_CID算法。   **取值范围**： - ROUND_ROBIN：加权轮询算法。  - LEAST_CONNECTIONS：加权最少连接算法。  - SOURCE_IP：源IP算法。  - QUIC_CID：连接ID算法。   **默认取值**：后端协议为QUIC时，取值只能为QUIC_CID。其他协议默认取值为ROUND_ROBIN。 |
| session_persistence    | 否    | [SessionPersistence]   | **参数解释**：会话保持设置。 **约束限制**：无 **默认取值**：不开启                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| quic_cid_hash_strategy | 否    | [QuicCidHashStrategy] | **参数解释**：后端服务器组基于部分DST CID的多径分发策略配置。 **约束限制**：只有lb_algorithm为QUIC_CID时，才可以设置 **默认取值**：不涉及                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   
session_persistence和quic_cid_hash_strategy字段
- SessionPersistence
  
  | 参数                  | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
  |:---|:---|:---|:---|
  | type                | 是    | String  | **参数解释**：会话保持类型。 **约束限制**： - 当pool的protocol为TCP、UDP、QUIC时，type只能是SOURCE_IP。  - 当pool的protocol为HTTP、HTTPS时。type只能是HTTP_COOKIE。   **取值范围**： - SOURCE_IP：基于源IP地址的会话保持，也就是根据客户端的源IP地址将流量持续转发到同一后端服务器（member）。  - HTTP_COOKIE：通过在HTTP响应中插入一个特殊的Cookie，实现会话保持。负载均衡会在后续请求中识别该Cookie，并将请求转发到对应的后端服务器。   **默认取值**：不涉及 |
  | persistence_timeout | 是    | Integer | **参数解释**：会话保持的时间。 **约束限制**：不涉及 **取值范围**： - 若pool的protocol为TCP、UDP、QUIC则范围为\[1,60\]（分钟）。  - 若pool的protocol为HTTP和HTTPS则范围为\[1,1440\]（分钟）。   **默认取值**：不涉及                                                                                                                                                                                                                                                                                                               |
     
  
- QuicCidHashStrategy
  
  | 参数     | 是否必选 | 参数类型    | 描述                                                                                                                                                                                                        |
  |:---|:---|:---|:---|
  | len    | 是    | Integer | **参数解释**：表示hash的时候取CID的长度。 **约束限制**：仅当负载均衡算法为QUIC_CID的时候才生效。 **取值范围**：1-20，len + offset \<= 20。 **默认取值**：3     |
  | offset | 是    | Integer | **参数解释**：表示hash的时候取CID的偏移量。 **约束限制**：仅当负载均衡算法为QUIC_CID的时候才生效。 **取值范围**：0-19，len + offset \<= 20。 **默认取值**：1 |
     
  
 
#### 步骤三：访问Service
对于Web应用，支持QUIC连接的客户端环境需要支持HTTP/3，更多详情您可参见[curl官网文档中HTTP/3和QUIC支持](https://github.com/curl/curl/blob/master/docs/HTTP3.md)。
1. 配置客户端支持HTTP/3，本文以windows系统上使用curl工具为例。执行以下命令查看curl是否支持HTTP/3。您可以通过[curl](https://curl.se/download.html)下载相应系统最新版本的curl工具。
   
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002510567370.png "点击放大")
   
   
2. 复制弹性负载均衡公网IP和端口，使用curl工具访问该地址。如果访问正常，则表示客户端通过ELB与后端服务之间通过QUIC协议实现了HTTP/3通信。 
   ![](https://support.huaweicloud.com/usermanual-cce/zh-cn_image_0000002542127711.png "点击放大")
   
   
 
