查看原文
其他

教程|使用 SOFAMosn 搭建 Service Mesh 平台

几米宋 2022-09-06

The following article is from 金融级分布式架构 Author SOFAMosnLab 伯琴

本文转自【金融级分布式架构】公众号

SOFA

Scalable Open Financial Architecture

是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。


本文为《剖析 | SOFAMosn》第二篇。

《剖析 | SOFAMosn》系列由 SOFA 团队和源码爱好者们出品,

项目代号:<SOFA:MosnLab/>,今天开启共建招募,加入方式见底部。

SOFAMosn: https://github.com/alipay/sofa-mosn



本文将介绍如何使用 SOFAMosn 在 SOFAMesh 框架下搭建 Service Mesh 的开发环境,并验证 SOFAMosn 的一些基础路由能力、负载均衡能力等。(点击底部阅读原文,建议 PC 端打开获得更好地阅读体验)

本文介绍的内容将包括 :

  • SOFAMosn 与 SOFAMesh 的关系

  • 准备工作

  • 源码方式部署 SOFAMesh

  • Bookinfo 实验

  SOFAMosn 与 SOFAMesh 的关系

在上文《【剖析 | SOFAMosn 系列】之 SOFAMosn 的诞生和特性》中,我们介绍过,SOFAMosn 是一款采用 Golang 开发的 Service Mesh 数据平面代理,功能定位类似于 Envoy, SOFAMesh 则是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案, SOFAMosn 是 SOFAMesh 的关键组件。目前由于 SOFAMosn 相比 Envoy 做了一些改造,无法在 Istio 下直接使用,所以本文的实验需要在 SOFAMesh 体系中进行。下图是 SOFAMesh 整体框架下,SOFAMosn 的工作示意图。

一、准备工作

本文以 macOS 为例 ,其他环境可以安装对应版本的软件。

1. 安装 hyperkit

先安装 docker-for-mac,之后安装驱动

1.1 安装 docker

  • 下载软件包安装,或者使用如下的命令安装

$ brew cask install docker

1.2 安装驱动

2. 安装 Minikube(也可以购买商业的 k8s 集群)

  • 推荐使用 Minikube v0.28 以上来体验,请参考 https://github.com/kubernetes/minikube

$ brew cask install minikube

3. 启动 Minikube

  • 注意,pilot 至少需要 2G 内存,所以在启动的时候,可以通过加参数的方法给 minikube 添加分配的资源,如果你机器的资源不够,推荐使用商业版本的 k8s 集群。

$ minikube start --memory=8192 --cpus=4 --kubernetes-version=v1.10.0 --vm-driver=hyperkit

4. 安装 kubectl 命令行工具

  • kubectl 是用于针对 k8s 集群运行命令的命令行接口,安装参考 https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl

$ brew install kubernetes-cli

5. 安装 Helm

  • Helm 是一个 k8s 的包管理工具,安装参考 https://docs.helm.sh/using_helm/#installing-helm

$ brew install kubernetes-helm

二、源码方式部署 SOFAMesh

1. 下载 SOFAMesh 源码

$ git clone git@github.com:alipay/sofa-mesh.git $ cd sofa-mesh

2. 通过 Helm 安装 SOFAMesh

  • 使用 Helm 安装之前,需要先查看 Helm 的版本

$ helm version

如果版本在 2.10 之前,需要手动 安装 istio 的 CRD,否则不需要。(在笔者写此文的时候,安装的 helm 已经是v2.11.0,所以下面的步骤可以直接跳过)

$ kubectl apply -f install/kubernetes/helm/istio/templates/crds.yaml $ kubectl apply -f install/kubernetes/helm/istio/charts/certmanager/templates/crds.yaml
  • 之后 使用 Helm 安装 ISTIO 有两种方式,这里推荐使用第一种,如果第一种不 work,可以尝试第二种


方式一:使用  helm template 安装

$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml $ kubectl create namespace istio-system $ kubectl apply -f $HOME/istio.yaml

如果安装成功后,需要卸载的话:

$ kubectl delete -f $HOME/istio.yaml

方式二:使用  helm install 安装

$ kubectl apply -f install/kubernetes/helm/helm-service-account.yaml $ helm init --service-account tiller $ helm install install/kubernetes/helm/istio --name istio --namespace istio-system

如果安装成功后,需要卸载的话:

$ helm delete --purge istio

3. 验证安装

istio-system 命名空间下的 pod 状态都是 Running 时,说明已经部署成功

三、BookInfo 实验

BookInfo 是一个类似豆瓣的图书应用,它包含四个基础服务

  • Product Page:主页,由 python 开发,展示所有图书信息,它会调用 Reviews 和 Details 服务

  • Reviews:评论,由 java 开发,展示图书评论,会调用 Ratings 服务

  • Ratings:评分服务,由 nodejs 开发

  • Details:图书详情,由 ruby 开发

1. 部署 BookInfo 应用并注入 SOFAMosn

详细过程可以参考 https://istio.io/docs/examples/bookinfo/

  • 注入 SOFAMosn

$ kubectl label namespace default istio-injection=enabled
  • 部署 Bookinfo

$ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
  • 验证部署是否成功

  • 等待所有的 pods 等成功运行起来

2. 访问 BookInfo 服务

  • 开启 gateway 模式

  • 验证 gateway 是否生效

  • 观察页面情况

访问 http://$GATEWAY_URL/productpage ,正常的话通过刷新会看到如下所示 BookInfo 的界面,其中 Book Reviews 有三个版本,刷新后依次会看到(可以查看 samples/bookinfo/platform/kube/bookinfo.yaml 中的配置发现为什么是这三个版本)

  • 版本一 的界面

  • 版本二 的界面


  • 版本三 的界面

3. 验证 MOSN 按 version 路由能力

首先为 BookInfo 的 service 创建一系列的 destination rules

$ kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml

指定 reviews 服务只访问 v1 版本

$ kubectl apply -f samples/bookinfo/networking/virtual-service-all-v1.yaml


再次访问 http://$GATEWAY_URL/productpage

发现 reviews 固定在如下版本一的页面不再变化


4. 验证 MOSN 按 weight 路由能力

我们通过下面操作将 v1 和 v3 版本各分配 50% 的流量

$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-50-v3.yaml

再次访问 http://$GATEWAY_URL/productpage

这次 v1 和 v3 各有 1/2 几率出现

5. 验证 MOSN 按照特定 header 路由能力

BookInfo 系统右上角有一个登陆的入口,登陆以后请求会带上 end-user 这个自定义,值是 user name,Mosn 支持根据这个 header 的值来做路由。比如,我们尝试将 jason 这个用户路由到 v2 版本,其他的路由到 v1 版本 (用户名和密码均是:jason,为什么是这个用户可以查看对应的 yaml 文件)

$ kubectl apply -f samples/bookinfo/networking/virtual-service-reviews-test-v2.yaml


访问 http://$GATEWAY_URL/productpage  时:

  • 以 jason 身份登陆,会看到 v2 版本



  • 以其他身份登陆,始终在 v1 版本


  欢迎加入 <SOFA:MosnLab/>,参与 SOFAMosn 源码解析


我们会逐步详细介绍每部分的代码设计和实现,预计会按照如下的目录进行:


  • 【已完成】使用 SOFAMosn 搭建 Service Mesh 平台

  • 【已领取】TLS 支持

  • 【已领取】网络层,协议层扩展点

  • 【已领取】负载均衡原理剖析

  • 【已领取】网络通信与 IO 处理

  • 【待领取】配置文件解析与API模型

  • 【待领取】Istio 对接

  • 【待领取】协议处理及多协议扩展机制

  • 【待领取】跨协议转发引擎机制实现原理剖析

  • 【待领取】后端链接管理,健康检查

  • 【待领取】路由支持及扩展机制剖析

  • 【待领取】无损重启/升级

  • 【待领取】内存复用剖析


领取方式:

直接回复本公众号想认领的文章名称,我们将会主动联系你,确认资质后,即可加入<SOFA:MosnLab/>,It's your show time!


相关链接:

SOFA 文档: http://www.sofastack.tech/

SOFA: https://github.com/alipay

SOFAMosn:

https://github.com/alipay/sofa-mosn

延伸阅读:

大规模微服务架构下的 Service Mesh 探索之路

开源 | Service Mesh 数据平面 SOFAMosn 深层揭秘

【剖析 | SOFAMosn】系列之 SOFAMosn 的诞生和特性总览

长按关注,获取分布式架构干货

欢迎大家共同打造 SOFAStack https://github.com/alipay

点击【阅读原文】跳转到ServiceMesher网站上浏览可以查看文中的链接。

  • SOFAMesh(https://github.com/alipay/sofa-mesh)基于Istio的大规模服务网格解决方案

  • SOFAMosn(https://github.com/alipay/sofa-mosn)使用Go语言开发的高性能Sidecar代理

合作社区

参与社区

以下是参与ServiceMesher社区的方式,最简单的方式是联系我!

  • 加入微信交流群:关注本微信公众号后访问主页右下角有获取联系方式按钮,添加好友时请注明姓名-公司

  • 社区网址:http://www.servicemesher.com

  • Slack:https://servicemesher.slack.com (需要邀请才能加入)

  • GitHub:https://github.com/servicemesher

  • Istio中文文档进度追踪:https://github.com/servicemesher/istio-official-translation

  • Twitter: https://twitter.com/servicemesher

  • 提供文章线索与投稿:https://github.com/servicemesher/trans


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存