OpenResty XRay™ 自主部署版 (Kubernetes)
名称
OpenResty XRay 自主部署 kubernetes 版本安装与部署说明
目录
概览
其中控制台服务端运行在 docker 容器中,使用 kubernetes
进行管理,而 Agent 端则是运行在目标机器上。
XRay 的服务端分为三个组件,其中每个组件中又有一些子服务
OpenResty XRay Console
:- xray-console: console 的 web 服务,提供 XRay 的管理界面
- xray-console-pg: console 的数据库,作为 web 服务的数据库后端
OpenResty XRay BuildBox
:- build-box-[dist]: 构建 XRay 工具的后端服务。其中
dist
代表对应的操作系统发行版。 - xray-tenant-db: 对
xray-console
服务和build-box-[dist]
提供查询接口,会按照 ‘私有库 -> 公共库’ 的顺寻进行查询。该服务只会向公共库发起查询请求,而不会有数据上传到公有库 - xray-tenant-db-pl: 提供客户私有的软件数据库
- xray-tenang-db-pg: 作为客户私有软件数据库的数据库后端
- build-box-[dist]: 构建 XRay 工具的后端服务。其中
安装
kubernete 控制台服务
1. 硬件要求
- 一个基础的 Kubernetes 平台
- 1Ti + 500Gi 硬盘供
xray-console
pod 使用 - 100Gi 硬盘供
tenant-db
pod 中的build-box
容器使用 - 2 x 10Gi 硬盘供
tenant-db
pod 中的tenant-db
容器使用 - 建议不要使用 NFS 做存储,会有权限问题
- 每个容器至少 256MB 内存
xray-console
pod 可以连接互联网
关于硬盘使用量的说明:根据目前的经验,1 台 Agent 周期采样的数据,30 天的数据增长量约为 10GB
2. 访问镜像仓库的 secret
首先,创建命名空间以及使用邮件中提供的用户名密码创建 kubernetes 访问 openresty 镜像仓库的 secret
kubectl create ns openresty-xray
kubectl create secret docker-registry openresty-xray \
--docker-server=registry.openresty.com.cn \
--docker-username=<docker-registry username> \
--docker-password=<docker-registry password> \
-n openresty-xray
3. 创建 console 证书 secret (可选)
如果需要使用自定义的证书,则需执行此步骤。如果跳过此步骤,console会使用内置的自签证书。
将 XRay 服务端对应域名的证书放在 cert 目录下
$ ls cert/
ssl.crt ssl.key
使用以下命令创建 secret
kubectl create secret generic cert-secret --from-file=cert -n openresty-xray
找到 kubernetes.yml
文件的以下几行, 去掉注释即可使用自定义的证书
#- mountPath: /usr/local/orxray-console/conf/cert
# name: cert
# readOnly: true
...
volumes:
#- name: cert
# secret:
# secretName: cert-secret
kubernetes.yml
文件中的环境变量需要和证书中的域名一致
- name: CONSOLE_HOST
value: xxx.xx.com
4. 使用默认的数据卷持久化方案
部署服务端需要持久化的数据卷,以下是给的一个缺省的持久化数据卷方案。 这个方案是将数据存到集群中的某个选中的节点上,节点上需要分配2T左右的空间。
首先给选定的节点打上标签
kubectl label node <node_name> app=openresty-xray-console
创建数据卷,数据会持久化在选定节点的 /data
目录中,请保证 /data
目录有足够的空间。
使用邮件附件中的
kubernetes-pv.yml.sample
文件
kubectl apply -f kubernetes-pv.yml.sample
5. 部署服务端到kubernetes
执行以下命令部署服务端到kubernetes
使用邮件附件中的
kubernetes.yml
文件
kubectl apply -f kubernetes.yml
6. 访问服务
kubernetes.yml 使用 hostPort 的方式在 console 的节点上导出443端口,所以直接访问节点的 https 服务就行了。
Agent
XRay Agent 端运行在目标机器上,Agent 安装后与自主部署的控制台服务端进行通信,而 Agent 安装也是由控制台服务端配合完成的:
在浏览器访问控制端服务端后台,使用邮件中提供的用户名密码来进行登录。登录后,可以看到安装向导,及支持的操作系统,按照安装向导的提示,进行 Agent 的安装即可。
安装 Agent 后可在左侧 User
页签修改密码及新增用户。
运维
查看服务 POD 状态
$ kubectl get pods -n openresty-xray
NAME READY STATUS RESTARTS AGE
build-box-centos-7-75c954d87d-h6fkz 1/1 Running 0 18h
xray-console-5d457bb49d-q49f8 1/1 Running 0 17h
xray-console-pg-64df4cbd86-tm44n 1/1 Running 0 18h
xray-tenant-db-69d9cbd77d-nccnb 1/1 Running 0 18h
xray-tenant-db-pg-845d5cb674-rrjz8 1/1 Running 0 18h
xray-tenant-db-pl-859c5c8dfd-xk7sg 1/1 Running 0 18h
控制台服务日志查看
$ kubectl logs --tail=10 -n openresty-xray -l app=xray-console -c xray-console
检查服务状态
$ kubectl describe pod xray-console-5d457bb49d-q49f8 -n openresty-xray
升级服务
升级服务会通过邮件发送附件 kubernetes.upgrade.yml
,执行以下操作:
$ kubectl apply -f kubernetes.upgrade.yml
由于导出端口使用了hostPort模式,如果升级的console服务POD会因为原POD占用主机的443端口,导致POD一直处于pending状态,需要手工删除原POD。
执行以下命令
$ kubectl delete pod xray-console-5d457bb49d-q49f8 -n openresty-xray
组件升级
首先停止旧的 Pods,再启动新的 Pods,等到新的 Pods 启动成功后升级就成功了。
其中 kubernetes-pods.yml
文件在升级邮件的附件中提供。
$ kubectl delete -f kubernetes-pods.yml
$ kubectl apply -f kubernetes-pods.yml
在升级时,并不需要删除旧的 PVC 和相应的 PV。因为 PV 是 RWO (读-写-一次性) 属性的,如果 PVC 被删除后,对应的 PV 也需要被删除后再重建(这不会影响已经持久化的数据)。