TLS 設定
變更預設 TLS 設定取決於所選擇的安裝方法。
在高可用性 Kubernetes 叢集中執行 Rancher
當你在 Kubernetes 叢集內部安裝 Rancher 時,TLS 在叢集的 ingress 控制器處卸載。可能的 TLS 設定取決於所使用的 ingress 控制器:
- nginx-ingress-controller(RKE2 的預設值):預設 TLS 版本和密碼套件。
- traefik(K3s 的預設值):TLS 選項。
在單一 Docker 容器中執行 Rancher
預設 TLS 配置僅接受 TLS 1.2 和安全的 TLS 密碼套件。你可以透過設定以下環境變數來變更此設定:
| 參數 | 說明 | 預設值 | 可用選項 |
|---|---|---|---|
CATTLE_TLS_MIN_VERSION | 最低 TLS 版本 | 1.2 | 1.0、1.1、1.2、1.3 |
CATTLE_TLS_CIPHERS | 允許的 TLS 密碼套件 | TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 | 參見 Golang tls 常數 |
Agent TLS 強制
agent-tls-mode 設定控制 Rancher 的 agent(cluster-agent、fleet-agent 和 system-agent)如何驗證 Rancher 的憑證。
當值設為 strict 時,Rancher 的 agent 僅信任由 cacerts 設定中包含的憑證授權單位生成的憑證。
當值設為 system-store 時,Rancher 的 agent 信任由作業系統信任儲存中包含的任何公共憑證授權單位生成的憑證,包括由 Let's Encrypt 等機構簽署的憑證。這可能是安全風險,因為在此狀態下,由這些使用者無法控制的外部機構生成的任何憑證都被視為有效。
雖然 strict 選項提供了更高等級的安全性,但它要求 Rancher 能夠存取生成 agent 可見憑證的 CA。在某些憑證配置的情況下(特別是外部憑證),這不是自動的,需要額外的配置。有關哪些情境需要額外配置的更多資訊,請參見安裝指南。
在 Rancher v2.9.0 及更高版本中,此設定在新安裝上預設為 strict。對於從先前 Rancher 版本安裝或升級的使用者,它設為 system-store。
準備設定變更
每個叢集在狀態欄位中包含一個名為 AgentTlsStrictCheck 的條件。如果 AgentTlsStrictCheck 設為 "True",這表示叢集的 agent 已準備好在 strict 模式下運作。你可以使用 Rancher UI 或 kubectl 命令(例如以下命令)手動檢查每個叢集是否準備就緒:
## 以下命令跳過所有非本機叢集的輸出 $CLUSTER_NAME,$STATUS
kubectl get cluster.management.cattle.io -o jsonpath='{range .items[?(@.metadata.name!="local")]}{.metadata.name},{.status.conditions[?(@.type=="AgentTlsStrictCheck")].status}{"\n"}{end}'
變更設定
你可以使用 Rancher UI 或 agentTLSMode helm chart 選項變更設定。
如果你透過 Helm chart 指定值,你只能使用 Helm 修改該值。
根據你的憑證設定,可能需要採取額外的動作,例如上傳簽署憑證的憑證授權單位。在變更設定之前,請查看安裝指南,以了解是否有任何額外要求適用於你的設定。
要透過 UI 變更設定的值,請導覽至 Global Settings 頁面,並在頁面底部附近找到 agent-tls-mode 設定。當你透過 UI 變更設定時,Rancher 首先檢查所有下游叢集是否將條件 AgentTlsStrictCheck 設為 "True",然後才允許請求。這可以防止由於憑證不符而導致的中斷。
覆蓋設定驗證檢查
在某些情況下,你可能想要覆蓋確保所有 agent 可以接受新 TLS 配置的檢查:
Rancher 檢查所有下游叢集的狀態以防止中斷。不建議覆蓋此檢查,應謹慎執行。
- 作為管理員,為本機叢集生成一個 kubeconfig。在以下範例中,這被儲存到
local_kubeconfig.yaml檔案。 - 擷取目前設定並儲存到
setting.yaml:
kubectl get setting agent-tls-mode -o yaml --kubeconfig=local_kubeconfig.yaml > setting.yaml
- 更新
setting.yaml檔案,將value替換為strict。新增cattle.io/force: "true"註解會覆蓋叢集條件檢查,應該非常謹慎地執行:
包含 cattle.io/force 註解(無論值為何,包括例如 "false")都會覆蓋叢集條件檢查。
apiVersion: management.cattle.io/v3
customized: false
default: strict
kind: Setting
metadata:
name: agent-tls-mode
annotations:
cattle.io/force: "true"
source: ""
value: strict
- 套用新版本的設定:
kubectl apply -f setting.yaml --kubeconfig=local_kubeconfig.yaml