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.运用
单击【运用管理】>【新建运用】按钮。填写运用信息,选择支配办法【容器支配】,选择运用类型【Mesh运用】,点击【提交】按钮,创建运用。
2.集群
单击【集群】>【新建集群】按钮。填写集群信息,选择容器类型【容器集群】,点击【提交】按钮,创建容器集群,然后导入云主机。
3.支配组
单击【支配组】>【新建支配组】按钮。填写支配组信息,并单击【保存&下一步】按钮,创建支配组。详细操作步骤,请参考TSF官方操作指南中【环境与资源管理】及【运用支配】部分。
>>>复制链接到浏览器查看详情:
https://cloud.tencent.com/document/product/649/36499
二、构建 java 运用镜像
将运用程序打包,添加配置文件,编写 Dockerfile 文件,构建镜像,推送到指定镜像仓库。
1.运用打包
以 java 程序为例解释程序包: userService.tar.gz,包内文件构造如下:文件构造
文件解释
文件示例
userService/apis/user.yaml
openapi: 3.0.0info: version: "1.0.0" title: user servicepaths: /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: v1kind: Applicationspec: 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/bashmkdir -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 文件,如下:
Dockerfile 文件内容示例:
FROM centos:7RUN yum update -y && yum install -y java-1.8.0-openjdk# 设置时区。这对付日志、调用链等功能能否在 TSF 掌握台被检索到非常主要。RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtimeRUN echo "Asia/Shanghai" > /etc/timezoneRUN mkdir /root/app/# 个中 userService.tar.gz 是 Mesh 运用压缩包ADD userService.tar.gz /root/app/# 指定到jar确当前目录实行WORKDIR /root/app/userServiceENTRYPOINT ["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)。
三、构建 nginx 静态运用镜像
1.运用打包
以 tsf_demo_nginx_mesh 程序为例解释,文件构造如下。文件构造
文件解释
文件示例
apis/ngnix-service.yaml
openapi: 3.0.0info: version: "1.0.0" title: ngnix-servicepaths: /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: v1kind: Applicationspec: 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/# 启动 nginxnginx -g "daemon off;"
<旁边滑动查看更多>
2.Dockerfile
在运用程序文件夹同级目录中新建 Dockerfile 文件,如下:
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.shENTRYPOINT ["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 nginxCOPY ./tsf_demo_nginx_mesh /usr/share/nginx/html/ADD nginx.conf /etc/nginx/nginx.confWORKDIR /usr/share/nginx/html/RUN chmod +x start.shENTRYPOINT ["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 10done# 启动 nginxnginx -g "daemon off;"
<旁边滑动查看更多>
四、支配运用
选择支配组列表中对应条款中【支配运用】按钮,支配运用。
选择对应版本镜像,指定端口号,点击【完成】按钮进行支配。支配成功后,在【做事管理】页面,可以展示出做事实例信息。进入相应微做事,在【接口列表】页签,可以看到对应的API列表。详细操作步骤,请参考TSF官方操作指南中【运用支配】及【做事管理】部分。
>>>复制链接到浏览器查看详情:
https://cloud.tencent.com/document/product/649/36499
五、验证
经由上述操作,运用支配成功后,可进行如下验证。通过浏览器访问 java 做事中的 API。
通过浏览器访问 nginx 做事的首页。
通过浏览器访问 nginx 做事中的静态页面。
通过浏览器访问 nginx 做事,并重定向到后端 java 做事。
小结
上文通过大略的示例,展示了 java 运用与 nginx 静态运用通过 TSF Mesh 以统一的形式托管并运行于 TSF 之上。同样,TSF Mesh 也支持其他措辞开拓的运用程序(如:PHP,Python,Go等)。正是由于 TSF Mesh 具备这种跨多措辞、多框架的能力,以是,TSF Mesh 非常适用于具有不同技能栈的团队,以及新老运用并存的场景。从而,可以为企业在微做事架构转型的过程中带来更多的助力。
- End -