背景
在阿里云服务网格ASM中,支持通过ArgoCD来进行应用程序的发布、更新,简化了运维成本。开发者提交YAML编写的应用程序定义(Deployment、Service)和流量管理(VirtualService、Gateway、DestinationRule)到Git仓库。ArgoCD会监控集群中应用程序当前的Deployment、Service、VirtualService等资源的状态,与Git仓库中的资源期望编排进行比较,以Git仓库中的内容为基准。并且能够在 Git 仓库更改时自动/手动去同步和部署应用程序。
2. 前提条件
-
创建Istio版本为1.12.4.50或更高版本的阿里云服务网格 (ASM) 企业版实例;
-
创建容器服务Kubernetes (ACK) 集群;
-
将ACK集群添加到ASM实例;
-
已安装ArgoCD;
-
Git仓库;
3. 指导步骤
-
安装ArgoCD
-
启用ASM的数据面KubeAPI访问能力
-
创建ASM网关
-
将ACK集群添加到ASM实例
-
通过ArgoCD部署Istio资源
-
GitOps流程演示
3.1 安装 ArgoCD
如果已经安装了ArgoCD,请跳过此步骤。ArgoCD的安装和部署可以参考它的 主页。
阿里云容器服务(ACK)应用中心具有内置的ArgoCD功能,也可以避免手动安装ArgoCD。ACK应用程序中心允许检查应用程序状态,可以使用Git仓库和Helm chart将应用程序版本部署到Kubernetes集群。可以回滚和发布应用程序版本。
3.2 启用ASM的数据面KubeAPI访问能力
注意:由于阿里云服务网格(ASM)是一个托管istio兼容的控制平面,ArgoCD管理的服务网格(ASM)控制平面和数据平面(Kubernetes容器服务(ACK))不在同一个Kubernetes集群环境中。我们需要在ASM中启用“数据平面KubeAPI访问”,然后ArgoCD才能像访问ACK集群的资源一样访问ASM集群中的Istio资源。
在托管模式下,服务网格ASM和ArgoCD所管理的容器服务ACK并不处于同一个集群环境,需要启用阿里云服务网格ASM特有的“数据面KubeAPI访问能力”后,使得ArgoCD能像访问ACK集群的资源一样,访问ASM集群中的Istio资源。在阿里云服务网格 ASM 控制台中,如下图所示,启用该能力。
3.3. 创建ASM网关
在阿里云服务网格ASM控制台 -> ASM网关 -> 创建ASM网关处,创建一个ASM网关,提供80和443端口。
3.4 将ACK群集作为外部群集添加到ArgoCD(可选)
如果ArgoCD和ASM管理的ACK集群不在同一个集群中,我们需要将ACK集群添加到ArgoCD。
ACK集群可以使用Kubernetes secret作为外部集群添加到ArgoCD中,tlsClientConfig可以从ACK KubeConfig文件中获取:
caData=证书颁发机构数据,certData=客户端证书数据,keyData=客户端密钥数据
3.5 通过ArgoCD应用程序部署istio资源
Istio资源现在可以定义为Kubernetes清单,并推送到用于部署应用程序k8s编排的Git仓库中。
3.5.1 Create APP
这里我们使用Istio book-info示例,Git仓库地址为https://github.com/AliyunContainerService/asm-labs.git。您先将此仓库Fork到您本地
分支选择argocd-asm,Path为argo-cd/bookinfo。
3.5.2 查看应用状态
创建完成后如下所示:
点击bookinfo可查看创建的资源状态。
3.5.3 在阿里云控制台查看资源状态
在ASM控制台可以看到创建的资源, 如下所示创建出的VirtualService。
可以点击bookinfo名称查看具体的YAML内容。
在 ACK控制台也可以看到创建的资源, 如下所示创建出的Deployment。
3.5.4 访问测试
从ASM控制台获取ASM网关的地址,在浏览器输入http://{ASM-Gateway-IP}/productpage进行访问
因为Istio book-info的reviews有3个版本,我们现在还未指定版本,每次刷新,右侧数据显示会不一样。我们之后通过GitOps的流程进行指定。
3.6 GitOps Demo
我们通过配置流量规则,正常只展示v1版本的reviews,只有当登录用户名为jason时,显示v2版本。并且将Deployment reviews-v1的副本修改为2。添加如下内容到我们的Git仓库的argo-cd/bookinfo/istio-route.yaml文件中。并修改argo-cd/bookinfo/bookinfo.yaml的reviews-v1 Deployment副本数为2。
3.6.1 修改本地文件
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route:
- destination:
host: reviews
subset: v1
---
3.6.2 Commit & Push
$ git add *
$ git commit -m "reviews-v1"
reviews-v1
2 files changed, 22 insertions(+), 22 deletions(-)
$ git push
3.6.3 同步
如果开启了自动同步,ArgoCD会自动同步Git的配置到集群,如果没有,可以手动点一下同步按钮。
如下所示, 因为文件存在了变更, Argo控制台中会自动给出OutOfSync状态的提示, 点击SYNC按钮完成同步。
同步之后, 在ASM控制台可以查看同步之后创建的资源, 如下所示创建出的VirtualService。
可以点击reviews名称查看具体的YAML内容。
在 ACK控制台也可以看到更新之后的资源, 如下所示 Deployment reviews-v1 副本数更新为2.
3.6.4 效果查看
根据路由规则,在未登录状态下,访问http://{ASM-Gateway-IP}/productpage,固定为review-v1版本。
reviews-v1的副本数也生效为2。
如果我们使用jason为用户名(任意密码)登录后,看到的是v2版本。
4. 总结
实践中结合阿里云服务网格ASM的最新特性,使用ArgoCD将资源编排以GitOps方式进行管理,简化了运维管理成本。