QUIC协议在应用程序层面可以实现不同的拥塞控制算法,被称为快速UDP互联网连接协议。QUIC提供与SSL相同的安全性,同时具备多路复用、0-RTT握手等多种优势,具有极佳的弱网性能,在丢包和网络延迟严重的情况下,不需要操作系统和内核支持仍可提供可用的服务。相比于传统的TCP协议,QUIC拥有更好的改造灵活性,适合用于在TCP协议遇到瓶颈的业务。本文介绍如何通过AlbConfig创建QUIC,并且将QUIC监听和HTTPS监听关联。
前提条件
已创建ACK托管集群、ACK专有集群或ACK Serverless集群。具体操作,请参见创建Kubernetes托管版集群、创建Kubernetes专有版集群或创建ACK Serverless集群。
已创建两个不同可用区的交换机,且与集群处于同一VPC。具体操作,请参见创建和管理交换机。
已为集群安装ALB Ingress Controller组件。具体操作,请参见管理ALB Ingress Controller组件。
说明若需要在ACK专有集群中通过ALB Ingress访问服务,在部署服务前需要为ALB Ingress Controller授权。具体操作,请参见为ACK专有集群授予ALB Ingress Controller访问权限。
已通过kubectl工具连接ACK集群。具体操作,请参见获取集群KubeConfig并通过kubectl工具连接集群。
注意事项
QUIC监听支持单独使用,也支持与HTTPS监听联合使用。当QUIC监听与HTTPS监听联合使用时,需要同时创建QUIC/HTTPS监听,为HTTPS监听绑定关联的QUIC监听并开启QUIC升级。
当前ALB已经支持gQUIC和HTTP/3协议,但客户端暂未全量支持HTTP/3协议。在QUIC监听与HTTPS监听联合使用时,ALB会优先选择HTTP/3协议进行通信。如果客户端不支持HTTP/3协议,则ALB会回退为使用HTTPS或HTTP/2协议。
ALB Ingress Controller支持QUIC监听与HTTPS监听绑定在同一端口。如下图所示,在一个ALB实例上创建QUIC监听与HTTPS监听,两个监听全部绑定在443端口,并分别为两个监听配置转发规则。
步骤一:获取SSL证书ID
具体操作,请参见使用AlbConfig指定证书。
步骤二:通过AlbConfig创建QUIC监听和HTTPS监听
拷贝以下内容到alb-test.yaml,通过AlbConfig创建QUIC监听和HTTPS监听。
apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: name: alb-demo # 自定义AlbConfig名称。 spec: config: name: alb-test addressType: Internet zoneMappings: - vSwitchId: vsw-2vcbhjlmxxx # 具体vSwitch ID。 - vSwitchId: vsw-2vc94zb2xxx # 具体vSwitch ID。 listeners: - caEnabled: false certificates: - CertificateId: 868xxx-cn-hangzhou # 具体CertificateId(已获取的SSL证书ID)。 IsDefault: true port: 443 # 具体HTTPS端口号,默认为443。 protocol: HTTPS quicConfig: quicListenerId: "" quicUpgradeEnabled: false requestTimeout: 0 - caEnabled: false certificates: - CertificateId: 868xxx-cn-hangzhou # 具体CertificateId(已获取的SSL证书ID)。 IsDefault: true port: 443 # 具体QUIC端口号,支持与HTTPS监听同端口。 protocol: QUIC requestTimeout: 0
执行以下命令,创建AlbConfig。
kubectl apply -f alb-test.yaml
预期输出:
albconfig.alibabacloud.com/alb-demo created
步骤三:关联监听
在实例页面,单击目标实例ID。在监听页签,查找并获取QUIC监听的Listener ID,以备后续使用。
说明当前ALB控制台仅支持通过Listener ID将QUIC监听与HTTPS监听进行关联。
为HTTPS监听关联已创建的QUIC监听,并开启QUIC升级。
执行以下命令,编辑AlbConfig。
kubectl -n kube-system edit AlbConfig alb-demo # alb-demo为本文示例,实际AlbConfig名称请替换成为您自己的。
在AlbConfig配置文件中,更新如下内容。
# 以上内容省略。 port: 443 protocol: HTTPS quicConfig: quicListenerId: lsn-tnz740dr8p5h65**** # 具体QUIC监听listener ID。 quicUpgradeEnabled: true # 开启QUIC升级,QUIC升级开关置为true。 requestTimeout: 0 # 以下内容省略。
查看HTTPS监听是否已关联QUIC监听。
在实例页面,单击目标实例ID,然后在实例详情页面,单击监听页签,最后在监听列表,单击目标HTTPS监听名称,查看已关联的QUIC监听。
(可选)步骤四:解除HTTPS与QUIC关联
执行以下命令,编辑AlbConfig。
kubectl -n kube-system edit AlbConfig alb-demo # alb-demo为本文示例,实际AlbConfig名称请替换成为您自己的。
在AlbConfig配置文件中,更新以下内容。
# 以上内容省略。 port: 443 protocol: HTTPS quicConfig: quicListenerId: "" # 将QUIC监听listener ID置空。 quicUpgradeEnabled: false # 关闭QUIC监听升级,QUIC升级开关置为false。 requestTimeout: 0 # 以下内容省略。
(可选)步骤五:删除HTTPS监听及QUIC监听
确认已解除HTTPS与QUIC的关联。如未解除,请先执行步骤四。
重要目前ALB控制台无法删除有关联的监听,因此删除QUIC监听和HTTPS监听前,必须先解除HTTPS与QUIC的关联。
执行以下命令,编辑AlbConfig。
kubectl -n kube-system edit AlbConfig alb-demo # alb-demo为本文示例,实际AlbConfig名称请替换成为您自己的。
在AlbConfig配置文件中,删除以下内容。
# 以上内容省略。 listeners: - caEnabled: false certificates: - CertificateId: 11055487-cn-hangzhou IsDefault: true port: 443 protocol: HTTPS quicConfig: quicListenerId: "" quicUpgradeEnabled: false requestTimeout: 0 - caEnabled: false certificates: - CertificateId: 10336983-cn-hangzhou IsDefault: true port: 443 protocol: QUIC requestTimeout: 0