天天看點

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

作者|郝樹偉(流生)

以 Kubernetes 為代表的雲原生技術不僅屏蔽了各個雲廠商和資料中心在基礎設施上的差異性,還使得應用可以在不同的雲上使用标準化的方式描述和部署運作。在此基礎之上,我們才可以低成本管理處于任何地理位置的 Kubernetes 叢集。本文将主要為您介紹如何實作對公共雲 ACK 叢集和資料中心自建 Kubernetes 叢集一緻體驗的叢集管理和安全治理。

要實作對公共雲 ACK 叢集和資料中心自建 Kubernetes 叢集一緻體驗的叢集管理和安全治理,就必須先将其統一到同一控制平面,ACK 注冊叢集允許處于任何地理位置的自建 Kubernetes 叢集通過公網或私網(雲上雲下網絡打通)連接配接端點接入阿裡雲容器服務管理系統。下面是 ACK 注冊叢集的架構示意圖:

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

在 ACK 注冊叢集架構示意圖中,主要包括以下幾個組成部分:

ACK 容器服務控制台。

ACK 注冊叢集 Agent 元件:Agent 元件以 Deployment 的形式部署在自建 Kubernetes 叢集中(或者其他雲廠商的容器叢集中),用于接收 ACK 注冊叢集 Stub 元件(使用 ACK 容器服務控制台或 ACK 注冊叢集 kubeconfig)下發的請求,并将其轉發給目标叢集的 Kubernetes API Server,同時接收 Kubernetes API Server的響應并将其發送回 Stub 元件。

ACK 注冊叢集 Stub 元件:Stub元件部署的容器服務管控側,每一個注冊叢集都對應一個 Stub 元件,用于代理轉發 ACK 容器服務控制台或 ACK 注冊叢集 kubeconfig 通路叢集産生的請求,轉發到 Agent 元件并接收來自 Agent 元件的響應,最終傳回響應到使用者端。

Kubernetes API Server:目标自建 Kubernetes 叢集或其他雲廠商容器叢集的 Kubernetes API Server。

前面我們提到,ACK 注冊叢集可以接入處于任何地理位置的自建 Kubernetes 叢集,資料中心内自建的 Kubernetes 叢集有一個特點就是通常情況下,這些自建叢集處于一個受限的私有網絡環境下,隻能叢集出公網通路外部環境。ACK 注冊叢集為了解決這個問題,将 Stub/Agent 元件設計為 Agent 主動單向注冊到 Stub 元件,Agent 連接配接 Stub 時,會帶上預先生成的 token 和證書等資訊進行驗證,整個通信鍊路采用 TLS 協定確定資料加密。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

通過 ACK 注冊叢集将自建 Kubernetes 叢集接入到阿裡雲容器服務管控系統,使用者最大的安全擔憂就是自有叢集通路權限的管理和控制,我們通過以下幾點來保證使用者對自有叢集的絕對安全控制。

ACK 管控側不存儲使用者自有叢集的任何秘鑰資訊。使用者自建 Kubernetes 叢集擁有自己的一套證書體系,如果 ACK 注冊叢集使用使用者自建 Kubernetes 叢集的 kubeconfig 對其進行通路,那麼勢必會造成使用者叢集通路權限的不可控。實際上,無論是從安全角度考慮,還是從管控側一緻性體驗的角度考慮,都要求我們通過 ACK 注冊叢集來屏蔽管控側與使用者自建叢集證書體系的差異性。那麼具體的解法就是管控側會使用 ACK 統一頒發的證書體系通路注冊叢集 Stub 元件,在 Stub 和 Agent 元件完成請求認證後,經由 Agent 以身份扮演的方式向目标 API Server作 7 層代理轉發,最終在 API Server 完成請求的 RBAC 鑒權和審計,如下圖所示。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

叢集通路權限的管控收斂到 Agent 元件。Agent 元件部署在使用者自建叢集中,ACK 管控側通過 Stub/Agent 鍊路通路使用者自建叢集的權限收斂在 Agent 元件側,這樣可以保證使用者對自有叢集通路權限的全權控制。

Agent 元件“非侵入式”部署。Agent 元件以 Deployment 的形式部署在自建 Kubernetes 叢集中,不對自建叢集做任何更改和操作,後續會将 Agent 元件的源碼開源出來。

支援開啟安全審計。使用者可以在注冊叢集中開啟安全審計功能,任何對叢集的操作都可以進行查詢和審計。

假設目前使用者 A 已經在公共雲建立了一個 ACK 叢集,在資料中心内建立了一個自建 Kubernetes 叢集,那麼如何使用一緻的體驗來管理這兩個處于不同雲環境的 Kubernetes 叢集呢?很簡單,建立一個 ACK 注冊叢集并接入自建叢集即可。

我們隻需在 ACK 容器服務控制台建立注冊叢集頁面選擇離自建 Kubernetes 叢集地理位置最近的區域并配置 VPC 網絡和安全組,3 分鐘即可完成注冊叢集的建立,如下圖所示。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

叢集詳情頁面可以看到連接配接資訊中分别有一個用于公網接入和私網接入自建 Kubernetes 叢集的叢集導入代理配置,如下圖所示:

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

在自建 Kubernetes 叢集中部署上述叢集導入代理配置:

agent 元件運作正常後,我們就可以在 ACK 容器服務控制台檢視叢集清單,如下圖所示,名為 ack 的叢集為 ACK 托管版叢集,Kubernete 版本為 1.20.4-aliyun.1,名為 idc-k8s 的叢集為 ACK 注冊叢集,接入的是使用者自建的 Kubernetes 叢集,Kubernetes版本為 1.19.4。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

使用注冊叢集 idc-k8s 即可管理自建 Kubernetes 叢集,叢集概覽資訊和節點清單資訊如下圖所示。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理
互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

接下來,使用者就可以通過 ACK 容器服務控制台,使用一緻體驗來對雲上雲下叢集進行叢集管理、節點管理、應用管理和運維等操作。

在使用不同雲平台上的 Kubernetes 叢集時,不同雲平台的安全治理能力和安全政策配置及管理方式也都不盡相同,這種參差不齊的安全治理能力會導緻運維團隊在定義使用者角色、通路權限的時候都每個雲平台的安全管理機制都十分熟悉,如果管理和安全通路控制能力不足,則非常容易出現角色違規、通路管理風險等問題。

例如,在一個各種項目都在使用 Kubernetes 容器叢集,且容器叢集屬于不同的雲平台的場景下,管理者需要能夠将所有使用者和他們的活動都引導到對應的容器叢集,這樣才能知道誰在什麼時候做了什麼,你可能會遇到有多個賬戶需要分别設定不同的通路層級,或者有越來越多的人加入、離開、變換團隊和項目的情況,如何管理這些使用者的權限會變得越來越複雜。

ACK 注冊叢集從以下幾個方面為自建 Kubernetes 叢集提供安全治理能力一緻性體驗。

假設目前企業内有 2 個不同工作職責的使用者,分别是開發人員 testuser01,測試人員 testuser02,那麼管理者就可以為開發和測試人員建立子賬号 testuser01 和 testuser02,接下來根據開發測試人員工作職責的不同,配置設定 ack 叢集和 idc-k8s 叢集的以下權限:

開發人員 testuser01,授予 ack 叢集所有命名空間的讀寫權限,授予 idc-k8s 叢集test 命名空間的讀寫權限。

測試人員testuser02,隻授予idc-k8s叢集test命名空間的讀寫權限。

使用主賬号為開發人員 testuser01 和測試人員 testuser02 授權,在ACK容器服務控制台授權管理中選擇對應的 testuser01 和 testuser02 子賬号,授權配置分别如下圖所示:

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

按照向導完成 testuser01 和 testuser02 的授權後,使用子賬号 testuser01 登入容器服務控制台可以測試 testuser01 對 ack 叢集所有命名空間擁有讀寫權限,隻對 idc-k8s 叢集test命名空間擁有讀寫權限。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理
互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

使用子賬号 testuser02 登入容器服務控制台可以測試 testuser02 看不到 ack 叢集,且隻對 idc-k8s 叢集 test 命名空間擁有讀寫權限。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理
互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

在 Kubernetes 叢集中,API Server 的審計日志可以幫助叢集管理人員記錄或追溯不同使用者的日常操作,是叢集安全運維中重要的環節。在注冊叢集中可以使用叢集審計功能幫助使用者可視化追溯不同使用者的日常操作。

下面是自建 Kubernetes 叢集的日志審計示例。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

配置巡檢功能可以用來掃描叢集中 Workload 配置的安全隐患,提供巡檢詳情和報告,對結果進行分析解讀,幫助使用者實時了解目前狀态下運作應用的配置是否有安全隐患。

下面是自建 Kubernetes 叢集的巡檢詳情示例。

互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理
互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理
互動贈書 | 雲上雲下K8s多叢集如何實作叢集管理和安全治理的一緻體驗?ACK 注冊叢集安全架構一緻體驗的叢集管理一緻體驗的安全治理

作者簡介

郝樹偉(流生),阿裡雲容器服務技術專家,雲原生分布式雲團隊核心成員,專注于雲原生多叢集的統一管理和排程、混合叢集、應用傳遞和遷移等雲原生技術的研究。

點選下方連結,檢視相關視訊解讀~

https://www.bilibili.com/video/BV1WU4y1c7x7/

繼續閱讀