如何在容器服务 ACK 玩转 MSE Ingress

简介: 如何在容器服务 ACK 玩转 MSE Ingress

作者:扬少


随着容器和 Kubernetes 技术的兴起,集群入口流量管理方式逐渐被 Ingress 通用化和标准化。入口网关的标准化制定将入口流量管理与网关的实现解耦,不仅促进了各种 Ingress Controller 的发展,而且消除了开发者存在的与厂商绑定的顾虑,日后也可以根据自身业务实际场景切换到不同 Ingress Controller。目前,越来越多的开发者开始关注并考虑将业务网关切换为 Ingress 网关,有的企业甚至已经落地了 Ingress 网关。


本文主要介绍 Ingress Controller 新选择——MSE Ingress 是什么,分享 MSE Ingress 最佳实践来帮助开发者从用 Ingress、到用好 Ingress。


什么是 Ingress


简单回顾一下之前我们在使用一些传统网关遇到的问题。

  1. 人力成本:常见的网关(Nginx、Spring Cloud Gateway、Zuul等)的路由配置以及策略配置格式均不同,开发者在选用网关之前需要熟悉对应网关的配置文件的使用方法,企业在招聘人员也要考虑是否具备所用网关的技术栈。
  2. 迁移成本:业务由于自身原因需要切换网关类型,开发者需要熟悉目标网关的配置文件,开发迁移工具,测试迁移工具的完整性,演练迁移方案,最终才能完成迁移。


在 Kubernetes 平台中,抽象、标准是第一要义。有了标准,才能更好适配各类不同实现的组件,才能不断蓬勃、可持续的发展。Kubernetes 通过统一抽象定义的 Ingress 资源来管理外部访问集群内部服务的方式,将入口网关的功能与实现解耦。


使用 Ingress 来管理集群入口流量有3大优势:

  1. 标准:遵循入口流量管理的标准形式,开发者只需熟悉 Ingress 配置即可,并且可以非常方便的切换业务网关的实现。
  2. 简单:Ingress 的定义格式简单,易于学习。通过简单配置 Host、Path 和目标服务即可快速完成集群内部服务的对外发布。
  3. 可扩展:Ingress 的标准定义仅仅包含了 HTTP 流量的路由匹配规则以及 HTTPS 流量所需的证书配置。开发者可以通过 Ingress Annotation 的形式进一步拓展 Ingress 的 API,实现流量分流、跨域、Header控制等治理策略。

image.png

Ingress 实现现状


Ingress 是抽象接口,具体的实现仍然由各类网关完成。目前,Ingress 的实现有两大阵营:Nginx 和 Envoy。Nginx 存量大,但是由于架构设计的问题,随着用户规模变大逐步暴露安全和稳定性风险,目前社区宣布停止 6 个月新需求开发, 集中解决安全和稳定性问题;Envoy + Istio 作为后起之秀,采用数据面和控制面分离架构,有更好的安全和稳定性保障,并且支持多语言扩展,热更新优势,Envoy 社区也推出 Gateway 产品加速 Gateway API 落地。

image.png

Ingress 实现趋势


从以下 CNCF 对 Ingress Provider 调研结果来看,虽然 Nginx 仍然处于 Ingress Provider 榜首,但增长速度已经放缓;Envoy 正在以最快的速度占据市场,越来越多的企业开始使用 Envoy,Envoy 的优势正在被更多的用户认可。

image.png

Ingress 实现新选择:MSE Ingress


随着云原生技术持续演进,云原生应用微服务化不断深入,Nginx Ingress 在面对复杂路由规则配置、支持多种应用层协议(Dubbo和QUIC等)、服务访问的安全性以及流量的可观测性等问题上略显疲惫。


另外,Nignx Ingress 在处理配置更新问题上是通过 Reload 方式来生效配置,在面对大规模长连接的情况下是会出现闪断情况,频繁变更配置可能会造成业务流量有损。


为了解决用户对大规模流量治理的强烈诉求,基于 Envoy 内核构建的 MSE Ingress 网关应运而生,这是阿里云推出的兼容标准 Ingress 规范的下一代网关,具备低成本、安全、高集成和高可用的产品优势。将传统的 WAF 网关、流量网关和微服务网关合并,在降低 50% 资源成本的同时为用户提供了精细化的流量治理能力,支持 ACK 容器服务、Nacos、Eureka、固定地址、FaaS 等多种服务发现方式,支持多种认证登录方式快速构建安全防线,提供全方面、多视角的监控体系,如指标监控、日志分析以及链路追踪,并且支持解析单、多 K8s 集群模式下的标准 Ingress 资源,帮助用户在云原生应用场景下以声明式进行统一流量治理,此外我们引入了 WASM 插件市场满足用户定制化的需求。

image.png

MSE Ingress 优势


MSE Ingress 相比 Nginx Ingress,在流量治理和安全防护上更胜一筹。

image.png

MSE Ingress 开源:Higress


有了阿里巴巴内部业务实际场景和云产品的沉淀,我们希望有更多的开发者可以一起共建 MSE Ingress 网关,于是我们在去年 11 月开源了 Higress 网关,依托以 Kubernetes Ingress 网关为契机带来了的流量网关与微服务网关融合的可行性,实现了流量网关 + 微服务网关 + 安全网关三合一的高集成能力,同时深度集成了 Dubbo、Nacos、Sentinel 等,能够帮助用户极大的降低网关的部署及运维成本,而且能力不打折。

image.png

MSE Ingress 最佳实践:灰度发布


业务规模不断扩大促使应用系统的迭代速度加快,多变的外部市场环境要求业务系统具备快速试错的能力,如何保障应用升级过程中流量无损是开发者始终关心的问题。

MSE Canary Ingress

用户借助 MSE Ingress 可以实现服务多个灰度版本共存,方便服务多个特性功能同时开发并且独立灰度验证。MSE Ingress 支持多种灰度流量识别方式,基于 HTTP Header、基于请求参数、基于 Cookie 和基于权重的方式,用户可以按需针对路由级别实施灰度匹配策略。

image.png

渐进式交付框架:Kruise Rollout

以上的方式依赖开发者手动管理 Ingress、Deployment 和 Service 资源,借助于渐进式交付框架 Kruise Rollout,开发者无需关注发布过程中如何调整 Deployment、Ingress、Service 等资源,只需声明并管理发布策略 Rollouts 资源即可,原生 Deployment 的滚动发布会自动实现为渐进式交付,让应用发布可批次、可灰度、可回滚,助力业务快速迭代发展同时,也提高了应用发布的稳定性和效率问题。

image.png

MSE Ingress最佳实践:全链路灰度


对于分布式架构的微服务应用而言,服务之间的依赖关系错综复杂,一个业务功能需要多个微服务共同提供能力,一次业务请求需要经过多个微服务才能完成处理,牵一发而动全身。


在这种场景下,业务新功能发布可能同时涉及到多个服务发布,对新功能验证时就涉及到了对多个服务同时灰度的问题,通过构建从网关到整个后端服务的环境隔离来对多个不同版本的服务进行灰度验证,这就是微服务架构中特有的全链路灰度场景。


目前,全链路灰度的解决方案包括基于物理环境隔离和基于逻辑环境隔离。基于物理环境隔离的做法是通过增加机器的方式来搭建真正意义上的流量隔离,该方式存在一定的人力成本和机器成本,所以业界比较常用的做法是更灵活的基于逻辑环境管理。该方式虽然看起来是服务正式版本和灰度版本都部署在一个环境中,但是通过灰度路由匹配策略,可以精确控制灰度流量优先流经服务对应的灰度版本,只有当目标服务不存在灰度版本时,才会容灾到服务正式版本。从总体视角上看,针对新功能的灰度验证流量只会流经涉及到待发版服务的灰度版本,对于本次新功能未涉及到改动的服务,灰度流量正常通过,这种精准化的流量控制方式大大方便了开发者在微服务架构中多版本并行开发和验证的痛点,同时也降低了搭建测试环境的机器成本。


容器服务 ACK 用户,可以搭配使用 MSE 微服务治理和 MSE Ingress,在不改任何一行代码的情况下,轻松快速上手全链路灰度能力,通过这种精细化的流量控制能力在用户在微服务架构治理过程中得心应手。

image.png

MSE Ingress 最佳实践:无损上下线


无损下线

服务的 Pod 实例在以下情况会出现下线:

  1. 服务缩容:当大促洪峰流量结束时,为节省资源会对服务进行缩容操作,将资源控制在合理范围内。
  2. 服务发布:当服务进行升级迭代时,服务的老版本实例会进行下线操作,流量逐步转向服务的新版本实例。


看似简单的下线操作,其实暗藏玄机。由于微服务应用自身调用特点,在高并发下,服务提供端应用实例的直接下线,会导致服务消费端应用实例无法实时感知下游实例的实时状态,因而出现继续将请求转发到已下线的实例从而出现请求报错,流量有损。

image.png

为什么会出现这种问题呢?这是因为在 K8s 平台中 Pod 的 Endpoint 下线事件是异步的,也就是说 Ingress 网关可能在 Pod 下线之后才收到 Endpoint 下线事件,而这期间的线上流量仍然会被 Ingress 网关转发至已下线的实例,导致请求出错。


那么如何保证实例下线过程中流量无损呢?有以下几种方案:


  1. 业务应用需要合理捕获并处理 SIGTERM 信号。在收到 SIGTERM 信号之后,在刚开始的一段时间内(一般15s)继续处理新到的请求,之后开始关闭连接并终止进程。
  2. 如果你无法或不愿意对业务应用代码添加 SIGTERM 信号的处理逻辑,那么你可以采用 K8s PreStop 机制。PreStop 机制是一种外部可插拔的,用于在发送 SIGTERM 信号之前执行的拦截点。常用的做法是执行 Sleep 命令等待 15 到 30 秒,确保 Endpoint 下线事件已被 Ingress 网关、CoreDNS、KubeProxy 等组件处理。
  3. 你可以选用云产品 MSE 微服务治理,以无侵入的方式实现无损下线。


无损上线

服务的 Pod 实例在以下情况会出现上线:

  1. 服务扩容:当大促洪峰流量到来之前,为满足请求容量,会对服务进行扩容。
  2. 服务发布:当服务进行升级迭代时,服务的新版本实例会进行上线操作。


同样,新节点上线过程中也是危机重重。当服务的新节点启动之后,Ingress 网关会感知服务新节点上线事件,更新连接池信息并加入新节点,新的访问请求会被负载到新节点上。由于新节点启动之后,需要进行一些资源初始化和预热操作。这时,如果大量的请求在资源初始化完毕之前到来,会导致请求出现超时或出错,甚至直接导致新节点宕机不可用。

image.png

MSE Ingress 给出了一个非常简单的解决方案,用户只需在 Ingress 资源上通过 Annotation 配置服务预热时间即可。MSE Ingress 会对新节点按照新节点启动时间在预热窗口期中的占比决定新节点分配流量的权重,确保新节点在接收全部流量之前已完成充分预热,保障上线过程中平滑无损。


MSE Ingress 最佳实践:全域安全


安全问题始终是业务应用的头号公敌,伴随着业务发展的整个生命周期。此外,外部互联网的环境越来越复杂,内部业务架构日益庞大,部署结构涉及公有云、私有云以及混合云多种形态,安全问题愈演愈烈。


作为入口网关的 MSE Ingress,从一开始就在安全领域进行了积极探索和增强,打造了全方面的安全防护。主要体现在以下几个方面:


  • 加密通信以及 TLS 硬件加速

业务通信数据通常来说都是私有的、敏感的,TLS 作为最基本、最广泛的防窃听、防篡改的协议经常和 HTTP 协议结合使用,就是大家熟知的 HTTPS 协议。MSE Ingress 构建了从客户端到网关、网关到后端服务整个体系的 HTTPS 协议支持,并且结合阿里云第七代 ECS 率先完成了 TLS 硬件加速,在不增加用户资源成本的同时大幅度提升 HTTPS 的性能。针对特殊业务场景下对 TLS 协议版本以及 TLS 加密条件的合规性要求,MSE Ingress 额外支持了域名级别的 TLS 版本控制以及加密套件选择。

  • 细粒度的 WAF 防护

在功能上,MSE Ingress 不仅支持全局WAF防护,而且提供了细粒度的路由级别的 WAF 防护;在架构上,MSE Ingress 采用内置 WAF Agent 的方式,相比传统 WAF 用户请求链路更短、RT 更低。

  • 细粒度的 IP 访问控制

MSE Ingress 支持实例级别、域名级别以及路由级别的 IP 黑白名单,优先级逐步增加。用户可以在实例级别配置应用范围更广的 IP 访问控制,然后在路由级别配置与业务相关的 IP 访问控制,满足用户多样化的访问控制策略。

  • 多样化的认证鉴权体系

在微服务的架构中,会有多个服务接收来自外部用户(客户端)的请求,通常不会直接将服务暴露给外部用户,而是在中间加一层网关作为外部用户访问内部服务的控制点。对于外部用户访问的请求,我们通常希望在网关中进行身份验证,知道用户是谁,并能定义访问控制策略。目前,MSE Ingress 支持 Basic Auth、JWT Auth、OIDC、阿里云 IDaaS 服务以及自定义外部认证鉴权,助力业务以无侵入的方式轻松实现高阶访问控制。

image.png

MSE Ingress 动手实践


用户可以在容器服务集群的组件管理中安装 MSE Ingress Controller,通过 MseIngressConfig 管理 MSE Ingress 网关的数据面:云原生网关,并通过 MSE Ingress 访问集群内部的容器服务。

image.png

目前,容器服务的新版 Ingress 交互已经上线,极大的简化了 Ingress 的使用门槛。

image.png

如果您想免费试用 MSE Ingress,可以通过以下云起实验室进行尝试:

https://developer.aliyun.com/adc/scenario/exp/dba50c4714f4494d98cc090c1ab0f8cc


MSE 3 月采购季优惠


【0元试用】

服务治理试用版,开通后15天免费使用。

【新老同享】

服务治理资源包:专业版/(7200Agent*小时)67.5元。

注册配置中心资源包:开发版/规格1C2G 76.7元

【首购专享】

注册配置中心专业版,引擎类型 Nacos,包年包月6折。

注册配置中心专业版,引擎类型 ZooKeeper,包年包月5折。

云原生网关,包年包月6折。

服务治理资源包(按量抵扣),包年包月6折。

image.png

扫描二维码,进入 MSE 用户交流群

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
存储 Kubernetes 网络安全
关于阿里云 Kubernetes 容器服务(ACK)添加镜像仓库的快速说明
本文介绍了在中国大陆地区因网络限制无法正常拉取 Docker 镜像的解决方案。作者所在的阿里云 Kubernetes 集群使用的是较旧版本的 containerd(1.2x),且无法直接通过 SSH 修改节点配置,因此采用了一种无需更改 Kubernetes 配置文件的方法。通过为 `docker.io` 添加 containerd 的镜像源,并使用脚本自动修改 containerd 配置文件中的路径错误(将错误的 `cert.d` 改为 `certs.d`),最终实现了通过多个镜像站点拉取镜像。作者还提供了一个可重复运行的脚本,用于动态配置镜像源。虽然该方案能缓解镜像拉取问题,
407 3
|
9月前
|
存储 人工智能 Kubernetes
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
|
10月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
9月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
10月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
存储 Kubernetes 关系型数据库
阿里云ACK备份中心,K8s集群业务应用数据的一站式灾备方案
本文源自2024云栖大会苏雅诗的演讲,探讨了K8s集群业务为何需要灾备及其重要性。文中强调了集群与业务高可用配置对稳定性的重要性,并指出人为误操作等风险,建议实施周期性和特定情况下的灾备措施。针对容器化业务,提出了灾备的新特性与需求,包括工作负载为核心、云资源信息的备份,以及有状态应用的数据保护。介绍了ACK推出的备份中心解决方案,支持命名空间、标签、资源类型等维度的备份,并具备存储卷数据保护功能,能够满足GitOps流程企业的特定需求。此外,还详细描述了备份中心的使用流程、控制台展示、灾备难点及解决方案等内容,展示了备份中心如何有效应对K8s集群资源和存储卷数据的灾备挑战。
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
人工智能 Prometheus 监控
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理
本文介绍了在阿里云容器服务 ACK 上部署 NVIDIA NIM,结合云原生 AI 套件和 KServe 快速构建高性能模型推理服务的方法。通过阿里云 Prometheus 和 Grafana 实现实时监控,并基于排队请求数配置弹性扩缩容策略,提升服务稳定性和效率。文章提供了详细的部署步骤和示例,帮助读者快速搭建和优化模型推理服务。
653 7
使用 NVIDIA NIM 在阿里云容器服务(ACK)中加速 LLM 推理

热门文章

最新文章

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版
  • 微服务引擎
  • 推荐镜像

    更多