共計 3475 個字符,預計需要花費 9 分鐘才能閱讀完成。
本篇文章為大家展示了如何在 Rancher 2.x 中進行 TLS termination,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
引 言
我們將探索 Rancher 使用 TLS 證書的不同方式。TLS,安全傳輸層協議,是用于保護網絡通信的加密協議。它是目前已經棄用的安全套接層(SSL)的繼任者。
TLS 如何集成到各種 Rancher 組件中以及如何準備環境以正確利用 Rancher 中的 TLS。
為什么安全傳輸層協議(TLS)很重要?
Rancher 在任何地方都可以使用 TLS。因此,在安裝 Rancher 之前,確定 TLS 終止選項十分重要。
1、確認你想要執行的 TLS 終止類型,有以下幾種類型:
自簽名,由 Rancher 終止(這是默認的)
Let’s Encrypt,由 Rancher 終止
自帶證書,由 Rancher 終止
外部 TLS 終止
2、如果你選擇了自帶證書或外部 TLS 終止,那么請確保你有用于注冊證書的 CA 證書的副本(僅需 cert,不需要密鑰)。Rancher 在執行操作時需要這一文件。
3、確保你知道 Rancher 要使用的主機名。這在安裝之后不可更改。
什么組件需要安全傳輸層協議
對于任何企業軟件來說,你都需要在安裝和使用之前確定特定的要求,包括存儲要求、網絡、在云端還是本地等等。在進行安裝之前,你必須得明確回答這些問題。
對于 Rancher 來說,考慮因素之一是 TLS。必須了解并計劃使用 Rancher 進行 TLS 的方法,如此才能獲得能夠充分支持并且擁有良好功能的解決方案。
除了 HTTPS 安全之外,還有其他兩個地方也十分需要 TLS:
1、kubectl
2、節點和集群 agent 通信
注意,并不止以上兩個地方會使用到 TLS,只是上述兩個地方更為常見。
理解 kubectl TLS
首先,我們來看一下示例 kubeconfig 文件:
apiVersion: v1
kind: Config
clusters:
\- name: sample
cluster:
server: https://rancher.example.org/k8s/clusters/c-1234
certificate-authority-data: LS0t...
特別注意 certificate-authority-data 的存在。該字段是 CA 證書的 base64 編碼版本,這一 CA 證書可用于對 Kubernetes API 服務器提供的 TLS 證書進行簽名。或者是 Rancher 在代理調用 kube-apiserver 時提供的 TLS 證書。
為什么這個如此重要呢?因為 kubectl 使用 certificate-authority-data 來確保是你(而不是冒名頂替者)正在連接到正確的集群。如果服務器提供的證書尚未由 certificate-authority-data 中的證書簽名,那么 kubectl 會警告你并且退出。基本上,你不會遭受 MITM(中間人)攻擊。
certificate-authority-data 中的值來自 kube-ca 的 CA 證書(非 Rancher 集群或使用授權集群端點的 Rancher 集群),或者是 Rancher CA 證書(任意 Rancher 集群)。
請務必在此字段中輸入正確的值,否則 kubectl 不會驗證與你的 Kubernetes 集群的連接。這就是為什么在設置 Rancher 時需要正確配置 TLS。
理解節點和集群 Agent 通信
在任意 Rancher 連接的集群(包括導入的或其他方式)中,需要部署兩個工作負載:
1、cattle-cluster-agentDeployment
2、cattle-node-agentDeployment
每個工作負載執行一個特定的功能。總之,這兩個 agent 連接到 Rancher 的 API 并在 tcp/443 上建立安全的 websocket 連接。然后,該 websocket 連接會用于 Rancher 與托管的節點或集群之間的雙向通信。
集群 agent 連接到托管集群的 Kubernetes API,這使 Rancher 可以通過 websocket 隧道執行 API 操作。當執行集群操作時(如升級、ectd 快照等),節點 agent 將與 RKE 集群中的節點進行交互。
這兩個 agent 都使用稱為“CA checksum”的配置值,該配置值將作為環境變量以 CATTLE\_CA\_CHECKSUM 的形式傳遞給 Pod。該值需要與 kubectl 相同——確保連接到正確的端點并方式 MITM 的發生。但是,校驗和的工作原理略有不同。
cattle agent 的 CA checksum 可以厭憎 agent 是否連接到 Rancher API 的正確實例。由于 Rancher 使用 TLS 保護其 HTTPS API 端點,因此 agent 容器可以使用此校驗和來驗證 API 端點提供的 TLS 證書是否正確。
其次,CATTLE\_CA\_CHECKSUM 未配置為 CA 證書的 base64 編碼副本。相反,Rancher 會生成 CA 證書的 sha256 校驗和,該證書用于簽署 Rancher TLS 證書,并將該值放入 CATTLE\_CA\_CHECKSUM 字段中。結果如下:
CATTLE\_CA\_CHECKSUM=b0af09b35ef086fcfc21e990fbd750720abe5c811dbea3ae40fe050a67f0bdb0e
當一個 Rancher 集群或節點 agent 調用 Rancher API,它會將 CA 證書與其在 Deployment 和 DaemonSet 中配置的那一個進行比較。如果它們匹配,通信則會建立起來。
安全傳輸層協議(TLS)終止 (termination)
當安裝 Rancher 時有以下 4 種主要方式來終止 TLS:
使用 Rancher 的自簽名證書
使用 Let’s Encrypt
自帶證書
外部 TLS 終止
每種方法都有特定的要求,需要在具體操作中進行權衡。
使用 Rancher 的自簽名證書
在終止 TLS 的四個選項中,這個可能是最簡單的。在 HA 和單節點安裝方案中,這也是 Rancher 的默認選項。也就是說,通過不將任何 TLS 特定的參數傳遞給 helm install 或 docker run,來進行安裝。
安裝后,Rancher 會生成一個 CA 證書(CN=cattle-ca),并且使用該證書為其自身證書簽名。根據你執行的安裝類型,自簽名證書的工作方式會有所不同。
單節點安裝
容器啟動后,設置前,Rancher 在 443 端口上響應任意 HTTPS 請求,無論其目標 Host 值如何。這是如何成為可能的呢?
在這一狀態下,Rancher 會為你到達的任何主機名自動生成一個證書。如果是一個 IP(如 10.11.12.13),那么 Rancher 會為該 IP 生成一個自簽名(使用 cattle-ca)證書。如果是以一個主機名(如 my-rancher.example.org)到達此新的 Rancher 安裝目錄,同樣也會以相同的方式生成一個自簽名證書。
在 Rancher 使用單個證書之前,你需要完成設置步驟(設置管理員密碼并確認 Rancher 主機名)。該證書對于在 Rancher 初始設置期間配置的主機名有效。
HA 安裝
在 HA 安裝場景下,自簽名證書需要你安裝一個名為 cert-manager 的應用程序。與單節點 Rancher 管理 CA 證書本身不同,HA rancher 使用 cert-manager 來處理證書的生命周期。你可以根據以下指引將 cert-manager 安裝到你準備好的 Kubernetes 集群中:
https://rancher.com/docs/rancher/v2.x/en/installation/k8s-install/helm-rancher/
一旦你完成 cert-manager 的安裝,下一步是安裝 rancher。使用自簽名證書是 Rancher 的默認設置,所以執行 helm install 時實際上只有一個強制性參數:
--set hostname= YOUR.DNS.NAME
該參數是強制性的,因為 Rancher HA 安裝不具有與單節點安裝相同的即時證書生成功能。因此,一旦你設置了主機名,該主機名將用于 Rancher 安裝的整個生命周期。所以你必須確保你的設置是正確的。
然后 cert-manager 將會生成一個證書,該證書作為一個 secret 存儲在 cattle-system 命名空間中,名為 tls-rancher-ingress。
上述內容就是如何在 Rancher 2.x 中進行 TLS termination,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注丸趣 TV 行業資訊頻道。