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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
27天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
47 2
|
13天前
|
Devops jenkins 测试技术
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第41天】在软件开发的世界中,快速迭代和高效交付是企业竞争力的关键。本文将带你走进DevOps的核心实践——自动化部署与持续集成,揭示如何通过它们提升开发流程的效率与质量。我们将从DevOps的基本理念出发,逐步深入到具体的技术实现,最终展示一个实际的代码示例,让理论与实践相结合,为你的开发旅程提供清晰的指引。
25 4
|
18天前
|
Kubernetes 大数据 调度
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,本文介绍了如何在阿里云ACK集群中部署Kmesh作为Sidecarless数据面并连接ASM控制面。
|
19天前
|
存储 监控 Devops
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
DevOps实践:持续集成/持续部署(CI/CD)的实战指南
|
28天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
54 4
|
22天前
|
运维 Devops jenkins
DevOps实践之持续集成与持续交付
【10月更文挑战第32天】在软件开发的快节奏世界中,DevOps已经成为提升效率和质量的关键策略。通过将开发(Development)和运维(Operations)紧密结合,DevOps促进了更快速的软件发布和更高的可靠性。本文将深入探讨DevOps的核心组成部分——持续集成(CI)和持续交付(CD),并展示如何通过实际代码示例实现它们,以帮助团队构建更加高效和稳定的软件发布流程。
|
29天前
|
Kubernetes 调度 容器
使用Kmesh作为阿里云服务网格ASM Sidecarless模式数据面
阿里云服务网格ASM支持Sidecar和Sidecarless两种模式,其中Sidecarless模式如Istio Ambient、ACMG和Kmesh等,可减少延迟和资源消耗。Kmesh基于eBPF技术,通过内核空间拦截流量,结合Waypoint Proxy处理L7流量,实现高效的服务治理。本文介绍了如何在阿里云ACK集群中部署Kmesh并连接ASM控制面,包括安装步骤、检查服务状态和流量调度示例。
|
1月前
|
运维 安全 Devops
DevOps实践:持续集成与持续部署(CI/CD)的自动化之路
【10月更文挑战第22天】在软件交付的快速迭代中,DevOps文化和实践成为企业加速产品上市、保证质量和提升客户满意度的关键。本文将通过一个实际案例,深入探讨如何利用持续集成(Continuous Integration, CI)和持续部署(Continuous Deployment, CD)实现软件开发流程的高效自动化,包括工具选择、流程设计以及问题解决策略。我们将一起探索代码从编写到部署的全自动化旅程,揭示其对企业运维效率和产品质量所带来的深远影响。
|
28天前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
41 2
|
2月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
58 8