從專用服務端點白名單遷移到基於上下文的限制 (CBR)

不再支援私人服務端點的 allowlists,而應使用基於上下文的限制 (CBR)。 如果您的叢集目前已啟用主節點私有服務端點的允許清單,則無法修改該允許清單——您只能將其停用。 完成下列步驟,即可轉換為使用 基於上下文的限制 (CBR)。

以下說明介紹了使用 CBR 規則保護叢集的專用服務端點。 如果您的叢集同時具有公用和私有服務端點 (PSE),您也可以使用 CBR 保護叢集的公用服務端點。

CBR 的一些優點包括:

  • 一次定位一個帳戶中的多個集群,而不必為每個集群設定清單。
  • 允許來自特定 VPC 的訪問,而不僅僅是 IP 或子網路。
  • 將 PSE 設定為最多 200 個私人 IP 或子網路和 500 個公用 IP 或子網路的更高限制,而不是最多 75 個。
  • 從控制台、API 或 CLI 建立和管理 CBR 規則。
  • 透過 CBR 限制公眾存取。 專用服務端點白名單僅限制專用服務端點流量。

開始之前

如果您已經在使用 CBR 規則來保護集群,那麼這些說明可能不適合您的使用案例。 相反,請使用 CBR 文件以了解如何修改現有 CBR 規則以包含專用服務端點白名單子網路。 有關 CBR 的更多信息,請參閱使用 基於上下文的限制保護叢集資源 和 基於上下文的限制場景範例。

在開始建立 CBR 區域和規則之前,請先驗證您的專用服務端點允許清單是否如預期運作。 設定 CBR 後,您可以重新執行這些測試以確認相同的行為。

1 存取您的Red Hat OpenShift叢集.. 從使用位於白名單上的自訂子網路之一的專用 IP 的用戶端系統定位專用服務端點。

  1. 執行以下命令以驗證允許的 IP 是否可以連接到 PSE。

    oc get nodes
    

1 存取您的Red Hat OpenShift叢集.. 請從一個獲准的 IP 位址連線至私有服務端點,以確認您能否成功連線。

1 存取您的Red Hat OpenShift叢集.. 從使用白名單中不允許的私有 IP 的用戶端系統定位私有服務端點。

  1. 再次重新執行先前的命令以驗證不在允許清單中的 IP 是否無法連線到 PSE。

現在您已驗證您的允許清單是否按預期工作,您可以繼續遷移。

步驟 1:查看許可名單的詳細信息

  1. 取得您的 PSE 許可名單詳細資訊。

    如果在叢集上未啟用 PSE 允許列表,則該命令將失敗,並且錯誤指示此功能已停用。 在這種情況下,您的叢集不需要採取進一步的操作。

    ibmcloud oc cluster master private-service-endpoint allowlist get -c CLUSTER
    

    輸出範例

    Subnet             Type     Status
    10.138.53.64/26    System   Active
    10.30.50.0/24      Custom   Active
    10.249.94.103/32   Custom   Active
    OK
    laptop
    
  2. 查看輸出並記下自訂子網路。 這些子網路稍後會使用。

    • 系統條目會自動遷移並且可以忽略。 這些條目確保叢集工作人員被允許連接到叢集 apiserver。
    • 自訂條目是您新增的允許連接到該叢集的專用服務端點的子網路。 範例中的子網路 10.30.50.0/24 和 10.249.94.103/32 將在下一個步驟中新增到 CBR 網路區域。

步驟 2:建立網路區域

建立一個 CBR 網路區域,其中包含與現有自訂專用服務終端節點白名單相同的子網路。

在控制台中建立網路區域

  1. 導覽至 CBR 控制台。

  2. 按一下建立。

  3. 提供您的網路區域的詳細資訊。

    • 名稱:為您的網路區域命名。
    • 允許的 IP 位址:輸入您在先前步驟中找到的子網路。
  4. 按一下下一步以查看您的網路區域的詳細資訊。

  5. 按一下 「建立」 完成網路區域的建立。

使用 CLI 建立網路區域

  1. 透過執行類似於以下範例之一的命令,從 CLI 建立網路區域。

    cbr zone-create 命令語法。

    ibmcloud cbr zone-create [--name NAME] [--description DESCRIPTION] [--addresses ADDRESSES] [--excluded EXCLUDED] [--vpc VPC] [--service-ref SERVICE-REF] [--file FILE]
    

    --addresses 參數必須是您在上述步驟中在專用服務端點白名單中找到的子網路的逗號分隔清單。

    為單一集群建立網路區域的範例命令。

    ibmcloud cbr zone-create --name private-subnets-for-cluster-XXXXXX --description "Private subnets that are allowed to access the apisever of cluster XXXXXX" --addresses 10.30.50.0/24,10.249.94.103/32
    
    CBR區域建立範例1
    參數 說明
    --name 為您的網路區域命名。
    --description 提供區域的可選描述。
    --addresses 輸入您在上一個步驟中在主服務端點白名單中找到的子網路。

    為您帳戶中的所有群集建立網路區域的範例命令。

    ibmcloud cbr zone-create --name private-subnets-for-all-clusters --description "Private subnets that are allowed to access my clusters" --addresses 10.30.50.0/24,10.249.94.103/32
    
    CBR區域建立範例1
    參數 說明
    --name 為您的網路區域命名。
    --description 提供區域的可選描述。
    --addresses 輸入您在上一個步驟中在主服務端點白名單中找到的子網路。
  2. 建立 CBR 規則 以使用 CBR 保護您的叢集。 此規則引用您的集群或此帳戶中的所有集群,也引用您建立的網路區域。

步驟 3:建立 CBR 規則

建立引用您建立的網路區域的 CBR 規則。 您可以在控制台、CLI 或 API 中建立 CBR 規則。

在控制台建立CBR規則

  1. 在 CBR 控制台中導覽至您的網路區域。

  2. 按一下您的操作列表,然後按一下編輯。

  3. 在您的網路區域中新增或刪除子網路、VPC 或服務,以控制哪些資源可以存取您的一個或多個叢集。

使用 CLI 建立 CBR 規則

以下說明說明如何使用 CLI 建立網路區域。

  1. 列出您的網路區域並記下您在前面步驟中建立的網路區域的 ID。

    ibmcloud cbr zones
    
  2. 建立 CBR 規則。 您可以建立規則來保護帳戶中的單一群集或所有群集。

    cbr rule-create 命令語法。

    ibmcloud cbr rule-create [--description DESCRIPTION] [--context-attributes CONTEXT-ATTRIBUTES] [--resource-attributes RESOURCE-ATTRIBUTES] [--region REGION] [--resource RESOURCE] [--resource-group-id RESOURCE-GROUP-ID] [--resource-type RESOURCE-TYPE] [--service-instance SERVICE-INSTANCE-GUID] [--service-name SERVICE-NAME] [--zone-id ZONE-ID] [--tags TAGS] [--enforcement-mode ENFORCEMENT-MODE] [--file FILE]
    

    如果您的叢集具有公共服務端點,則必須包含 --context-attributes endpointType=public 參數,以便允許流量到達公共服務端點。 如果不包含此選項,所有公共流量都會被封鎖。

    使用前面步驟中叢集的 CLUSTER-ID 和網路區域的 NETWORK-ZONE-ID 建立 CBR 規則以僅保護該叢集的範例命令。

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "Protect private endpoint for cluster CLUSTER" --service-name containers-kubernetes --service-instance CLUSTER-ID --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID --context-attributes endpointType=public
    
    CBR規則建立範例1
    參數 說明
    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster 值表示叢集控制平面主 API。 有關Red Hat OpenShift on IBM Cloud的 API 類型的更多信息,請參閱 保護特定 API。
    --description 該規則的可選說明。
    --service-name containers-kubernetes containers-kubernetes 值指示Red Hat OpenShift on IBM Cloud作為規則的目標服務。
    --service-instance CLUSTER-ID 指定要保護的叢集的 CLUSTER-ID。
    --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID 此選項僅允許 NETWORK-ZONE-ID 區域中的資源存取叢集的專用端點。
    --context-attributes endpointType=public 此選項允許所有資源存取叢集的公共端點。
    networkZoneId 指定您先前建立的區域的 NETWORK-ZONE-ID。

    使用前面步驟中網路區域的 NETWORK-ZONE-ID 建立 CBR 規則以保護此帳戶中的所有叢集的範例命令。

    ibmcloud cbr rule-create --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster --description "Protect private endpoint for all clusters" --service-name containers-kubernetes --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID --context-attributes endpointType=public
    
    CBR規則建立範例2
    參數 說明
    --api-types crn:v1:bluemix:public:containers-kubernetes::::api-type:cluster 值表示叢集控制平面主 API。 有關Red Hat OpenShift on IBM Cloud的 API 類型的更多信息,請參閱 保護特定 API。
    --description 該規則的可選說明。
    --service-name containers-kubernetes 值指示Red Hat OpenShift on IBM Cloud作為規則的目標服務。
    --context-attributes endpointType=private,networkZoneId=NETWORK-ZONE-ID 此選項僅允許 NETWORK-ZONE-ID 區域中的資源存取叢集的專用端點。
    --context-attributes endpointType=public 此選項允許所有資源存取叢集的公共端點。
    networkZoneId 指定您先前建立的區域的 NETWORK-ZONE-ID。

建立規則時,如果您看到錯誤訊息,顯示 A rule with the same resource attributes already exists,那麼您已經有一個 CBR 規則來保護您的叢集。 在這種情況下,您必須更新現有規則以新增網路區域。 有關更多信息,請參閱 CBR 規則更新 文件。

步驟 4:停用專用服務端點白名單

現在,您的叢集的專用服務終端節點已受 CBR 規則保護,您可以停用您的專用服務終端節點白名單。

執行下列指令。

ibmcloud oc cluster master private-service-endpoint allowlist disable -c CLUSTER

步驟 5:測試 CBR 規則

既然 CBR 規則正在保護叢集的專用服務端點,請驗證它是否如預期運作。 運行您 之前完成 的相同測試。

  1. {[目標_兩者]}。

  2. 使用針對專用服務端點的 kubeconfig 對此叢集執行下列命令。

    oc get nodes
    
  3. 從使用位於您建立的網路區域中的子網路之一的私有 IP 的用戶端系統測試此命令(以驗證是否有效),然後從使用不屬於任何子網路的私有IP 的用戶端系統測試此命令。

如果您發現行為不符合您的預期,請檢查 containers-kubernetes 服務是否存在可能適用於您的叢集的其他 CBR 規則,因為這些規則也可能會影響叢集存取。

步驟 6:新增或刪除可以存取叢集的子網

現在您正在使用 CBR 規則來保護集群,您可以修改網路區域以指定哪些子網路可以存取您的集群。

從控制台修改您的網路區域

  1. 在 CBR 控制台中導覽至您的網路區域。

  2. 選擇您的區域,然後按一下操作列表,然後按一下編輯。

  3. 在您的網路區域中新增或刪除子網路、VPC 或服務,以控制哪些資源可以存取所選叢集。

從 CLI 修改您的網路區域

若要新增可以存取叢集的子網,您可以使用 cbr zone-update 命令。

ibmcloud cbr zone-update <NETWORK-ZONE-ID> --name <NETWORK-ZONE-NAME> --addresses <EXISTING-SUBNETS>,<NEW-SUBNETS>

查看先前為帳戶中的所有叢集建立的網路區域範例,其中包含兩個子網路 10.30.50.0/24 和 10.249.94.103/32。 新增第三個子網路 10.10.10.0/24 範例命令如下。

ibmcloud cbr zone-update <NETWORK-ZONE-ID> --name private-subnets-for-all-clusters --description "Private subnets that are allowed to access my clusters" --addresses 10.30.50.0/24,10.249.94.103/32,10.10.10.0/24

您必須包含該網路區域中的所有現有條目以及要新增的條目。 您為 --addresses 指定的值將取代該網路區域中的目前位址或子網路清單。

若要從區域中刪除子網,您可以使用相同的命令並省略要從 --addresses 值中刪除的子網路。 在這種情況下,僅包含您仍希望允許存取叢集的子網路。

從專用服務端點中刪除基於上下文的限制

從主控台刪除規則

  1. 在 CBR 控制台中導覽至您的規則。

  2. 選擇您的規則,然後按一下操作列表,然後按一下刪除。

  3. 在您的網路區域中新增或刪除子網路、VPC 或服務,以控制哪些資源可以存取您選擇的叢集。

從 CLI 中刪除規則

您可以使用 ibmcloud cbr rule-delete <RULE-ID> 或 ibmcloud cbr rule-update <RULE-ID> 命令刪除 CBR 規則。

若要從叢集或所有叢集中完全刪除 CBR 保護,您必須刪除或停用影響叢集的所有 CBR 規則。

如果使用 ibmcloud cbr rule-update 命令停用或啟用現有規則,則除了 --enforcement-mode disabled 參數之外,還必須指定目前規則的所有屬性,否則您省略的屬性將從規則中刪除。

下一步

如需進一步了解 CBR,請參閱以下連結。