開篇
? 引言:
- 三人行必有我師焉
- 知識共享,天下為公
- 《K3s 系列文章》
- 《Rancher 系列文章》
方案
在騰訊雲的 K3S 上安裝 Rancher
方案目標
- 高可用
- 3 臺 master 的 k3s 叢集
- 高可用模式的 rancher
- 資料備份
- rancher 資料備份到 騰訊雲物件儲存 cos
- 安全加密
- 不能存在 http,全部是 https
- 面向客戶
- 公網可訪問;
- 域名可訪問;
- 正式證書
- 儘量複用公有云的能力
Tencent Cloud Controller Manager(❌ 因為騰訊雲已經放棄維護相關原始碼,所以無法複用)SVC LoadBalancer 呼叫 CLB(❌ 因為騰訊雲已經放棄維護相關原始碼,所以無法複用)- CLB - 使用 4 層 CLB
- 備份 - 使用騰訊雲 COS
前提條件
-
有騰訊雲賬戶,賬戶至少擁有如下許可權:auto k3s 安裝 - 設定 CAM 以及這些許可權:
QcloudTAGFullAccess
-
該騰訊雲賬號有對應的 API 金鑰,地址:訪問金鑰 - 控制檯 (tencent.com) ,或者擁有相關許可權:
cam:QueryCollApiKey
和cam:CreateCollApiKey
-
一個物件儲存通 cos,用於備份
-
Rancher 的域名
-
Rancher 的域名對應的證書(如果沒有,會嘗試透過 cert-manager 和 let’s encrypt 自動生成免費的證書)
注意事項
Rancher 安裝注意事項
-
安裝前需要調整:
- 安全組
-
安裝後需要配置:
- LB
- Backup
-
⚠️付費模式,COS 按需調整付費模式。
安裝步驟
Rancher
? Important:
透過 Helm Chart 安裝
Rancher 埠要求
?️ Quote:
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:
先新增證書到 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 中國區最佳化配置
參考這裡:
收尾工作
調整安全組
入站規則:
- TCP:22(SSH) 埠許可權收緊
- TCP:6443(K8S API) 埠許可權收緊
- UDP:8472(K3s vxlan) 只開放給內網
- TCP:10250(kube api-server) 只開放給內網
最終效果如下:(應該可以進一步收緊)
配置 LB
?️ Quote:
我們建議將負載均衡器配置為 4 層均衡器,將普通 80/tcp 和 443/tcp 轉發到 Rancher 管理叢集節點。叢集上的 Ingress Controller 會將埠 80 上的 http 通訊重定向到埠 443 上的 https。
如上面所述,所以透過 4 層 LB, 將 443/tcp 轉到後端。如下圖:
配置 Rancher Backup
?️ Quote:
透過 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 安裝:
配置 物件儲存:
安裝成功日誌如下:
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, 如下:
? 登入 COS 發現已經成功備份。
總結
??? 至此,完成騰訊雲上 K3S 高可用叢集 及 Rancher 高可用叢集的搭建,並配置備份。
以下是安裝的相關資訊:
K3s
-
3 個 Master 和 Server 地址
-
K3S API Server 地址:
https://<3個master IP 地址任一個>:6443
(6443 埠目前沒有配置 CLB) -
K3S kubeconfig 配置:位於 k3s 的
/etc/rancher/k3s/k3s.yaml
以及操作機的/root/.autok3s/.kube/config
Rancher
- 地址:
- 公網訪問:
https://<your-rancher-domain>:<port>/
- 內網訪問:
https://<your-rancher-domain>:443
(需要編輯自己電腦的hosts
, 將 3 個 master 任一內網 IP 對映到該域名)
- 公網訪問:
- 賬號:
Admin
- 密碼
安全組
使用的安全組,最終配置如下:(應該可以進一步收緊)
CLB
使用的 CLB
監聽器為:rancher(TCP:<port>)
轉到 3 臺 master 的 443 埠。
備份 COS
K3S 和 Rancher 都配置了備份,備份到物件儲存 cos 中。具體的地址為:
- 桶:rancher-backup-
- 域名:
https://rancher-backup-<cos-id>.cos.ap-shanghai.myqcloud.com
- S3 Endpoint:
cos.ap-shanghai.myqcloud.com
- 資料夾為:
- k3s 為:
/rancher-1/rancher/rancher
(備份策略:每天 0 點備份,保留 5 份) - rancher 為:
/rancher-1/rancher/k3s
(備份策略,每天 0 點備份)
- k3s 為:
- COS 生命週期為:自動清理 1 個月前的檔案。(配置 自動清理規則)
三人行, 必有我師; 知識共享, 天下為公. 本文由東風微鳴技術部落格 EWhisper.cn 編寫.