码云搭建方法(腾云忆想技术大牛手把手教你基于TSF)
导语
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.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 文件,如下:
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)。
三、构建 nginx 静态应用镜像
1.应用打包
以 tsf_demo_nginx_mesh 程序为例说明,文件结构如下。文件结构
文件说明
文件示例
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 文件,如下:
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;"
<左右滑动查看更多>
四、部署应用
选择部署组列表中对应条目中【部署应用】按钮,部署应用。
选择对应版本镜像,指定端口号,点击【完成】按钮进行部署。部署成功后,在【服务治理】页面,可以展示出服务实例信息。进入相应微服务,在【接口列表】页签,可以看到对应的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 -
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com