Rancher 系列文章-在騰訊雲的 K3S 上安裝高可用 Rancher 叢集

東風微鳴發表於2023-03-25

開篇

? 引言

  • 三人行必有我師焉
  • 知識共享,天下為公

方案

在騰訊雲的 K3S 上安裝 Rancher

方案目標

  1. 高可用
    1. 3 臺 master 的 k3s 叢集
    2. 高可用模式的 rancher
  2. 資料備份
    1. rancher 資料備份到 騰訊雲物件儲存 cos
  3. 安全加密
    1. 不能存在 http,全部是 https
  4. 面向客戶
    1. 公網可訪問;
    2. 域名可訪問;
    3. 正式證書
  5. 儘量複用公有云的能力
    1. Tencent Cloud Controller Manager (❌ 因為騰訊雲已經放棄維護相關原始碼,所以無法複用)
    2. SVC LoadBalancer 呼叫 CLB (❌ 因為騰訊雲已經放棄維護相關原始碼,所以無法複用)
    3. CLB - 使用 4 層 CLB
    4. 備份 - 使用騰訊雲 COS

前提條件

  1. 有騰訊雲賬戶,賬戶至少擁有如下許可權:auto k3s 安裝 - 設定 CAM 以及這些許可權:

    1. QcloudTAGFullAccess
  2. 該騰訊雲賬號有對應的 API 金鑰,地址:訪問金鑰 - 控制檯 (tencent.com) ,或者擁有相關許可權:cam:QueryCollApiKeycam:CreateCollApiKey

  3. 一個物件儲存通 cos,用於備份

  4. Rancher 的域名

  5. Rancher 的域名對應的證書(如果沒有,會嘗試透過 cert-manager 和 let’s encrypt 自動生成免費的證書)

注意事項

Rancher 安裝注意事項

  1. 透過 Helm Chart 進行高可用安裝

  2. 安裝前需要調整:

    1. 安全組
  3. 安裝後需要配置:

    1. LB
    2. Backup
  4. ⚠️付費模式,COS 按需調整付費模式。

安裝步驟

Rancher

? Important:

透過 Helm Chart 安裝

Rancher 埠要求

?️ Quote:

K3s 上 Rancher Server 節點的埠

Rancher Server 節點的入站規則

協議 來源 描述
TCP 80 Load balancer/proxy,做外部 SSL 終端 使用外部 SSL 終止時的 Rancher UI/API
TCP 443 server 節點 agent 節點託管/註冊的 Kubernetes 任何需要能夠使用 Rancher UI 或 API 的源 Rancher agent, Rancher UI/API, kubectl
TCP 6443 K3s server 節點 Kubernetes API

最後具體的安全組配置如下:(應該可以進一步收緊)

Rancher 高可用安裝

先安裝 helm chart 並建立 ns:

helm repo add rancher-stable http://rancher-mirror.oss-cn-beijing.aliyuncs.com/server-charts/stable

kubectl create namespace cattle-system

SSL 選項為:已有的證書,透過 Helm 安裝 Rancher:

?️ Quote:

根據你選擇的 SSL 選項,透過 Helm 安裝 Rancher

先新增證書到 k8s secret:

kubectl -n cattle-system create secret tls tls-rancher-ingress \
  --cert=tls.crt \
  --key=tls.key
helm install rancher rancher-stable/rancher \
 --namespace cattle-system \
 --set hostname=<your-rancher-domain> \
 --set replicas=3 \
 --set ingress.tls.source=secret \
 --set systemDefaultRegistry=registry.cn-hangzhou.aliyuncs.com \
 --set auditLog.level=1 \

執行後輸出如下:

NAME: rancher
LAST DEPLOYED: Sat Feb 12 20:10:14 2022
NAMESPACE: cattle-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Rancher Server has been installed.

NOTE: Rancher may take several minutes to fully initialize. Please standby while Certificates are being issued, Containers are started and the Ingress rule comes up.

Check out our docs at https://rancher.com/docs/

If you provided your own bootstrap password during installation, browse to https://<your-rancher-domain> to get started.

If this is the first time you installed Rancher, get started by running this command and clicking the URL it generates:

echo https://<your-rancher-domain>/dashboard/?setup=$(kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}')

To get just the bootstrap password on its own, run:

kubectl get secret --namespace cattle-system bootstrap-secret -o go-template='{{.data.bootstrapPassword|base64decode}}{{ "\n" }}'

Happy Containering!

? Notice:

注意 Rancher 域名的 443 許可權要開通。

ℹ️ Info:

  • 要安裝一個特定的 Rancher 版本,使用--version 標誌,例如:--version 2.3.6

之後訪問 UI 進行初始密碼設定等工作。

? 至此,Rancher 高可用叢集安裝完成。

Rancher 中國區最佳化配置

參考這裡:

收尾工作

調整安全組

入站規則:

  1. TCP:22(SSH) 埠許可權收緊
  2. TCP:6443(K8S API) 埠許可權收緊
  3. UDP:8472(K3s vxlan) 只開放給內網
  4. TCP:10250(kube api-server) 只開放給內網

最終效果如下:(應該可以進一步收緊)

配置 LB

?️ Quote:

外部 TLS Termination:

我們建議將負載均衡器配置為 4 層均衡器,將普通 80/tcp 和 443/tcp 轉發到 Rancher 管理叢集節點。叢集上的 Ingress Controller 會將埠 80 上的 http 通訊重定向到埠 443 上的 https。

如上面所述,所以透過 4 層 LB, 將 443/tcp 轉到後端。如下圖:

配置 Rancher Backup

?️ Quote:

Rancher v2.5 中的備份和恢復 | Rancher 文件

備份 Rancher | Rancher 文件

Rancher Backup Examples

透過 UI 安裝:

先建立 cos 儲存的認證資訊 Secret:

apiVersion: v1
stringData:
  accessKey: <your-ak>
  secretKey: <your-sk>
kind: Secret
metadata:
  name: cos-creds
  namespace: cattle-resources-system
type: Opaque

然後在 應用市場 選擇 Rancher Backup 安裝:

image-20220212234820849

配置 物件儲存:

安裝成功日誌如下:


helm upgrade --install=true --namespace=cattle-resources-system --timeout=10m0s --values=/home/shell/helm/values-rancher-backup-crd-2.1.0.yaml --version=2.1.0 --wait=true rancher-backup-crd /home/shell/helm/rancher-backup-crd-2.1.0.tgz
...
---------------------------------------------------------------------
SUCCESS: helm upgrade --install=true --namespace=cattle-resources-system --timeout=10m0s --values=/home/shell/helm/values-rancher-backup-crd-2.1.0.yaml --version=2.1.0 --wait=true rancher-backup-crd /home/shell/helm/rancher-backup-crd-2.1.0.tgz
---------------------------------------------------------------------
helm upgrade --install=true --namespace=cattle-resources-system --timeout=10m0s --values=/home/shell/helm/values-rancher-backup-2.1.0.yaml --version=2.1.0 --wait=true rancher-backup /home/shell/helm/rancher-backup-2.1.0.tgz
...
---------------------------------------------------------------------
SUCCESS: helm upgrade --install=true --namespace=cattle-resources-system --timeout=10m0s --values=/home/shell/helm/values-rancher-backup-2.1.0.yaml --version=2.1.0 --wait=true rancher-backup /home/shell/helm/rancher-backup-2.1.0.tgz
---------------------------------------------------------------------

配置 Backup, 如下:

image-20220213000206732

? 登入 COS 發現已經成功備份。

總結

??? 至此,完成騰訊雲上 K3S 高可用叢集 及 Rancher 高可用叢集的搭建,並配置備份。

以下是安裝的相關資訊:

K3s

  1. 3 個 Master 和 Server 地址

  2. K3S API Server 地址:https://<3個master IP 地址任一個>:6443 (6443 埠目前沒有配置 CLB)

  3. K3S kubeconfig 配置:位於 k3s 的/etc/rancher/k3s/k3s.yaml 以及操作機的 /root/.autok3s/.kube/config

Rancher

  1. 地址:
    1. 公網訪問:https://<your-rancher-domain>:<port>/
    2. 內網訪問:https://<your-rancher-domain>:443 (需要編輯自己電腦的 hosts , 將 3 個 master 任一內網 IP 對映到該域名)
  2. 賬號:Admin
  3. 密碼

安全組

使用的安全組,最終配置如下:(應該可以進一步收緊)

CLB

使用的 CLB

監聽器為:rancher(TCP:<port>) 轉到 3 臺 master 的 443 埠。

備份 COS

K3S 和 Rancher 都配置了備份,備份到物件儲存 cos 中。具體的地址為:

  1. 桶:rancher-backup-
  2. 域名:https://rancher-backup-<cos-id>.cos.ap-shanghai.myqcloud.com
  3. S3 Endpoint: cos.ap-shanghai.myqcloud.com
  4. 資料夾為:
    1. k3s 為:/rancher-1/rancher/rancher(備份策略:每天 0 點備份,保留 5 份)
    2. rancher 為:/rancher-1/rancher/k3s (備份策略,每天 0 點備份)
  5. COS 生命週期為:自動清理 1 個月前的檔案。(配置 自動清理規則

三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.

相關文章