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 也需要被刪除後再重建(這不會影響已經持久化的資料)。