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

本文涉及的产品
Digicert DV 证书 单域名,20个 3个月
访问控制,不限时长
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 极致的稳定性和高可用,揭秘 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 最新动态,并对我们的产品提出宝贵建议。


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6天前
|
Cloud Native
邀您参加云原生高可用技术沙龙丨云上高可用体系构建:从理论到实践
云原生高可用技术专场,邀您从理论到实践一起交流,探索云上高可用体系构建!
|
7月前
|
Kubernetes 负载均衡 应用服务中间件
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
深入理解 Kubernetes Ingress:路由流量、负载均衡和安全性配置
1298 1
|
3月前
|
存储 弹性计算 缓存
云存储网关-高可用文件网关基本介绍
本文介绍云存储网关新推出的高可用文件网关使用方法及其架构原理。通过选择“高可用”选项,用户可在不同可用区部署网关,避免单点故障。文章详细描述了创建网关、配置虚拟挂载IP及缓存盘、创建共享等步骤,并解释了高可用架构如何通过数据复制和故障切换确保服务连续性和低延迟访问。
78 4
|
4月前
|
负载均衡 应用服务中间件 nginx
搭建域名访问环境二(负载均衡到网关)
这篇文章讲述了如何配置Nginx实现域名访问环境,通过负载均衡将请求从Nginx反向代理到服务网关,并提供了详细的配置步骤和测试验证方法。
搭建域名访问环境二(负载均衡到网关)
|
3月前
|
存储 对象存储
radosgw高可用对象存储网关实战指南
关于radosgw高可用对象存储网关的实战指南,涵盖了从基本概念到具体操作案例,再到架构设计和使用技巧的全面介绍。
72 6
|
4月前
|
Java 应用服务中间件 测试技术
阿里云云效产品使用合集之云效流水线如何使用alb ingress的脚本
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
5月前
|
负载均衡 NoSQL 应用服务中间件
搭建高可用及负载均衡的Redis
【7月更文挑战第10天】
195 1
|
5月前
|
负载均衡 安全 Cloud Native
云上负载均衡:构建高可用、高性能的网络应用架构
与云原生技术深度融合:随着云原生技术的普及和发展未来的云上负载均衡将更加紧密地与云原生技术相结合。例如与Kubernetes等容器编排平台集成实现自动化的服务发现和路由管理;与Serverless架构结合提供无缝的流量接入和请求处理能力。 安全性能提升:面对日益严峻的网络安全威胁云上负载均衡将更加注重安全性能的提升。通过引入加密传输、访问控制、DDoS防护等安全措施确保网络流量的安全性和隐私性;同时还将建立完善的安全监控和应急响应机制以应对各种安全事件和突发事件。 支持多协议和多场景:未来的云上负载均衡将支持更多种类的网络协议和应用场景以满足不同用户和业务的需求。例如支持HTTP/2、
282 0
|
5月前
|
负载均衡 算法 Java
实现高可用和可扩展的负载均衡系统的Java方法
实现高可用和可扩展的负载均衡系统的Java方法
|
6月前
|
负载均衡 应用服务中间件 开发工具
技术笔记:nginx和keeplive实现负载均衡高可用
技术笔记:nginx和keeplive实现负载均衡高可用