互動贈書 | 雲上雲下K8s多叢集如何實現叢集管理和安全治理的一致體驗?

阿里巴巴雲原生發表於2021-11-01
簡介:本文將主要為您介紹如何實現對公共雲 ACK 叢集和資料中心自建 Kubernetes 叢集一致體驗的叢集管理和安全治理。

作者| 郝樹偉(流生)

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

ACK 註冊叢集安全架構

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

 title=

在 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 協議確保資料加密。

 title=

非“託管式”安全接入機制

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

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

 title=

  • 叢集訪問許可權的管控收斂到 Agent 元件。Agent 元件部署在使用者自建叢集中,ACK 管控側通過 Stub/Agent 鏈路訪問使用者自建叢集的許可權收斂在 Agent 元件側,這樣可以保證使用者對自有叢集訪問許可權的全權控制。
  • Agent 元件“非侵入式”部署。Agent 元件以 Deployment 的形式部署在自建 Kubernetes 叢集中,不對自建叢集做任何更改和操作,後續會將 Agent 元件的原始碼開源出來。
  • 支援開啟安全審計。使用者可以在註冊叢集中開啟安全審計功能,任何對叢集的操作都可以進行查詢和審計。

一致體驗的叢集管理

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

建立 ACK 註冊叢集

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

 title=

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

 title=

接入自建 Kubernetes 叢集

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

$ kubectl apply -f agent.yaml

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

 title=

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

 title=

 title=

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

一致體驗的安全治理

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

例如,在一個各種專案都在使用 Kubernetes 容器叢集,且容器叢集屬於不同的雲平臺的場景下,管理員需要能夠將所有使用者和他們的活動都引導到對應的容器叢集,這樣才能知道誰在什麼時候做了什麼,你可能會遇到有多個賬戶需要分別設定不同的訪問層級,或者有越來越多的人加入、離開、變換團隊和專案的情況,如何管理這些使用者的許可權會變得越來越複雜。ACK 註冊叢集從以下幾個方面為自建 Kubernetes 叢集提供安全治理能力一致性體驗。

使用阿里雲主子賬號認證體系和 Kubernetes RBAC 鑑權體系管理叢集訪問控制

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

  • 開發人員 testuser01,授予 ack 叢集所有名稱空間的讀寫許可權,授予 idc-k8s 叢集test 名稱空間的讀寫許可權。
  • 測試人員testuser02,只授予idc-k8s叢集test名稱空間的讀寫許可權。

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

 title=

按照嚮導完成 testuser01 和 testuser02 的授權後,使用子賬號 testuser01 登入容器服務控制檯可以測試 testuser01 對 ack 叢集所有名稱空間擁有讀寫許可權,只對 idc-k8s 叢集test名稱空間擁有讀寫許可權。

 title=

 title=

使用子賬號 testuser02 登入容器服務控制檯可以測試 testuser02 看不到 ack 叢集,且只對 idc-k8s 叢集 test 名稱空間擁有讀寫許可權。
 title= title=

 title=

 title=

叢集審計

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

下面是自建 Kubernetes 叢集的日誌審計示例。 title=

 title=

配置巡檢

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

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

 title=

 title=

 title=

贈書福利

 title=

  • 你認為在本地資料中心中自建 Kubernetes 叢集面臨的最大挑戰是什麼?
  • 你認為在雲上雲下 Kubernetes 多叢集管理的場景下,最大的痛點是什麼?
  • 你認為雲原生技術為多雲/混合雲架構帶來哪些優勢?

如果你對以上任一問題有自己的觀點,11 月 1 日 18:00 前,歡迎你發表在留言區和大家探討,阿里巴巴雲原生公眾號將精選留言點贊前 3 位,各送出阿里雲容器服務技術專家郝樹偉新著《多雲和混合雲:雲原生多叢集和應用管理》一書。期待你的交流!

作者簡介

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

點選閱讀原文,檢視相關視訊解讀~

近期熱門

#從實踐出發,解鎖 Serverless 的不同面#

11 月 1 日(下週一)晚上20:00

 title=


掃描下方二維碼或者搜尋微訊號(AlibabaCloud888)新增雲原生小助手!加入社群,直播間不見不散!入群即可獲雲原生一手資訊~

 title=

版權宣告:本文內容由阿里雲實名註冊使用者自發貢獻,版權歸原作者所有,阿里雲開發者社群不擁有其著作權,亦不承擔相應法律責任。具體規則請檢視《阿里雲開發者社群使用者服務協議》和《阿里雲開發者社群智慧財產權保護指引》。如果您發現本社群中有涉嫌抄襲的內容,填寫侵權投訴表單進行舉報,一經查實,本社群將立刻刪除涉嫌侵權內容。

相關文章