service-mesh-应用接入
更新时间:2020-03-24
准备工作
服务网格(Service Mesh)是致力于解决服务间通讯的基础设施层,用于处理服务间通讯。Service Mesh 通常是通过一组轻量级网络代理(Sidecar proxy),与应用程序代码部署在一起来实现,而无需感知应用程序本身。
我们提供了简单的demo样例可供您快速开始了解并体验我们的平台:服务样例下载。
创建服务提供者
这里以go语言为例,在本地创建服务提供者应用,并将自身服务注册到微服务平台的服务注册中心,以便服务消费者调用。
- 创建web应用,该应用监听在9091端口,供服务消费者调用
// 服务提供者健康检查接口
http.HandleFunc("/health", healthCheck)
// 服务提供者功能接口
http.HandleFunc("/echo", echo)
if err := http.ListenAndServe(":9091", nil); err != nil {
log.Fatalln("ListenAndServe: ", err)
}
- 代码编译
GOOS=linux GOARCH=amd64 go build
创建服务消费者
这里以go语言为例,在本地创建服务消费者应用,并将自身服务注册到微服务平台的服务注册中心,同时,该应用可以发现provider服务,并完成调用。
- 创建web应用,该应用监听在9090端口,供外部访问
// 消费者健康检查接口
http.HandleFunc("/health", healthCheck)
// 外部访问接口,该接口调用mesh-provider的echo接口并返回处理结果
http.HandleFunc("/echo", echo)
if err := http.ListenAndServe(":9090", nil); err != nil {
log.Fatalln("ListeneAndServe error: ", err)
}
- 在代码中添加调用链相关的头
TRACE_HEADERS = []string{
"X-B3-SpanId",
"X-B3-TraceId",
"X-B3-ParentSpanId",
"X-B3-Sampled",
"X-B3-Flags",
"X-Ot-Span-Context",
"X-Request-Id",
"X-Method",
"X-ParentMethod",
}
注意: Mesh 的调用链通过header传递实现。如果用户想要得到不同服务之间的调用关系,需要在访问其他服务时,带上父调用的相关调用链头,如果不使用调用链和拓扑功能,这里可以不进行添加。
- 代码编译
GOOS=linux GOARCH=amd64 go build
CNAP平台部署
- 制作镜像
以consumer为例,制作镜像所需的Dockerfile参考如下:
# 基础镜像,用户可选使用
FROM hub.baidubce.com/cnap-public/mesh-base:ubuntu
# 添加编译好的二进制文件
COPY mesh-consumer /usr/local/bin
# 添加启动命令
CMD ["/usr/local/bin/mesh-consumer", "-a", "http://mesh-provider:9091"]
使用以上Dockerfile完成镜像编译:
docker build -t hub.baidubce.com/[namespace]/[ImageName]:[镜像版本] .
注意: namespace为环境准备中创建的命名空间的名称;ImageName由用户指定所创建镜像的名称。
将编译完成的镜像推送到镜像仓库:
docker push hub.baidubce.com/[namespace]/[ImageName]:[镜像版本]
- 使用CNAP平台进行部署
请参考CNAP操作手册中的服务部署部分。
注意:针对mesh类型的应用,需要在控制台填写mesh服务的端口。同时,填写的应用名需要与服务名保持一致。
3.检查部署结果
成功部署后将在CNAP平台 – 服务列表页中看到注册上的服务信息
- 服务验证 可以通过调用以下接口,观察调用返回是否符合预期
curl xx.xx.xx.xx:9090/echo?value=helloworld
- 路由
Service Mesh应用支持路由功能,无需用户进行业务改造,使用手册参考微服务管理中的路由部分。