导语

TSF Mesh 微服务平台(Tencent Service Mesh Framework,以下简称 TSF Mesh)是一个基础设施层,用于处理服务间的通信。TSF Mesh 是由一系列轻量级的网络代理(又称 Sidecar)组成,这些代理与应用程序部署在一起,通过劫持应用流量进行服务通信,而应用程序不感知 Sidecar 的存在。TSF Mesh 可以支持不同框架、不同语言的应用程序,包括前端应用以及后端应用,以统一的方式运行在腾讯微服务平台 TSF(Tencent Service Framework)中。

本文将通过一个 java 应用和一个基于 nginx 的静态应用,来介绍如何通过 TSF Mesh 进行前后端应用的统一托管。

Demo下载地址:

(复制链接到浏览器查看详情)

https://cloud.tencent.com/document/product/649/30436

王维

多年开发架构经验,熟悉电商、支付业务。熟悉微服务架构的开发与落地。目前主要聚焦于微服务、消息队列及周边中间件。

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(1)

一、环境准备

首先,需要登录 TSF 控制台,进行相关环境与资源的创建。

1.应用

单击【应用管理】>【新建应用】按钮。填写应用信息,选择部署方式【容器部署】,选择应用类型【Mesh应用】,点击【提交】按钮,创建应用。

2.集群

单击【集群】>【新建集群】按钮。填写集群信息,选择容器类型【容器集群】,点击【提交】按钮,创建容器集群,然后导入云主机。

3.部署组

单击【部署组】>【新建部署组】按钮。填写部署组信息,并单击【保存&下一步】按钮,创建部署组。具体操作步骤,请参考TSF官方操作指南中【环境与资源管理】及【应用部署】部分。

>>>复制链接到浏览器查看详情:

https://cloud.tencent.com/document/product/649/36499

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(2)

二、构建 java 应用镜像

将应用程序打包,添加配置文件,编写 Dockerfile 文件,构建镜像,推送到指定镜像仓库。

1.应用打包

以 java 程序为例说明程序包: userService.tar.gz,包内文件结构如下:文件结构

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(3)

文件说明

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(4)

文件示例

userService/apis/user.yaml

openapi: 3.0.0 info: version: "1.0.0" title: user service paths: /api/v6/user/create: get: responses: '200': description: OK '401': description: Unauthorized '402': description: Forbidden '403': description: Not Found /api/v6/user/account/query: get: responses: '200': description: OK '401': description: Unauthorized '402': description: Forbidden '403': description: Not Found /health: get: responses: '200': description: OK '401': description: Unauthorized '402': description: Forbidden '403': description: Not Found

spec.yaml

apiVersion: v1 kind: Application spec: services: - name: user # 服务名 ports: - targetPort: 8089 # 服务监听端口 protocol: http # 目前支持 HTTP、HTTP2 和 gRPC healthCheck: path: /health # 健康检查 URL

<左右滑动查看更多>

⚠️ 注意

healthCheck 是健康检查的接口,请确认本地调用curl -i -H 'Host: local-service' {ip}:{Port}/health能返回200,否则,健康检查失败会导致此服务实例变为离线状态,其它服务将无法调用该服务实例;如果不提供此健康检查接口,sidecar 会通过 TCP 的方式探测 targetPort 是否连通来判断此服务实例是否健康。

Host: local-service是代理加的 header,业务如果对 Host 有检查(如 Nginx 配置的 server_name),则需将 local-service 加到白名单。

start.sh

#!/bin/bash mkdir -p /opt/tsf/app_config/apis cp /root/app/userService/spec.yaml /opt/tsf/app_config/ cp -r /root/app/userService/apis /opt/tsf/app_config/ cd /root/app/userService/ java -jar tsf-user-demo-1.0-SNAPSHOT.jar

<左右滑动查看更多>

文件打包

将以上文件放入到文件夹(如:userService),通过以下命令,将上述文件打包成tar.gz(如:userService.tar.gz)。

tar -zcvf userService.tar.gz userService/

如果是在 mac 操作系统上则需加 COPYFILE_DISABLE=1 参数去除掉特有的隐藏文件。

COPYFILE_DISABLE=1 tar -zcvf userService.tar.gz userService/

<左右滑动查看更多>

1.Dockerfile

在应用程序包同级目录中新建 dockerfile 文件,如下:

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(5)

Dockerfile 文件内容示例:

FROM centos:7 RUN yum update -y && yum install -y java-1.8.0-openjdk # 设置时区。这对于日志、调用链等功能能否在 TSF 控制台被检索到非常重要。 RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/Shanghai" > /etc/timezone RUN mkdir /root/app/ # 其中 userService.tar.gz 是 Mesh 应用压缩包 ADD userService.tar.gz /root/app/ # 指定到jar的当前目录执行 WORKDIR /root/app/userService ENTRYPOINT ["bash", "start.sh"

<左右滑动查看更多>

⚠️ 注意

基础镜像,请根据具体情况进行替换

3.构建镜像

打开命令行工具,进入程序包所在文件夹。执行如下命令构建镜像:

docker build . -t ccr.ccs.tencentyun.com/{tsf_uid}/{app_name}:{tag

<左右滑动查看更多>

4.推送镜像

登录镜像仓库

docker login --username={user_name} ccr.ccs.tencentyun.com

<左右滑动查看更多>

推送镜像

docker push ccr.ccs.tencentyun.com/{tsf_uid}/{app_name}:{tag}

<左右滑动查看更多>

⚠️ 注意

ccr.ccs.tencentyun.com/

{tsf_uid}/{app_name}到控制台镜像仓库对应的应用记录中复制即可。

{tsf_uid}为tsf登录账号对应的uid,{app_name}为应用名称,与TSF控制台应用名称保持一致,{tag}为镜像的版本,自行指定即可(如:v1)。

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(6)

三、构建 nginx 静态应用镜像

1.应用打包

以 tsf_demo_nginx_mesh 程序为例说明,文件结构如下。文件结构

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(7)

文件说明

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(8)

文件示例

apis/ngnix-service.yaml

openapi: 3.0.0 info: version: "1.0.0" title: ngnix-service paths: /webs/hello.html: get: responses: '200': description: OK '401': description: Unauthorized '402': description: Forbidden '403': description: Not Found /webs/health.html: get: responses: '200': description: OK '401': description: Unauthorized '402': description: Forbidden '403': description: Not Found

spec.yaml

apiVersion: v1 kind: Application spec: services: - name: ngnix-service # 服务名 ports: - targetPort: 80 # 服务监听端口 protocol: http # 目前支持 HTTP、HTTP2 和 gRPC healthCheck: path: /webs/health.html # 健康检查 URL

<左右滑动查看更多>

start.sh

#!/bin/bash # 拷贝配置文件 mkdir -p /opt/tsf/app_config/apis cp /usr/share/nginx/html/spec.yaml /opt/tsf/app_config/ cp -r /usr/share/nginx/html/apis /opt/tsf/app_config/ # 启动 nginx nginx -g "daemon off;"

<左右滑动查看更多>

2.Dockerfile

在应用程序文件夹同级目录中新建 Dockerfile 文件,如下:

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(9)

Dockerfile 文件内容示例:

# 基础镜像 FROM nginx #将本地文件拷贝到镜像中,tsf_demo_nginx_mesh 文件夹名称可自行定义 COPY ./tsf_demo_nginx_mesh /usr/share/nginx/html/ WORKDIR /usr/share/nginx/html/ RUN chmod x start.sh ENTRYPOINT ["bash","./start.sh"]

<左右滑动查看更多>

3.构建镜像

打开命令行工具,进入程序包所在文件夹。执行如下命令构建镜像:

docker build . -t ccr.ccs.tencentyun.com/{tsf_uid}/{app_name}:{tag}

<左右滑动查看更多>

4.推送镜像

登录镜像仓库

docker login --username={user_name} ccr.ccs.tencentyun.com

<左右滑动查看更多>

推送镜像

docker push ccr.ccs.tencentyun.com/{tsf_uid}/{app_name}:{tag}

<左右滑动查看更多>

5.nginx 配置说明

以上为nginx默认配置使用方式,如需要更改默认配置(如:端口号、重定向等),请自行修改对应的 nginx.conf 文件,并一起打包到镜像中。nginx.conf 文件示例:

user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main 'remote_addr:$remote_addr - remote_user:$remote_user [$time_local] "$request" ' 'status:$status request_time:$request_time body_bytes_sent:$body_bytes_sent http_referer:"$http_referer" ' 'http_user_agent:"$http_user_agent" http_x_forwarded_for:"$http_x_forwarded_for" ' 'upstream_status:$upstream_status upstream_addr:$upstream_addr upstream_response_time:$upstream_response_time'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; client_max_body_size 20m; server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; } location /baidu { proxy_pass http://www.baidu.com/; } # 通过服务名访问后端服务 user location /user { proxy_pass http://user/api/v6/user/account/query; proxy_http_version 1.1; } # 通过服务名访问后端服务 user location /health { proxy_pass http://user/health; proxy_http_version 1.1; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } }

<左右滑动查看更多>

⚠️ 注意

如有需要,可以通过tsf中的服务名称进行对后端服务的访问,如上述 location /user 配置。

在 Dockerfile 中将上述 nignx.conf 拷贝到指定目录

FROM nginx COPY ./tsf_demo_nginx_mesh /usr/share/nginx/html/ ADD nginx.conf /etc/nginx/nginx.conf WORKDIR /usr/share/nginx/html/ RUN chmod x start.sh ENTRYPOINT ["bash","./start.sh"]

<左右滑动查看更多>

如果需要在nginx访问后端服务,则需要确保 istio_proxy 先于 nginx 启动,这样才能实现通过服务名称对后端服务进行访问。start.sh 文件示例:

#!/bin/bash # 拷贝配置文件 mkdir -p /opt/tsf/app_config/apis cp /usr/share/nginx/html/spec.yaml /opt/tsf/app_config/ cp -r /usr/share/nginx/html/apis /opt/tsf/app_config/ # 检测 isito-proxy 状态是否就绪 while [ true ] do already_run=`curl 127.0.0.1:15021/status` echo $already_run if [ "$already_run" == "CONFIG_READY" ]; then echo "ready go" break fi sleep 10 done # 启动 nginx nginx -g "daemon off;"

<左右滑动查看更多>

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(10)

四、部署应用

选择部署组列表中对应条目中【部署应用】按钮,部署应用。

选择对应版本镜像,指定端口号,点击【完成】按钮进行部署。部署成功后,在【服务治理】页面,可以展示出服务实例信息。进入相应微服务,在【接口列表】页签,可以看到对应的API列表。具体操作步骤,请参考TSF官方操作指南中【应用部署】及【服务治理】部分。

>>>复制链接到浏览器查看详情:

https://cloud.tencent.com/document/product/649/36499

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(11)

五、验证

经过上述操作,应用部署成功后,可进行如下验证。通过浏览器访问 java 服务中的 API。

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(12)

通过浏览器访问 nginx 服务的首页。

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(13)

通过浏览器访问 nginx 服务中的静态页面。

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(14)

通过浏览器访问 nginx 服务,并重定向到后端 java 服务。

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(15)

小结

上文通过简单的示例,展示了 java 应用与 nginx 静态应用通过 TSF Mesh 以统一的形式托管并运行于 TSF 之上。同样,TSF Mesh 也支持其他语言开发的应用程序(如:PHP,Python,Go等)。正是因为 TSF Mesh 具备这种跨多语言、多框架的能力,所以,TSF Mesh 非常适用于具有不同技术栈的团队,以及新老应用并存的场景。从而,可以为企业在微服务架构转型的过程中带来更多的助力。

- End -

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(16)

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(17)

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(18)

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(19)

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(20)

码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)(21)

,