OpenResty XRay™ 自主部署版 (Azure Kubernetes Service)

名称

OpenResty XRay 自主部署 Azure Kubernetes Service 版本部署说明

目录

概览

xray-arch

控制台服务端运行在 docker 容器中,使用 kubernetes 进行管理,而 Agent 端则是运行在目标机器上。

XRay 的服务端分为两个 Pods,其中每个 Pod 中又有一些子服务

  • 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: 作为客户私有软件数据库的数据库后端

我们在下面的部署示例中,将使用 Azure Disk 作为数据卷持久化方案。

安装

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

找到 aks-kubernetes.yml 文件的以下几行, 去掉注释即可使用自定义的证书

#- mountPath: /usr/local/orxray-console/conf/cert
#  name: cert
#  readOnly: true
...
volumes:
#- name: cert
#  secret:
#    secretName: cert-secret

aks-kubernetes.yml 文件中的环境变量需要和证书中的域名一致

        - name: CONSOLE_HOST
          value: xxx.xx.com

4. 使用 Azure Disk 作为数据卷持久化方案

部署服务端需要持久化的数据卷,以下是一个使用 Azure Disk 的持久化数据卷方案。

4.1 创建 Azure Disk

更多信息详见: https://learn.microsoft.com/en-us/azure/aks/azure-disk-volume https://docs.microsoft.com/en-US/cli/azure/disk#az_disk_create

AKS_NODE_RESOURCE_GROUP=$(az aks show \
    --resource-group $AKS_CLUSTER_RESOURCE_GROUP \
    --name $AKS_NAME --query nodeResourceGroup -o tsv)

az disk create \
  --resource-group $AKS_NODE_RESOURCE_GROUP \
  --name orxray_console_disk \
  --size-gb $ORXRAY_CONSOLE_DISK_SIZE \
  --query id --output tsv

az disk create \
  --resource-group $AKS_NODE_RESOURCE_GROUP \
  --name orxray_console_pg_disk \
  --size-gb $ORXRAY_CONSOLE_PG_DISK_SIZE \
  --query id --output tsv

az disk create \
  --resource-group $AKS_NODE_RESOURCE_GROUP \
  --name orxray_buildbox_disk \
  --size-gb $ORXRAY_BUILDBOX_DISK_SIZE \
  --query id --output tsv

az disk create \
  --resource-group $AKS_NODE_RESOURCE_GROUP \
  --name orxray_tenant_db_disk \
  --size-gb $ORXRAY_TENANT_DB_DISK_SIZE \
  --query id --output tsv

az disk create \
  --resource-group $AKS_NODE_RESOURCE_GROUP \
  --name orxray_tenant_db_pg_disk \
  --size-gb $ORXRAY_TENANT_DB_PG_DISK_SIZE \
  --query id --output tsv
  • $AKS_CLUSTER_RESOURCE_GROUP is resource group of the kubernetes cluster
  • $AKS_NAME is name of the AKS
  • $ORXRAY_CONSOLE_DISK_SIZE is the disk to be used for console service, recommended size is 500GB and above
  • $ORXRAY_CONSOLE_PG_DISK_SIZE is the disk to be used for console-pg service, recommended size is 1024GB and above
  • $ORXRAY_BUILDBOX_DISK_SIZE is the disk to be used for build-box service, recommended size is 100GB and above
  • $ORXRAY_TENANT_DB_DISK_SIZE is the disk to be used for tenant-db service, recommended size is 50GB and above
  • $ORXRAY_TENANT_DB_PG_DISK_SIZE is the disk to be used for tenant-db-pg service, recommended size is 50GB and above

4.2 使用邮件附件中的 aks-kubernetes-pv.yml.sample 文件

需要替换其中的 SUBSCRIPTION_IDAKS_NODE_RESOURCE_GROUP 为当前所使用的值。 还可以根据创建硬盘的大小,修改对应的持久卷大小。

kubectl apply -f aks-kubernetes-pv.yml.sample

5. 部署服务端到kubernetes

执行以下命令部署服务端到kubernetes

使用邮件附件中的 aks-kubernetes.yml 文件

kubectl apply -f aks-kubernetes.yml

6. 访问服务

使用 ingress 暴露 xray-console 服务的 443 端口,即可访问该服务。

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

组件升级

首先停止旧的 Pods,再启动新的 Pods,等到新的 Pods 启动成功后升级就成功了。 其中 aks-kubernetes-pods.yml 文件在升级邮件的附件中提供。

$ kubectl delete -f aks-kubernetes-pods.yml
$ kubectl apply -f aks-kubernetes-pods.yml

在升级时,并不需要删除旧的 PVC 和相应的 PV。因为 PV 是 RWO (读-写-一次性) 属性的,如果 PVC 被删除后,对应的 PV 也需要被删除后再重建(这不会影响已经持久化的数据)。