大多數 Rancher 2.x 軟件均運行在 Rancher Server 上。Rancher Server 包括用于管理整個 Rancher 部署的所有軟件組件。
下圖展示了 Rancher 2.x 的上層架構。下圖中,Rancher Server 管理兩個下游 Kubernetes 集群,其中一個由 RKE 創建,另一個由 Amazon EKS 創建。
為了達到最佳性能和安全性,我們建議你為 Rancher Management Server 創建一個專用的 Kubernetes 集群。不建議在此集群上運行用戶工作負載。部署 Rancher 后,你可以創建或導入集群來運行你的工作負載。
下圖介紹了用戶如何通過 Rancher 的認證代理管理?Rancher 啟動的 Kubernetes?集群和托管的 Kubernetes?集群:
通過 Rancher 的認證代理管理 Kubernetes 集群
Rancher 如何配置和管理運行應用和服務的下游集群。
下圖顯示了 Cluster Controller、Cluster Agent 和 Node Agent 讓 Rancher 控制下游集群的。
與下游集群通信
以下描述對應于上圖中的數字:
- 認證代理
- Cluster Controller 和 Cluster Agent
- Node Agents
- 授權集群端點
Components?
1. 認證代理?
在此圖中,名為 Bob 的用戶希望查看在名為 User Cluster 1 的下游集群上運行的所有 Pod。在 Rancher 中,他可以運行?kubectl
?命令來查看 Pod。Bob 通過 Rancher 的認證代理進行身份驗證。
認證代理將所有 Kubernetes API 調用轉發到下游集群。它集成了本地身份驗證、Active Directory 和 GitHub 等身份驗證方式。在每個 Kubernetes API 調用請求時,認證代理會驗證請求方的身份,并在轉發給 Kubernetes master 節點之前,設置正確的 Kubernetes 消息頭。
Rancher 使用?ServiceAccount?與 Kubernetes 集群通信,該 ServiceAccount 為在 Pod 中運行的進程提供身份。
默認情況下,Rancher 生成一個?kubeconfig 文件,文件包含憑證信息,用于為 Rancher Server 連接下游集群的 Kubernetes API Server 的代理。kubeconfig 文件 (kube_config_rancher-cluster.yml
) 包含對集群的完全訪問權限。
2. Cluster Controller 和 Cluster Agent?
每個下游集群都有一個 Cluster Agent,用于打開與 Rancher Server 中對應的 Cluster Controller 之間的通道。每個rancher控制的下游集群都會在rancher上創建一個 Cluster Controller 和下游集群的一個 Cluster Agent。
Cluster Controller 都能:
- 檢測下游集群中的資源變化
- 將下游集群的當前狀態變更到目標狀態
- 配置集群和項目的訪問控制策略
- 通過調用所需的 Docker Machine 驅動和 Kubernetes 引擎(例如 RKE 和 GKE)來配置集群
Cluster Agent,也叫做?cattle-cluster-agent
,是運行在下游集群中的組件。它具有以下功能:
- 連接 Rancher 啟動的 Kubernetes 集群中的 Kubernetes API。
- 管理集群內的工作負載,pod 創建和部署。
- 根據每個集群的全局策略,應用定義的角色和綁定。
- 通過與 Cluster Controller 之間的通道,實現集群和 Rancher Server 之間的通信,包括事件,統計數據,節點信息和健康狀況。
默認情況下,Cluster Controller 連接到 Cluster Agent,Rancher 才能與下游集群通信。如果 Cluster Agent 不可用,Cluster Controller 可以連接到?Node Agent。
3. Node Agents?
如果 Cluster Agent(也稱為?cattle-cluster-agent
)不可用,其中一個 Node Agent 會創建一個連接到 Cluster Controller 的通道與 Rancher 通信。
cattle-node-agent
?使用?DaemonSet?資源進行部署,以確保它能在 Rancher 啟動的 Kubernetes 集群中的每個節點上運行,用于在執行集群操作時與節點交互。集群操作的包括升級 Kubernetes 版本,創建或恢復 etcd 快照等。
4. 授權集群端點?
授權集群端點(ACE)可連接到下游集群的 Kubernetes API Server,而不用通過 Rancher 認證代理調度請求。
授權集群端點僅適用于 Rancher 啟動的 Kubernetes 集群,即只適用于 Rancher?使用 RKE?來配置的集群。它不適用于導入的集群,也不適用于托管在 Kubernetes 提供商中的集群(例如 Amazon 的 EKS)。
授權集群端點的主要用途:
- 在 Rancher 不可用時訪問下游集群
- 在 Rancher Server 和與下游集群之間相距甚遠時降低延遲
kube-api-auth
?微服務為授權集群端點提供用戶驗證功能。當使用?kubectl
訪問下游集群時,集群的 Kubernetes API Server 使用?kube-api-auth
?服務作為 webhook 對用戶進行身份驗證。
與授權集群端點一樣,kube-api-auth
?的身份驗證功能也僅適用于 Rancher 啟動的 Kubernetes 集群。
示例場景:?假設 Rancher Server 位于美國,User Cluster 1 與用戶 Alice 均位于澳大利亞。Alice 可以使用 Rancher UI 操作 User Cluster 1 中的資源,但她的請求必須從澳大利亞發送到美國的 Rancher Server,然后通過代理返回澳大利亞,即下游集群所在的位置。地理距離可能導致明顯延遲,因此,Alice 可以使用授權集群端點來降低延遲。
為下游集群啟用授權集群端點后,Rancher 會在 kubeconfig 文件中額外生成一段 Kubernetes 上下文,用于直連到集群。該文件具有?kubectl
?和?helm
的憑證。
如果 Rancher 出現問題,你需要使用此 kubeconfig 文件中定義的上下文來訪問集群。因此,我們建議你導出 kubeconfig 文件,以便在 Rancher 出現問題時,仍能使用文件中的憑證訪問集群。詳情請參見使用?kubectl 和 kubeconfig 文件訪問集群的章節。
重要文件?
維護、排除問題和升級集群需要用到以下文件,請妥善保管這些文件:
rancher-cluster.yml
:RKE 集群配置文件。kube_config_rancher-cluster.yml
:集群的 Kubeconfig 文件,包含完全訪問集群的憑證。如果 Rancher 出現問題時,你可以使用此文件認證由 Rancher 啟動的 Kubernetes 集群。rancher-cluster.rkestate
:Kubernetes 集群狀態文件,文件包含用于完全訪問集群的憑證。注意:僅在使用 RKE v0.2.0 或更高版本時,才會創建此該文件。
注意:后兩個文件名中的?
rancher-cluster
?部分取決于你命名 RKE 集群配置文件的方式。
有關在沒有 Rancher 認證代理和其他配置選項的情況下連接到集群的更多信息,請參見?kubeconfig 文件。
Rancher Server 組件和源碼?
下圖展示了 Rancher Server 的組件:
原文鏈接:與下游集群通信 | Rancher?