• 沒有找到結果。

1.4 对接微服务应用

1.4.5 Mesher 接入 CSE

1.4.5.1 Mesher 简介 什么是 Mesher

Mesher是Service Mesh的一个具体的实现,是一个轻量的代理服务以Sidecar的方式与 微服务一起运行。

Service Mesh是由William Morgan定义:

Service Mesh是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务 拓扑,Service Mesh保证请求可以在这些拓扑中可靠地传输。在实际应用当中,

Service Mesh通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一 起,但应用程序不需要知道它们的存在。

随着云原生应用的崛起,Service Mesh逐渐成为一个独立的基础设施层。在云原生模 型里,一个应用可以由数百个服务组成,每个服务可能有数千个实例,而每个实例可 能会持续地发生变化。服务间通信不仅异常复杂,而且也是运行时行为的基础。管理 好服务间通信对于保证端到端的性能和可靠性来说是非常重要的。

Service Mesh实际上就是处于TCP/IP之上的一个抽象层,假设底层的L3/L4网络能够点 对点地传输字节(同时,也假设网络环境是不可靠的,所以Service Mesh必须具备处 理网络故障的能力)。

从某种程度上说,Service Mesh有点类似TCP/IP。TCP对网络端点间传输字节的机制进 行了抽象,而Service Mesh则是对服务节点间请求的路由机制进行了抽象。Service

Mesh不关心消息体是什么,也不关心它们是如何编码的。应用程序的目标是“将某些 东西从A传送到B”,而Service Mesh所要做的就是实现这个目标,并处理传送过程中 可能出现的任何故障。

与TCP不同的是,Service Mesh有着更高的目标:为应用运行时提供统一的、应用层面 的可见性和可控性。Service Mesh将服务间通信从底层的基础设施中分离出来,让它 成为整个生态系统的一等公民——它因此可以被监控、托管和控制。

为什么要使用 Mesher

● 业务代码无须改造

● 支持老旧应用接入

● 普通应用快速成为云原生应用

● 业务代码零侵入

基本实现原理

Mesher是L7层协议代理,Mesher以Sidecar模式运行在应用所在的Pod内,与Pod共享 网络与存储:

1. Pod中的应用使用Mesher作为http代理,可以自动发现其他服务。

2. Mesher会代替Pod中的应用向注册中心注册应用相关信息,以便让其他应用发 现。

发起一次网络请求的过程中存在微服务消费者consumer和提供者provider,场景如 下:

● 场景一:仅consumer使用Mesher作为Sidecar。

provider需要自己实现服务注册发现,或者使用Java或Go Chassis开发框架,否则 通过Mesher接入的consumer无法发现provider。

应用间的网络请求如下:

consumer-> Mesher -> provider

● 场景二:consumer、provider均使用Mesher作为Sidecar。

此场景无需再使用微服务开发框架。

应用间的网络请求如下:

consumer -> Mesher -> Mesher ->provider

● 场景三:仅provider使用Mesher作为Sidecar consumer需要使用Java或者Go Chassis开发框架。

应用间的网络请求如下:

consumer-> Mesher -> provider

注意事项

应用上云后需要作出一定的配置变更。例如在Mesher所处环境外,consumer在访问 provider时使用http://IP:port/进行访问。在使用Mesher后,使用http://provider:port/

即可进行访问,接入说明将详细讲解。

1.4.5.2 接入说明

须知

不同于微服务开发框架,Mesher的能力是由ServiceStage平台提供的。您必须在 ServiceStage平台创建Mesher组件,才能使用Mesher。

本章节介绍http应用如何通过Mesher接入CSE。由于Mesher支持多语言,因此本章仅 描述通过Mesher接入CSE时的规范要求。具体的代码样例可以参考:

.Net core接入服务网格

PHP接入服务网格

前提条件

已开发好了一个http应用(支持多语言)。

操作步骤

步骤1 修改微服务调用的URL,将URL中的${IP:Port}修改为服务名。

例如调用一个名为“provider”的微服务,API为“/hello”,则调用URL通常为:

http://${IP:Port}/hello。例如:

http://127.0.0.1:80/hello

您需要将调用的URL修改为:

http://provider/hello

步骤2 为微服务调用请求设置http proxy,proxy的地址为:http://${IP:Port}。例如:

http://127.0.0.1:30101

若一个微服务被其他微服务调用,则该微服务的监听地址中必须包含127.0.0.1(监听 端口和其他监听地址不做限制)。

步骤3 在ServiceStage平台创建Mesher组件,请参考创建微服务组件。

须知

Mesher组件名称必须和微服务名称一致。

----结束

1.4.5.3 .Net core 接入服务网格

前提条件

通过ServiceStage部署,可以将.Net应用变为云原生应用,需要符合以下条件:

● 如果使用微服务引擎专业版,需要首先创建Mesher所需的配置,具体操作请参考 为Mesher框架微服务应用配置AK/SK。推荐使用微服务引擎专享版,无需配置。

● 待接入的程序必须支持标准http_proxy环境变量。

说明

本指南讲述的是.Net Core的接入方法,当前支持的.Net Core的版本为:2.0.9版本及以上,3.0 版本以下。

其他语言,如Python、PHP接入,仅需满足前置条件即可。

Demo 说明

用户可以使用dotnet demo示例,示例Demo包含如下两个组件:

● payment service:此组件的API为 /v1/payments,访问该服务会返回一串json。

● order service:此组件的API为 /v1/orders, 当调用/v1/payments接口时,会把 json透传回来。

ServiceStage 部署

部署应用组件前,需要:

● 已经参考创建应用创建应用。

● 已经参考创建环境创建环境,环境包含CCE集群、ELB及微服务引擎等资源。

步骤1 确保order配置文件中payment地址正确。

将payment service命名为“payment” 以代替本地127.0.0.1的寻址方式,端口需要保 留,输入以下命令。

vim order/src/appsettings.json

{ "ServiceEndpoints": {

"PaymentServiceEndpoint": "http://payment:8080"

}, ....

}

步骤2 打包payment和order的镜像。

首先选择上传到某个Region的SWR软件仓库,比如swr.cn-north-1.myhuaweicloud.com,在该Region的软件中心创建组织,比如demo,具体参 考创建组织。

打包镜像命令示例如下:

cd order/src/

sudo docker build . -t swr.cn-north-1.myhuaweicloud.com/demo/ordernet:1.0 cd payment/src/

sudo docker build . -t swr.cn-north-1.myhuaweicloud.com/demo/paymentnet:1.0

步骤3 上传镜像。

● 通过界面上传,请参考上传镜像。

● 通过命令push,示例如下:

docker push swr.cn-north-1.myhuaweicloud.com/demo/ordernet:1.0 docker push swr.cn-north-1.myhuaweicloud.com/demo/paymentnet:1.0

步骤4 创建payment应用组件,请参考创建微服务组件。

1. “选择运行时”:选择“Docker”。

2. “选择框架/服务网格”:选择“Mesher”。

3. “组件名称”:输入“payment”。

说明

应用组件名字要跟步骤1中order配置文件中的地址保持完全一致,所以名字为payment。

步骤5 部署payment组件,请参考部署组件。

1. “实例数量”:设置为1。

2. “镜像”:单击“选择镜像”,选择步骤3中上传的payment组件镜像。

3. 其他参数使用默认配置。

步骤6 创建order组件,请参考创建微服务组件。

1. “选择运行时”:选择“Docker”。

2. “选择框架/服务网格”:选择“Mesher”。

3. “组件名称”:输入“order”。

步骤7 部署order组件,请参考部署组件。

1. “实例数量”:设置为1。

2. “镜像”:单击“选择镜像”,选择步骤3中上传的order组件镜像。

3. “公网访问”:开启公网访问,“监听端口”设置为80。

4. 其他参数使用默认配置。

----结束

结果验证

等待2个组件全部部署完成 单击访问地址,如下图所示。

调用对应接口,返回json串,如下图所示。

查看微服务控制台(请参考维护微服务),会看到已经存在的服务,并且可以进行治 理,具体参考微服务治理。