针对移动网络等网络环境复杂、带宽波动且时延要求较高的场景,或者对于需要低延迟数据交互的应用(如网络游戏、在线视频直播等),您可以使用QUIC协议,并在服务端开启QUIC监听。QUIC支持兼容客户端使用HTTP/3协议访问服务,从而有效提升网络通信的稳定性和实时性能。
工作原理
基于UDP的QUIC协议是HTTP/3的核心,它具有多路复用、0-RTT握手、高效拥塞控制算法、无缝链接迁移等多种改进。相比起使用TLS+TCP的HTTP/2,基于QUIC的HTTP/3能显著减少数据重传和通信延迟,从而提高网络通信性能。关于QUIC的更多信息,请参考QUIC官方文档。
创建QUIC监听后,ALB实例支持客户端使用HTTP/3协议访问服务。
如果部分客户端需要使用HTTP/1.1或HTTP/2访问服务,QUIC还支持与HTTPS监听联合使用,以保证对多种HTTP协议的兼容性。在联合使用两种监听时,ALB实例的工作模式如下图所示。QUIC监听与HTTPS监听同时监听同一个端口,并且使用相同的一组转发规则。在接收客户端访问请求时,ALB实例会优先使用QUIC监听将请求转发至后端服务。而当客户端不支持HTTP/3协议时,ALB实例会通过HTTPS监听进行转发。
前提条件
已创建ALBConfig资源。具体操作,请参见ALB Ingress快速入门。
单独使用QUIC监听
步骤一:在ALBConfig中创建QUIC监听
执行以下命令编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
创建QUIC监听。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: #... listeners: - port: 443 protocol: QUIC # QUIC监听 certificates: - CertificateId: 756****-cn-hangzhou # 证书的CertIdentifier IsDefault: true
重要以上示例使用了ALBConfig指定证书的配置方法。QUIC监听同样支持使用自动发现证书或Secret证书。具体操作,请参见配置HTTPS证书以实现加密通信。
步骤二:效果验证
执行以下命令,查看Ingress信息。
kubectl get ingress
预期输出:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83m
记录下
HOSTS
与ADDRESS
部分的值,以便后续步骤使用。执行以下命令,分别使用HTTP/3与传统的HTTPS访问服务。其中的
demo.alb.ingress.top
与alb-********.alb.aliyuncs.com
请替换为在上一步中得到的值。说明一部分
curl
版本并不默认支持使用HTTP/3协议,请使用支持HTTP/3的curl。curl --http3 -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com
预期输出如下,则表明QUIC监听配置成功:
old
联合使用QUIC监听与HTTPS监听
步骤一:创建HTTPS监听
执行以下命令编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
创建HTTPS监听,并在HTTPS监听中添加
quicConfig
字段。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: #... listeners: - port: 443 protocol: QUIC # QUIC监听 certificates: - CertificateId: 756****-cn-hangzhou # 证书的CertIdentifier IsDefault: true - port: 443 protocol: HTTPS # HTTPS监听 certificates: - CertificateId: 756****-cn-hangzhou # 证书的CertIdentifier IsDefault: true quicConfig: quicListenerId: "" # 目前置空,在下一步中会填入值 quicUpgradeEnabled: false # 设为false
重要以上示例使用了ALBConfig指定证书的配置方法。QUIC监听同样支持使用自动发现证书或Secret证书。
步骤二:在Ingress中添加注解
您需要在Ingress资源中添加注解,以保证Ingress同时作用于多个监听。
执行以下命令,编辑Ingress。
kubectl edit ingress quic-ingress # quic-ingress替换为Ingress的名称
在Ingress中添加
annotation
。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: #... annotations: alb.ingress.kubernetes.io/listen-ports: '[{"QUIC": 443},{"HTTPS": 443}]' # 使用多个监听时需要添加annotation使ALB Ingress正常工作 spec: #...
步骤三:关联监听
在实例页面,单击目标ALB实例ID。在监听页签,查找监听协议/端口为QUIC:443的监听,记录此监听的ID。
在ALBConfig中填入QUIC监听的ID。
执行以下命令编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
在
quicListenerId
字段中填入QUIC监听的ID,并将quicUpgradeEnabled
字段的值修改为true
。apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb spec: config: #... listeners: - port: 443 protocol: HTTPS certificates: - CertificateId: 756****-cn-hangzhou IsDefault: true quicConfig: quicListenerId: lsn-tnz740dr8p5h65**** # 具体QUIC监听listener ID。 quicUpgradeEnabled: true # 修改为true - port: 443 protocol: QUIC # QUIC监听 certificates: - CertificateId: 756****-cn-hangzhou IsDefault: true
确认监听已关联。
在实例页面,单击目标实例ID,然后在实例详情页面,单击监听页签,最后在监听列表,单击目标HTTPS监听名称,在监听详情页签查看已关联的QUIC监听。
步骤四:效果验证
使用HTTP/3协议通过ALB Ingress访问服务,验证配置的效果。
执行以下命令,查看Ingress信息。
kubectl get ingress
预期输出:
NAME CLASS HOSTS ADDRESS PORTS AGE https-ingress https-ingressclass demo.alb.ingress.top alb-********.alb.aliyuncs.com 80, 443 83m
记录下
HOSTS
与ADDRESS
部分的值,以便后续步骤使用。执行以下命令,分别使用HTTP/3与传统的HTTPS访问服务。其中的
demo.alb.ingress.top
与alb-********.alb.aliyuncs.com
请替换为在上一步中得到的值。说明一部分
curl
版本并不默认支持使用HTTP/3协议,请使用支持HTTP/3的curl。curl --http3 -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com curl -H HOST:demo.alb.ingress.top -k https://alb-********.alb.aliyuncs.com
预期输出如下,则表明两种监听关联成功,兼容多种HTTP协议:
old old
(可选)步骤五:解除关联
执行以下命令编辑AlbConfig。
kubectl edit albconfig <ALBCONFIG_NAME> # <ALBCONFIG_NAME>替换AlbConfig的名称
将
quicListenerId
字段置空,并将quicUpgradeEnabled
字段的值修改为false,然后保存并退出。# 以上内容省略。 port: 443 protocol: HTTPS quicConfig: quicListenerId: "" # 将QUIC监听listener ID置空。 quicUpgradeEnabled: false # 修改为false requestTimeout: 0 # 以下内容省略。
相关文档
如果您的服务可能遭受网络攻击,您可以使用ALB WAF增强版实例,请参见使用ALB WAF增强版实例保护服务。
更多的监听配置,请参见通过ALBConfig配置ALB监听。