Istio生态系统ON ASM(4):在阿里云服务网格ASM中集成阿里云云效Flow实现DevOps

本文涉及的产品
云效 DevOps 流水线,基础版人数 不受限
云效 DevOps 代码管理,基础版人数 不受限
云效 DevOps 制品仓库,基础版人数 不受限
简介: 在阿里云服务网格(简称 ASM)企业版实例中,兼容 Istio,支持多个 Kubernetes 集群统一流量管理,为容器和虚拟机应用服务提供一致性的通信控制。基于服务网格最新的“数据面KubeAPI访问"能力,能够通过数据面集群的kubeconfig来管理Istio资源。和阿里云Flow等云效工具集成后,可以享受DevOps、GitOps带来的应用发布的便利性,还能够利用Istio细粒度


在阿里云服务网格(简称 ASM)企业版实例中,兼容 Istio,支持多个 Kubernetes 集群统一流量管理,为容器和虚拟机应用服务提供一致性的通信控制。基于服务网格最新的“数据面KubeAPI访问"能力,能够通过数据面集群的kubeconfig来管理Istio资源。和阿里云Flow等云效工具集成后,可以享受DevOps、GitOps带来的应用发布的便利性,还能够利用Istio细粒度的流量管控能力来实现蓝绿发布,保障上线的稳定性。


前提条件

  • 创建Istio版本为1.12.4.50或更高版本的阿里云服务网格 (ASM) 实例。

  • 创建容器服务Kubernetes (ACK) 集群。

  • 将ACK集群添加到ASM实例。

  • 启用阿里云Flow服务。


云效提供了蓝绿发布的能力支持。从而让用户可以更安全的基于 Istio 的流量管理策略实现应用的安全发布。





实践1:流水线部署应用

目标:以Istio book-info示例为例,我们将首页的标题文字进行更换。代码提交后,执行阿里云云效流水线,生成镜像,自动将应用的流量管理(VirtualService、Gateway、DestinationRule)相关的资源创建或更新到阿里云服务网格ASM集群中,将应用程序编排(Deployment、Service)创建或更新到阿里云容器服务平台ACK集群中。


创建流水线如下。流水线源配置为GitHub仓库,测试地址为https://github.com/AliyunContainerService/asm-labs,您也可以fork出来,然后进行个性化修改。分支选择flow-demo

执行的步骤如下:


1. 流水线流程配置

将镜像仓库地址为替换为您的地址空间:registry.cn-hangzhou.aliyuncs.com/{your_name_space}/productpage:${DATETIME}。这里我们使用DATETIME作为版本号。Dockerfile路径为productpage/Dockerfile。更多的详情可参考:如何通过云效进行K8s部署


2. webhook(可选)

您可以配置webhook来设置当代码变更时,自动触发流水线。

3. 添加数据面集群并注入Sidecar代理

在阿里云服务网格ASM控制台,进入ASM实例后,在集群与工作负载管理中,添加希望流水线配置的ACK容器服务实例。并在全局命名空间中,为选定的命名空间(如default)启用Sidecar自动注入。


4. 创建ASM网关

为了方便的访问我们流水线部署出的应用程序,需要创建ASM网关来作为访问入口,端口设置为80。


5. 执行流水线


6. 查看部署效果

在ACK集群中,确认镜像能够成功拉去并且启动正常,如拉取个人私有镜像失败可参考使用免密组件拉取容器镜像

复制前面创建的ASM网关的地址,在浏览器中输入http://{ASM网关地址}/productpage,可以看到我们修改的标题已生效。

当前显示界面固定为reviews-v1版本。


实践2:蓝绿发布

阿里云服务网格ASM和云效集成,提供了蓝绿发布的能力。从而让用户可以更安全的基于 Istio 的流量管理策略实现应用的安全发布。

目标:在完成实践1:流水线部署应用的前提下,通过蓝绿发布,将reviews版本从原来的v1更新为v2版本。

1. 创建新的流水线

如实践1配置流水线源,创建阶段Kubernetes蓝绿发布。这里我们设置镜像为reviews-v2版本的镜像:docker.io/istio/examples-bookinfo-reviews-v2:1.16.4。灰度初始化流量为0%,并且只有待特定cookie标识的用户能够访问到蓝绿版本。



2. 执行

在阿里云云效Flow中,蓝绿发布前需要明确指明使用哪个版本的工作负载,将其他的版本的工作负载全部清空。确保流量只流入稳定版(reviews-v1)。




此时,在阿里云服务网格ASM控制台查看虚拟服务VIrtualService状态。此时状态如下:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: reviews
  namespace: default
spec:
  hosts:
    - reviews
  http:
    - match:
        - headers:
            cookie:
              regex: ^(.*?;)?(gray=true)(;.*)?$
      route:
        - destination:
            host: reviews
            subset: v20220620190631
    - route:
        - destination:
            host: reviews
            subset: v1
          weight: 100
        - destination:
            host: reviews
            subset: v20220620190631


目标规则如下所示:

apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: reviews
  namespace: default
spec:
  host: reviews
  subsets:
    - labels:
        version: v1
      name: v1
    - labels:
        version: v20220620190631
      name: v20220620190631


3. 测试验证

因为reviews服务是由后端服务productpage来调用的,不方便携带特定token来进行灰度测试。

修改header中cookie设置,改为使用end-user的登陆信息,设定只要登陆用户名称为asm,则显示灰度版本。


复制前面创建的ASM网关的地址,在浏览器中输入http://{ASM网关地址}/productpage,点击右上角进行登录,输入用户名称为asm,密码。如果是未登录状态,则显示v1版本的reviews信息。



4. 继续发布

在通过了灰度版本的测试之后,将全部的流量转为新版本(reviews-v2)。

点击继续发布,完成发布。





发布完成后,未登录时也显示reviews-v2的版本



发布完成后,reviews VirtualService的状态


总结

在 Kubernetes 中 Service 与多个版本的 Deployment 实例通过 Label进行关联。蓝绿发布开始,阿里云Flow会基于当前的 Deployment 实例创建一个新版本的应用 Deployment 实例。等待蓝环境创建完成后通过更新 阿里云服务网格ASM的VirtualService和DestinationRule 资源对象,进一步控制流量与特定版本Deployment实例之间的路由策略。

根据发布设置,可以修改 VirtualService 确定蓝/绿环境的流量权重。用户也可以设置灰度标,确定哪些流量会直接进入到蓝环境中。在人工验证完成后,完成发布将所有流量切流到蓝环境,并且将原有的绿环境实例移除。

作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月1日起,阿里云服务网格ASM正式推出商业化版本, 提供了更丰富的能力、更大的规模支持及更完善的技术保障,更好地满足客户的不同需求场景, 详情可见产品介绍:https://www.aliyun.com/product/servicemesh

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
2月前
|
云安全 人工智能 安全
Dify平台集成阿里云AI安全护栏,构建AI Runtime安全防线
阿里云 AI 安全护栏加入Dify平台,打造可信赖的 AI
2688 166
|
3月前
|
弹性计算 Devops Shell
用阿里云 DevOps Flow 实现 ECS 部署自动化:从准备到落地的完整指南
阿里云 DevOps Flow 是一款助力开发者实现自动化部署的高效工具,支持代码流水线构建、测试与部署至ECS实例,显著提升交付效率与稳定性。本文详解如何通过 Flow 自动部署 Bash 脚本至 ECS,涵盖环境准备、流水线搭建、源码接入、部署流程设计及结果验证,助你快速上手云上自动化运维。
271 0
|
4月前
|
弹性计算 运维 安全
云迁移最佳实践:HyperMotion助中小企业高效上云,阿里云工具集深度集成三方迁移工具
中小企业上云需求强烈,但面临缺乏了解、无合适方案及成本过高等挑战。为解决这些问题,推出“云迁移HyperMotion阿里云集成版”,提供三步上云、自助迁移、自动适配等能力,助力企业高效、低成本完成迁移。
144 0
|
8月前
|
Docker 容器 Perl
云效flow构建docker镜像更换apt源为阿里镜像源
在 Dockerfile 中添加命令以更换 Debian 源为阿里云镜像,加速容器内软件包下载。核心命令通过 `sed` 实现源地址替换,并更新 apt 软件源。其中 `cat` 命令用于验证替换是否成功,实际使用中可删除该行。
1652 32
|
3月前
|
监控 Kubernetes 安全
Istio 服务网格技术详解与实践指南
本文档全面介绍 Istio 服务网格的核心概念、架构设计和实践应用。作为云原生领域的关键技术,Istio 提供了透明的、语言无关的服务间通信解决方案,实现了流量管理、安全加固和可观测性等功能。本文将深入探讨其数据平面与控制平面架构、Envoy 代理机制、流量治理策略以及与 Kubernetes 的深度集成,帮助开发者构建可靠、安全的分布式系统。
258 5
|
运维 监控 安全
Cisco ISR 4000 Series IOS XE 17.18.1a ED 发布 - 思科 4000 系列集成服务路由器 IOS XE 系统软件
Cisco ISR 4000 Series IOS XE 17.18.1a ED - 思科 4000 系列集成服务路由器 IOS XE 系统软件
123 0
|
3月前
|
机器学习/深度学习 运维 算法
【EI复现】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)
【EI复现】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)
105 1
|
5月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
175 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
5月前
|
机器学习/深度学习 人工智能 监控
CI/CD与模型监控平台集成MLOps系统实现的全面路径
MLOps是机器学习模型在生产环境中持续优化、部署和维护的关键。通过CI/CD流水线和模型监控平台的结合,可以大大提高模型开发和运维的效率,实现高效、稳定的模型服务。随着AI技术的快速发展,MLOps将在企业级AI应用中发挥越来越重要的作用。
CI/CD与模型监控平台集成MLOps系统实现的全面路径