手册
Mesh 服务治理

Mesh 服务治理

MegaEase Cloud 平台可以托管用户的服务器,支持快速部署并管理常见的软件服务和云原生应用,让用户以此获得不被平台锁定,低成本,高可用的云原生平台。

本文档介绍 MegaEase Cloud 平台的 Service Mesh 基本使用方法,包括:

Mesh 服务治理

EaseMesh作为Mesh产品,是建立在Kubernetes上的服务治理平台,与 MegaEase Cloud 平台无缝结合。所以安装Mesh的前置条件有:有可用Kubernetes集群(一个集群只能安装一个Mesh)

安装 EaseMesh

  1. 进入 Services 页面

  2. 点击 Create Service,选择 EaseMesh

  3. 选择一个可用的Kubernetes集群

  4. 选择 Control Plane Replicas 数目(推荐不多于 Kubernetes 集群 Node 数)

  5. 如果需要 Shadow Service,则将 AddOnsShadowService 选上

  6. 如果需支持 非Java 服务,则可将 Install CoreDN 勾选上

  7. 点击 Create 创建 EaseMesh 服务

安装 Mesh App

  1. 进入 _ Apps_ 页面

  2. 点击 Create App ,选择 Kubernetes App

  3. 点击 Edit From YAML Template

  4. 将 App 的 YAML 拷贝到编辑框(内容见附录,我们用有三个服务的 TakeoutApp 做例子)

  5. 点击 Submit

  6. Cluster Name 选择第1步里安装Mesh的Kubernetes,勾选上 Whether to enable EaseMesh

  7. 点击 Next

  8. 点击 Create

流量示例

我们以 TakeoutApp 为例子来测试流量,其中三个服务的调用顺序是 order-mesh -> restaurant-mesh -> delivery-mesh。

如果要从外部发送流量到第一个服务order-mesh,我们需要为它创建Ingress:

  1. 进入Service/Ingress页面

  2. 点击Create Ingress创建Order服务的流量入口

作为例子,我们填写以下表单:

  • Name: order-public
  • Exact Path: /
  • Backend Service: order-mesh
  1. 点击 Create Ingress

  2. 用 HTTP Client 测试流量

  3. 进入 Apps/Tracings 查看调用链

  4. 进入 Trace/Records 查看调用 Span

灰度发布

  1. 进入 Service/Canary Release 页面
  2. 点击 Create Canary Release

作为例子,我们填写以下表单:

  • Name:beijing
  • Services:delivery-mesh;Canary Version:canary_version
  • Priority: 3
  • Traffic Rules:Header: X-Location; Exact: Beijing
  1. 点击 Create Canary Release

  2. 用 HTTP Client 测试灰度流量

影子服务

  1. 进入 Service/Shadow Service 页面

  2. 点击 Create Shadow Service

作为例子,我们填写以下表单:

  • Name: shadow-order
  • Namespace: takeoutapp
  • Source Service Name: order-mesh
  • Traffic Header Value: pressure-test
  1. 点击 Create Shadow Service

  2. 用 HTTP Client 测试 Shadow 流量

  3. 进入 Apps/Tracings 查看 Shadow 标志的调用链

附录

Takeoutapp完整代码可见:Mesh Example (opens in a new tab).

takeoutapp.yaml:

name: takeoutapp
namespace: takeoutapp
cluster_name: easestack
description: An application comprising of order, restaurant, delivery.
easemesh:
  enable: true
components:
 
# Order
- name: order-mesh
  enable: true
  image: megaease/meshdemo
  image_version: latest
  type: Stateless
  instance_count: 1
  named_ports:
  - name: http
    port: 80
  env_variables:
  - name: SERVICE_NAME
    value: order-mesh
  - name: ZIPKIN_URL
    value: https://monitor.megaease.com:32430/report/application-tracing-log
  resource_require:
    cpu: 200m
    memory: 256Mi
  resource_limit:
    cpu: 1200m
    memory: 2048Mi
  configurations:
  - key: listenPort
    value: "7700"
    use_as_file: /etc/port_config
    is_sub_path: true
  - key: listenAddr
    value: 127.0.0.1
    use_as_file: /etc/address_config
    is_sub_path: true
 
# Restaurant
- name: restaurant-mesh
  enable: true
  image: megaease/meshdemo
  image_version: latest
  type: Stateless
  instance_count: 1
  named_ports:
  - name: http
    port: 80
  env_variables:
  - name: SERVICE_NAME
    value: restaurant-mesh
  - name: ZIPKIN_URL
    value: https://monitor.megaease.com:32430/report/application-tracing-log
  resource_require:
    cpu: 200m
    memory: 1Gi
  resource_limit:
    cpu: 2000m
    memory: 3Gi
  configurations:
  - key: listenPort
    value: "8800"
    use_as_file: /etc/port_config
    is_sub_path: true
  - key: listenAddr
    value: 0.0.0.0
    use_as_file: /etc/address_config
    is_sub_path: true
 
# Delivery
- name: delivery-mesh
  enable: true
  image: megaease/meshdemo
  image_version: latest
  type: Stateless
  instance_count: 1
  named_ports:
  - name: http
    port: 80
  env_variables:
  - name: SERVICE_NAME
    value: delivery-mesh
  - name: ZIPKIN_URL
    value: https://monitor.megaease.com:32430/report/application-tracing-log
  resource_require:
    cpu: 200m
    memory: 256Mi
  resource_limit:
    cpu: 1200m
    memory: 2048Mi
  configurations:
  - key: listenPort
    value: "9900"
    use_as_file: /etc/port_config
    is_sub_path: true
  - key: listenAddr
    value: 127.0.0.1
    use_as_file: /etc/address_config
    is_sub_path: true