了解預設安全的集群 VPC 網絡
Virtual Private Cloud 4.15 and later
從版本 4.15 建立的新 VPC 群集開始,Red Hat OpenShift on IBM Cloud 引進了稱為 Secure by Default Cluster VPC Networking 的新安全功能。 使用「預設安全保護」,會有新的 VPC 設定,例如當您建立 VPC 叢集時自動建立的受管理安全群組、安全群組規則及虛擬專用端點閘道 (VPE)。 檢視以下有關 VPC 元件的詳細資訊,這些元件會在您建立 4.15 及以後版本的群集時為您建立和管理。
概觀
使用 Secure by Default Networking,當您佈建新的 Red Hat OpenShift on IBM Cloud VPC 叢集 4.15 版或更新版本時,只容許叢集運作所需的資料流量,並封鎖所有其他存取。 為了實作 Secure by Default Networking,Red Hat OpenShift on IBM Cloud 使用各種安全群組和安全群組規則來保護叢集元件。 這些安全群組及規則會自動建立並連接至工作者節點、負載平衡器及叢集相關 VPE 閘道。
Virtual Private Cloud 安全群組會過濾 Hypervisor 層次的資料流量。 不會以特定順序套用安全群組規則。 不過,只有在要求符合您指定的其中一個規則時,才允許對工作者節點提出要求。 當您透過建立入埠或出埠規則來容許單向的資料流量時,也允許反向的回應。 安全群組是附加的,表示如果工作者節點連接至多個安全群組,則安全群組中包含的所有規則都會套用至工作者節點。 較新的叢集版本在 kube-<clusterID> 安全群組中的規則可能比較舊的叢集版本更多。
新增安全群組規則以改善服務的安全,且不會岔斷功能。
虛擬私有端點 (VPE) 閘道器
當在給定的 VPC 中建立位於 Red Hat OpenShift on IBM Cloud 4.14+ 的第一個 VPC 叢集,或該 VPC 中的叢集將其主節點更新至 4.14+ 時,會針對各種 IBM Cloud 服務建立數個共用 VPE 閘道。 每個 VPC 只會建立其中一種共用 VPE 閘道類型。 VPC 中的所有叢集都共用這些服務的相同 VPE 閘道。 這些共用「VPE 閘道」會從叢集工作者節點所在的每一個區域獲指派單一「保留 IP」。
受管理安全群組
Red Hat OpenShift on IBM Cloud 會自動建立並更新 VPC 叢集的下列安全群組和規則。
| 安全群組 | 命名慣例 |
|---|---|
| 工人安全群組 | kube-<clusterID> |
| 主 VPE 閘道安全群組 | kube-vpegw-<clusterID> |
| 共用 VPE 閘道安全群組 | kube-vpegw-<vpcID> |
| 負載平衡服務安全群組 | kube-lbaas-<clusterID> |
工作者安全群組
當您建立 Red Hat OpenShift on IBM Cloud VPC 群集時,會為指定群集的所有工作者或節點建立安全群組。
- 安全群組的名稱是
kube-<clusterID>,其中<clusterID>是叢集的 ID。 - 如果稍後將新節點新增至叢集,則這些節點會自動新增至叢集安全群組。
- 負載平衡器可根據需要動態新增或移除規則。
- Red Hat OpenShift on IBM Cloud 僅監控
kube-<clusterID>安全群組中,位於節點埠範圍內的 TCP 和 UDP 傳入規則。 若 Red Hat OpenShift on IBM Cloud 偵測到節點埠範圍內存在某條規則,但沒有對應的節點埠服務,則會移除該規則。 若要允許傳入流量存取節點埠服務,請在建立節點埠服務之後(而非之前),將所需的規則新增至「kube-<clusterID>」安全群組中。 - 您在「
kube-<clusterID>」安全群組中,於節點埠範圍之外所新增的額外規則,將被 Red Hat OpenShift on IBM Cloud 忽略,並維持原狀。 - 請勿修改或移除「
kube-<clusterID>」安全群組中的預設規則,否則可能會導致叢集中的工作節點與控制平面之間的網路連線中斷。
| 說明 | 方向 | 通訊協定 | 埠或值 | 來源或目的地 |
|---|---|---|---|---|
| 容許 Pod 子網路的入埠資料流量。 | 入埠 | ICMP/ TCP / UDP | 全部 | 172.17.0.0/18 (預設子網路範圍) 或您在建立叢集時指定的自訂子網路範圍。 |
| 容許對自身的入埠存取,這容許工作者節點對工作者節點的通訊。 | 入埠 | ICMP/ TCP / UDP | 全部 | kube-<clusterID> |
| 容許入埠 ICMP (連線測試) 存取。 | 入埠 | ICMP | type=8 | 0.0.0.0/0 |
| 允許從負載平衡器 (ALB/NLB) 開啟的節點連接埠進入的流量。 在新增或移除負載平衡器時,會動態新增或移除規則。 | 入埠 | TCP | Loadbalancer 節點埠。 | kube-lbaas-<clusterID> |
| 容許對 Pod 子網路的出埠資料流量。 | 出埠 | ICMP/ TCP / UDP | 全部 | 172.17.0.0/18 (預設子網路範圍) 或您在建立叢集時指定的自訂子網路範圍。 |
| 容許將出埠資料流量傳送至主要控制平面,以容許佈建工作者節點。 | 出埠 | ICMP/ TCP / UDP | 全部 | 161.26.0.0/16 |
| 容許對自身的出埠存取,以容許工作者節點對工作者節點的通訊。 | 出埠 | ICMP/ TCP / UDP | 全部 | kube-<clusterID> |
| 容許對主要 VPE 閘道安全群組的出埠資料流量。 | 出埠 | ICMP/ TCP / UDP | 全部 | kube-vpegw-<clusterID> |
| 容許將出埠資料流量傳送至共用 VPE 閘道安全群組。 | 出埠 | ICMP/ TCP / UDP | 全部 | kube-vpegw-<vpcID> |
容許透過叢集所在 MZR 所有區域的 oauth 埠,將資料流量傳送至公用端點。* |
出埠 | TCP | Oauth 埠 | MZR 所有區域的公用端點 IP。 |
| 允許 TCP 流量通過 Ingress ALB | 出埠 | TCP | Ports:Min=443,Max=443 | ALB 公用 IP 位址 n |
允許 TCP 和 UDP 透過自訂區域 n 的 DNS 解析器傳輸流量。** |
出埠 | TCP/UDP | Min=53,Max=53 | 區域 n 中的 DNS 解析器 IP 位址。 |
| 容許流向整個 CSE 服務範圍的資料流量。 | 出埠 | ICMP/ TCP / UDP | 全部 | 166.8.0.0/14 |
| 容許所有區域的 IAM 專用端點的資料流量。 IP 可能因地區而異。 叢集所在的每個區域會新增一個規則。 | 出埠 | ICMP/ TCP / UDP | 全部 | 所有區域的 IAM 專用端點 IP 位址。 |
| 允許出站流量至實體元資料 API。 | 出埠 | ICMP/ TCP / UDP | 全部 | 169.254.169.254 |
| 4.18 and later 允許發往實例元資料 API 的出站流量。 | 出埠 | ICMP/ TCP / UDP | 全部 | 169.254.169.254 |
* 這些規則只會新增至啟用公共服務端點的群集,以允許透過 OAuth 連接埠存取 OpenShift 網路主控台和公共端點。 針對叢集所在多區域地區 (MZR) 的每一個區域新增一個規則。 如果叢集位於具有 3 個區域的 MZR 中,則會建立 3 個規則。
** Hub 及 Spoke VPC 在 VPC 上使用自訂 DNS 解析器。 資料流量必須流經每一個 DNS 解析器的 IP 位址。 透過連接埠 53,每個區域有兩個規則 ( TCP 和 UDP )。
主要 VPE 閘道安全群組
當您建立 VPC 叢集時,會在與叢集相同的 VPC 中建立「虛擬專用端點 (VPE)」閘道。 證券的名稱是 kube-vpegw-<clusterID> 在哪裡 <clusterID> 是叢集的ID。 此 VPE 網關的目的是充當叢集主節點的網關,該叢集主節點由IBM Cloud。 VPE 閘道在叢集具有工作者節點的 VPC 中的每一個區域中獲指派單一 IP 位址。
若要只容許從叢集的工作者節點存取叢集的主節點,則會為每一個叢集主節點 VPE 閘道建立安全群組。 然後會建立遠端規則,容許從叢集工作者安全群組到叢集主要 VPE 閘道上的必要埠的 Ingress 連線功能。 對於私有連線 (包括透過 VPC VPN 來的連線),若要連線至群集的私有服務端點 VPE 閘道,TCP 流量允許來自群集每個作用中工作人員池的子網路 CIDR。
| 說明 | 方向 | 通訊協定 | 埠或值 | 來源或目的地 |
|---|---|---|---|---|
| 容許從叢集工作程式安全群組到伺服器節點埠的入埠資料流量。 | 入埠 | TCP | 伺服器 URL 節點連接埠 | kube-<clusterID> |
| 容許從叢集工作者節點安全群組到 openVPN 或 Konnectivity 埠的入埠資料流量。 | 入埠 | TCP | Konnectivity 埠 | kube-<clusterID> |
| 容許從叢集工作者安全群組到 Oauth 埠的入埠資料流量。 | 入埠 | TCP | Oauth 埠 | kube-<clusterID> |
| CoreOS-enabled僅集群。 容許從叢集工作者安全群組到點火伺服器埠的入埠資料流量 | 入埠 | TCP | Ignition 伺服器埠 | kube-<clusterID> |
允許群集中每個作用中 Worker pool 的子網路的入站流量。* |
入埠 | TCP | 伺服器 URL 節點連接埠 | 子網路 CIDR |
允許群集中每個作用中 Worker pool 的子網路的入站流量。* |
入埠 | TCP | OAuth 埠 | 子網路 CIDR |
* 每個作用中工作人員池的子網路都會新增一條規則。 如果您在三個區域中都有工作人員,則會新增三個規則 (該區域中的每個子網路一個)。
共用 VPE 閘道安全群組
當您在 VPC 中配置第一個叢集時,系統會自動建立共用 VPE 閘道的安全群組。 此安全群組的名稱為 kube-vpegw-
,其中
為您的 VPC 識別碼。 此安全群組已套用至 VPC 中的所有共用 VPE 閘道,並用於控制哪些資源被允許透過這些閘道傳送流量。
當在同一 VPC 中配置每個新增的叢集時,會向此安全群組新增一則入站遠端規則,允許來自新叢集的 kube-<clusterID> 工作節點安全群組的流量。 針對 VPC 中的每一個叢集建立一個規則。 若在配置叢集時,kube-vpegw-<vpcID> 安全群組已存在,系統會識別並重複使用該群組——不會重新建立。
每次建立叢集時也會新增安全群組,而一個 VPC 最多可支援 100 個安全群組。 此限制約在 33 個叢集時達到,因此建議每個 VPC 最多設置 25 個叢集。 如需更多資訊,請參閱 VPC 配額。
| 說明 | 方向 | 通訊協定 | 來源或目的地 |
|---|---|---|---|
| 容許來自指定叢集的入埠資料流量。 | 入埠 | TCP | kube-<clusterID> |
您可以為「kube-vpegw-<vpcID>」安全群組新增入站規則,例如允許 VPC 中的 VSI 或其他資源存取共用 VPE 閘道。Red Hat OpenShift on IBM Cloud 不會移除您在正常叢集運作期間新增的規則,包括在 VPC 中配置額外叢集時所新增的規則。 有關允許 VSI 存取共用 VPE 閘道的指引,請參閱 《 為什麼我的 VSI 無法存取 VPE 閘道? 》。
執行 ibmcloud oc security-group reset 會刪除安全群組中的所有規則(包括您新增的任何規則),並僅還原預設的 Red Hat OpenShift on IBM Cloud 規則。
如果您的 VPC 中包含 VSI 或其他資源,且在任何叢集部署之前需要存取共用雲端服務端點(例如 icr.io 或 s3.direct ),您可以自行建立「kube-vpegw-<vpcID>」安全群組以及共用 VPE 閘道。 當日後在 VPC 中配置 Red Hat OpenShift on IBM Cloud 叢集時,系統會偵測到現有的安全群組並加以重複使用,同時為新叢集的執行個體安全群組新增一條入站規則。
當您自行建立共用 VPE 閘道時,請將「kube-vpegw-<vpcID>」安全群組附加至該閘道。Red Hat OpenShift on IBM Cloud 不會自動將其安全群組附加至非由其建立的閘道。
Red Hat OpenShift on IBM Cloud 根據名稱前綴來識別其所管理的共用 VPE 閘道。 由 Red Hat OpenShift on IBM Cloud 建立的閘道器採用 iks- 的命名規範。 當叢集從 VPC 中移除時,共用 VPE 閘道以及「kube-vpegw-<vpcID>」安全群組並不會被刪除。Red Hat OpenShift on IBM Cloud 不會修改其未建立的共用
VPE 閘道的預留 IP 位址。 若您將 Red Hat OpenShift on IBM Cloud 所建立的閘道重新命名(移除 iks- 前綴),Red Hat OpenShift on IBM Cloud 將停止管理該閘道的保留 IP 位址。 這是將由 Red Hat OpenShift on IBM Cloud 建立的閘道器轉移至您名下,同時不影響現有連線的官方支援方法。
在「樞紐與輻射」式的 VPC 配置中,當輻射端 VPC 將 DNS 解析任務委派給樞紐端 VPC 時,Red Hat OpenShift on IBM Cloud 會在輻射端 VPC 中建立共用 VPE 閘道,只要該處進行了叢集配置。 這能確保即使輻條與輪轂分離,連通性仍能維持。 如果 DNS 委派將輻射端點路由至集線器,則輻射閘道器不會用於 DNS 解析。 您仍須設定樞紐(hub)上共用 VPE 閘道的安全群組,以允許來自輻射點(spoke)VPC 子網的傳入流量。 如需更多資訊,請參閱 《 具備外向流量保護功能的樞紐與輻射式 VPC 注意事項 》。
負載平衡器服務安全群組
每個叢集都有一個名為「kube-lbaas-<clusterID>」的安全群組,該安全群組已套用至其所有負載平衡器(ALB 和 NLB)。 私有路徑 NLB 不支援附加安全群組。
當負載平衡器被新增、更新或移除時,此安全群組中的規則會隨之動態產生與更新。Red Hat OpenShift on IBM Cloud 會監控此安全群組中的所有進站與出站規則,並自動移除任何其無法識別為必要的多餘規則。 若執行 ibmcloud oc security-group reset,所有規則將會被刪除,並僅還原預設的 Red Hat OpenShift on IBM Cloud 規則。
此安全群組中的出站規則會將流量路由至外部埠(例如 80 號和 443 號埠)所對應的工作節點埠。 請勿修改或刪除「kube-lbaas-<clusterID>」安全群組中的任何出站規則。
限制流入公共負載平衡器的流量
一種常見的情境是限制哪些來源 IP 位址可以將流量傳送至公共負載平衡器。 若要限制特定埠(例如 TCP 的 443 埠)的傳入流量:
- 為該埠的「
kube-lbaas-<clusterID>」安全群組新增入站規則,並指定允許的來源 IP 位址或 CIDR 區塊。 您可以建立多條規則,以允許多個來源 IP 位址。 - 建立完允許的來源 IP 規則後,請刪除該埠上允許所有 IP 位址(
0.0.0.0/0)的預設進站規則。
負載平衡器所開放的每個入站埠,都必須至少有一條規則——無論是允許所有 IP 的預設規則,還是一條或多條自訂來源 IP 規則。 如果您在未先為該埠新增「允許來源 IP」規則的情況下,刪除了預設的「允許所有 IP」規則,Red Hat OpenShift on IBM Cloud 會自動重新建立「允許所有 IP」規則。
自訂 LBaaS 安全群組
如果您同時擁有公有和私有負載平衡器,並希望為每個負載平衡器設定不同的防火牆規則(例如,對公有負載平衡器限制來源 IP,同時允許所有流量傳輸至私有負載平衡器),您可以透過使用 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group 註解,將自訂安全群組綁定至特定的負載平衡器,而非使用叢集預設設定。
當您使用自訂的 LBaaS 安全群組時:
- Red Hat OpenShift on IBM Cloud 系統仍會自動建立任何缺失的必要入站規則。
- Red Hat OpenShift on IBM Cloud 絕不會移除您新增至自訂安全性群組的規則。
| 說明 | 方向 | 通訊協定 | 埠或值 | 來源或目的地 |
|---|---|---|---|---|
| 容許對負載平衡器開啟的節點埠進行出埠存取。 視負載平衡器而定,您可能有多個規則。 | 出埠 | TCP | 由負載平衡器開啟的 Node 埠。 | kube-<clusterID> |
| 負載平衡器在埠 80 上接聽,容許從該埠進行入埠存取。 | 入埠 | TCP | 公用 LB 埠。 範例 80 |
0.0.0.0/0 |
| 負載平衡器在埠 443 上接聽,容許從該埠進行入埠存取。 | 入埠 | TCP | 公用 LB 埠。 範例 443 |
0.0.0.0/0 |
使用者提供 Security Groups
當您建立 VPC 群集時,最多可提供四個您擁有的額外安全群組。
您也可以透過在負載平衡器資源中新增 service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-security-group 註解,將自訂安全群組綁定至負載平衡器。 若您同時擁有對外公開與對內私有的負載平衡器,且希望限制哪些使用者可以將流量傳送至對外公開的負載平衡器,此功能便相當實用。 當您使用自訂的「LBaaS」安全群組時,Red Hat OpenShift on IBM Cloud 會自動建立用於傳入流量的規則,但不會自動刪除您所新增的多餘規則。
如需更多資訊,請參閱《 LBaaS 自訂安全群組 》。
如需詳細資訊,請參閱 建立和管理 VPC 安全群組。
限制
- 工作者節點安全群組
- 因為 VPC 叢集裡的工作者節點存在於服務帳戶中,且未列在 VPC 基礎架構儀表板中,所以您無法建立安全群組並將其套用至工作者節點實例。 您只能修改現有的
kube-<clusterID>安全群組。 - 記載及監視
- 在 4.15 或更新版本叢集上設定記載及監視時,您必須在叢集裡安裝記載代理程式時使用專用服務端點。 如果使用公用端點,則不會儲存日誌資料。
- 使用 RHCOS 工作者節點監視叢集
- 監視代理程式依賴於作業系統中的核心標頭,但是 RHCOS 沒有核心標頭。 在此實務範例中,代理程式回到
sysdig.com以使用經過前置編譯的代理程式。 在沒有公共網路存取的群集中,此程序會失敗。現在,新的 Sysdig 部署預設已啟用 eBPF。 但是,如果您在現有群集上遇到問題,請驗證 eBPF 是否已啟用,並在必要時啟用。 另外,您也可以允許出站流量,或參閱 Sysdig 文件,以 在 air-gapped 環境中安裝代理程式。 - VPC 叢集配額
- 每次建立叢集都會向您的 VPC 新增安全群組,而 VPC 最多可包含 100 個安全群組。 此限制約在 33 個叢集時達到,因此建議每個 VPC 最多設置 25 個叢集。 如需更多資訊,請參閱 VPC 配額。
- VPC 的傳輸中加密 File Storage.
- 若要在 Secure by Default 群集中使用 EIT,您必須在
kube-<clusterID>安全群組中新增下列出站規則。- 議定書:任何
- 來源類型:任何類型
- 來源 0.0.0.0/0
- 目的地 169.254.169.254。
- 透過公用網路備份通訊
- VPC 叢集工作者節點使用專用網路來與叢集主節點進行通訊。 先前,對於已啟用公用服務端點的 VPC 叢集,如果專用網路已封鎖或無法使用,則叢集工作者節點可以撤回以使用公用網路來與叢集主節點進行通訊。 在「預設安全保護叢集」中,無法回復至公用網路,因為來自叢集工作者節點的公用出埠資料流量已封鎖。 您可能想要停用出埠資料流量保護,以容許此公用網路備份選項,但有更好的替代方案。 相反地,如果透過專用網路的工作者節點至主節點連線有暫時問題,則您可以在該時間將暫時安全群組規則新增至
kube-clusterID安全群組,以容許對叢集主節點apiserver埠的出埠資料流量。 稍後,當問題解決時,您可以移除暫時規則。 - OpenShift Data Foundation 和 Portworx 加密
- 如果您計劃在沒有公用網路存取權的叢集裡使用 OpenShift Data Foundation 或 Portworx,並且想要使用 Hyper Protect Crypto Services 或 Key Protect 進行加密,則必須建立容許存取 KMS 實例的虛擬專用端點閘道 (VPE)。 請確保從 VPC 中的每一個子網路至少將 1 個 IP 位址連結至 VPE。