极致的稳定性和高可用,揭秘 ALB Ingress 云原生网关(下)

本文涉及的产品
Digicert DV 证书 单域名,20个 3个月
简介: 极致的稳定性和高可用,揭秘 ALB Ingress 云原生网关(下)

更多精彩内容,欢迎观看:

极致的稳定性和高可用,揭秘 ALB Ingress 云原生网关(上)


安全能力升级


当前互联网时代,网络安全问题日益突出,恶意软件、网络攻击以及数据泄露等威胁不断涌现,给个人、企业和国家带来了巨大的风险和损失。因此,确保一个安全的网络环境至关重要。在此背景下,ALB Ingress Controller 通过支持 secret 证书配置、AclId 关联访问、支持双向认证,为客户网络环境提供了一道坚实的防线,确保客户云上网络通信的安全性和可信度。


secret 证书兼容

使用 HTTPS 监听转发来自 HTTPS 协议的请求时,需要使用证书建立 TLS 连接。新版本 ALB Ingress 不仅支持自动发现证书/通过 Albconfig 指定证书,还支持通过 Secret 证书为 HTTPS 监听配置证书。


比较项 自动发现证书 Secret证书 AlbConfig指定证书
适用场景 适用于已在阿里云数字证书中心购买证书,或已上传证书到阿里云数字证书中心。 适用于集群内部管理的证书,例如使用cert-manager类的管理工具时,ALB实例证书会跟随证书Secret更新而更新。 依赖证书上传到证书中心,适用于同域名多个证书情况下,指定确定证书的场景。
自动更新ALB关联证书 不支持,需要手动更改证书。 支持 不支持,需手动更改证书。
优先级
跨命名空间使用 支持 不支持,仅支持在Secret命名空间使用。 支持,AlbConfig是集群粒度类型的资源,会在整个集群生效。
更新证书方式 在数字证书中心上传新证书或续费证书后,需手动修改Ingress内容(例如修改Ingress名称、注解等),以实现自动证书发现。 更新Ingress关联的Secret资源。 在数字证书中心上传新证书或续费证书后,需手动更新AlbConfig资源,指定新的证书ID。


如上为三种 HTTPS 监听配置证书方式的对比。其中 Secret 证书配置方式适用于集群内部管理的证书,ALB 相关监听证书会跟随证书 Secret 更新而自动更新,不需要用户手动触发调谐,能够更好匹配需要证书自动更新的用户需求。通过 Secret 配置 HTTPS 监听证书步骤如下:


  1. 通过 OpenSSL 创建自签名证书


opensslgenrsa-outalbtop-key.pem4096opensslreq-subj"/CN=demo.alb.ingress.top"-sha256-new-keyalbtop-key.pem-outalbtop.csrechosubjectAltName=DNS:demo.alb.ingress.top>extfile.cnfopensslx509-req-days3650-sha256-inalbtop.csr-signkeyalbtop-key.pem-outalbtop-cert.pem-extfileextfile.cnf
  1. 在 ACK 集群创建 Secret,相关 secret.yaml 文件参考如下
apiVersion: v1kind: Secretmetadata:
name: secret-tlstype: kubernetes.io/tlsdata:
# the data is abbreviated in this exampletls.crt: |    {base64albtop-cert.pem} #Base64编码后的albtop-cert.pem。tls.key: |    {base64albtop-key.pem}  #Base64编码后的albtop-key.pem。
  1. 在 ingress 中通过 Secret 为 HTTPS 监听相关域名配置证书:
tls:
-hosts:
-demo.alb.ingress.topsecretName: secret-tls


详细的 Secret 配置监听证书方式可以参考:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-an-alb-ingress-to-configure-certificates-for-an-https-listener?spm=a2c4g.11186623.0.0.a5216123JTrouT#section-b54-gny-3yb


 AclId 关联访问控制

ALB Ingress 支持在 albconfig 上写 AclEntry 配置访问控制,在实际使用场景中,对于高频使用 acl 的客户,为每个监听配置相同的 aclEntry 十分繁琐。新版本ALB Ingress 支持通过 aclID 关联访问控制,允许用户复用已有的 acl 列表,实现一次修改,多处复用。


使用 ALB Ingress 配置 acl 时,存在几种典型场景,用户可以针对使用场景选择特定的配置方式:


  • 监听有限,需要快速配置 acl 场景,直接使用 aclEntry 进行配置:


apiVersion: alibabacloud.com/v1kind: AlbConfigmetadata:
name: defaultspec:
config:
#...listeners:
-port: 80protocol: HTTPSaclConfig: 
aclEntries:
-127.0.0.1/32aclType: WhiteaclName: alb-acl-testaclIds:[]
#...


  • 监听较多,使用 aclId 关联访问控制,复用已配置好的 aclEntry 进行配置:


apiVersion: alibabacloud.com/v1kind: AlbConfigmetadata:
name: defaultspec:
config:
#...listeners:
-port: 80protocol: HTTPSaclConfig: 
aclEntries:[]
aclType: WhiteaclName: alb-acl-testaclIds:
-acl-1yur2xxlbskb1*****#...


支持双向认证

在处理关键业务时,HTTPS 双向认证不仅需要客户端从服务器端下载服务器的公钥证书进行验证,还需要把客户端的公钥证书上传到服务器端进行验证。通过对通信双方做认证后建立安全通信通道进行数据传输,能够为业务提供更高的安全性。ALB ingress Controller 在最新版本中支持为监听开启双向认证,详细的配置步骤如下:


  1. 用户通过 openssl 命令创建或在数字证书管理服务控制台购买服务器证书/CA 证书/客户端证书(需要确保服务器证书可以被客户端信任,可以同客户端同 CA 签发)。
  2. 获取已创建服务器证书的 Identifier,填写到 albconfig 的 Certificates 字段,作为服务器默认证书。



  1. 获取已创建的根证书 Identifier,填写到 albconfig 的 CaCertificates 对应的 CertificateId 处,并填写 caEnabled 参数为 true



双向认证 albconfig 监听相关配置如下:


listeners:
-port: 443protocol: HTTPScaEnabled: truecaCertificates:
-CertificateId: 0e40dda998174723af39d37*********certificates:
-CertificateId: 1088****-cn-hangzhouIsDefault: true


产品功能&体验优化

ALB Ingress 功能迭代/体验优化包含支持通过自定义转发动作实现重写,为用户HTTPS 监听开启 QUIC 升级,服务器组负载均衡算法支持指定 URL 参数进行一致性哈希,更精确的错误事件排查方式等,致力于让用户更加方便、高效地使用 ALB Ingress。


自定义转发动作支持重写




在负载均衡场景中,重写是较为常用的功能。如上述场景,ALB 在向用户后端转发请求时,需要将请求路径中的 tea 重写为 coffee,并将域名 a.com 替换为  b.com。重写功能可以通过 alb.ingress.kubernetes.io/rewrite-target 注解项配置,但仅支持进行路径重写。新版本 ALB Ingress 支持通过通用性的自定义转发动作实现 rewrite 特性,对请求的路径/域名/查询字符串重写,实际配置可以参考下面的配置文件


apiVersion: networking.k8s.io/v1kind: Ingressmetadata:
namespace: defaultname: ingressannotations:
alb.ingress.kubernetes.io/actions.rewrite: |       [{
"type": "Rewrite",
"RewriteConfig": {
"Host": "b.com",
"Path": "/coffee",
"Query": ""           }
       }]
spec:
ingressClassName: albrules:
-host: a.comhttp:
paths:
-path: /teapathType: Prefixbackend:
service:
name: rewriteport:
port: 80


需要注意的是,自定义转发动作配置 rewrite 与 rewrite-target 注解项配置存在冲突,不可以同时配置。同时,重写属于扩展型转发动作,目前只与 forwardGroup一种终结型转发动作共用,不可以与固定响应/重定向共用。


详细的重写转发动作使用方式可以参考:

https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/customize-the-routing-rules-of-an-alb-ingress-1#p-f19-5b8-nuy


为 HTTPS 监听开启 QUIC 升级

QUIC 协议又被称为快速 UDP 互联网连接协议,提供与 SSL 相同的安全性,同时具备多路复用、0-RTT 握手等多种优势,相比于传统的 TCP 协议,拥有了更好的改造灵活性,适合用于在 TCP 协议优化遇到瓶颈的业务。 ALB Ingress Controller 当前支持 gQUIC/http3.0 协议,用户可以为 ALB 实例创建 QUIC 监听。



ALB 支持为一个 HTTPS 监听绑定 QUIC 监听并开启 QUIC 升级。QUIC 协议底层为 UDP 协议,为 HTTPS 监听开启 QUIC 升级支持 QUIC/HTTPS 监听绑定在同一端口。如上图所示,用户在一个 ALB 实例上创建 QUIC 监听与 HTTPS 监听,两个监听全部绑定在 443 端口,并分别为两个监听配置转发规则。配置 ingress 时只需要通过自定义监听端口指定 QUIC/HTTPS 监听在同一端口下:


apiVersion: networking.k8s.io/v1kind: Ingressmetadata:
name: tea-ingressannotations:
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443},{"QUIC":443}]'spec:
ingressClassName: albtls:
-hosts:
-demo.alb.ingress.toprules:
-host: demo.alb.ingress.tophttp:
paths:
-path: /testpathType: Prefixbackend:
service:
name: forwardport:
number: 80


创建 HTTPS/QUIC 监听后,编辑 Albconfig 中 HTTPS 监听下的 quicConfig 信息,将 quicUpgradeEnabled 参数置为 true 并填写 quicListenerId 后(在ALB控制台查找QUIC监听listener ID获取),可以为当前 HTTPS 监听开启 QUIC 升级。


port: 443protocol: HTTPSquicConfig:
quicListenerId: “lsn-jqidaoh4becd0qp***quicUpgradeEnabled: true


需要注意的是在删除 HTTPS/QUIC 监听时需要先解除监听关联。用户需要编辑 Albconfig,将 HTTPS 监听下的 quicUpgradeEnabled 参数置为 false 后再删除相应监听。


 后端服务器支持 Uch 调度算法



ALB 当前支持 wrr/wlc/sch/uch 等多种负载均衡算法,其中 Uch 调度算法支持后端服务器组选择 URL 参数作为哈希因子进行一致性哈希调度,将 URL 一致的请求调度至相同的后端服务器上。如上述场景,ALB 在向用户后端转发请求时,对于URL参数为 test 的访问请求会始终转发至同一台固定的后端服务器。


ALB Ingress Controller 通过设置注解项 alb.ingress.kubernetes.io/backend-scheduler 可以指定 uch 负载均衡算法,并通过注解项alb.ingress.kubernetes.io/backend-scheduler-uch-value 指定具体的 URL 参数进行一致性哈希。具体的配置示例如下:


apiVersion: networking.k8s.io/v1kind: Ingressmetadata:
name: nginxannotations:
alb.ingress.kubernetes.io/backend-scheduler: "uch"alb.ingress.kubernetes.io/backend-scheduler-uch-value: "test"spec:
ingressClassName: albrules:
-host: a.com-http:
paths:
-path: /testpathType: Prefixbackend:
service:
name: nginxport:
number: 80


错误事件排查



用户配置多条 ingress 场景下,某条 ingress 由于格式错误/参数校验失败等原因触发了调谐失败,此时就需要将失败事件实时精确推送至问题 ingress,便于用户及时确认失败原因。如上图场景所示,在多条 Ingress 中 Ingress2 由于参数校验失败触发整体调谐失败,失败事件及问题原因会实时推送至 Ingress2,且不向其他 Ingress 推送。用户通过 kubectl describe ingress xxx-Ingress 可以快速定位调谐失败原因。



总结与规划

在过去半年里,ALB Ingress 在稳定性/安全领域重点发力,致力于为用户提供更加灵活的部署方案,更加精确有效的问题定位能力,更加安全可靠的网络环境。后续我们会立足客户需求,持续保持快速迭代,扩展更多云原生使用场景,为客户提供更安全可靠的云原生网关。欢迎关注 ALB Ingress 最新动态,并对我们的产品提出宝贵建议。


相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6月前
|
负载均衡 网络安全
|
6月前
|
负载均衡
Pgpool-II实现高可用+读写分离+负载均衡(七)---- recovery_1st_stage分析
recovery_1st_stage是Pgpool online recovery的第一阶段,位于PG_DATA目录下,主要功能就是使用pg_basebackup恢复(recovery)从节点。
204 0
|
4月前
|
负载均衡 算法 应用服务中间件
这些负载均衡都解决哪些问题?服务、网关、NGINX?
这些负载均衡都解决哪些问题?服务、网关、NGINX?
107 1
|
1月前
|
容器
在容器服务ACK中,如果你想更改ALB Ingress的域名和端口
【2月更文挑战第15天】在容器服务ACK中,如果你想更改ALB Ingress的域名和端口
15 3
|
2月前
|
存储 缓存 运维
解密一致性哈希算法:实现高可用和负载均衡的秘诀
解密一致性哈希算法:实现高可用和负载均衡的秘诀
163 0
|
3月前
|
Cloud Native 安全 应用服务中间件
云原生网关哪家强:Sealos 网关血泪史
云原生网关哪家强:Sealos 网关血泪史
|
3月前
|
Kubernetes 负载均衡 监控
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
Kubernetes高可用集群二进制部署(一)主机准备和负载均衡器安装
|
4月前
|
Kubernetes 负载均衡 应用服务中间件
k8s学习-CKA真题-七层负载均衡Ingress
k8s学习-CKA真题-七层负载均衡Ingress
51 0
|
4月前
|
tengine Kubernetes Cloud Native
Tengine-Ingress 高性能高可用的云原生网关
Tengine-Ingress 高性能高可用的云原生网关
|
5月前
|
负载均衡 算法 网络协议
Keepalived+LVS搭建高可用负载均衡
Keepalived+LVS搭建高可用负载均衡
185 1