IBM Cloud Docs
从专用服务端点允许列表迁移到基于上下文的限制 (CBR)

从专用服务端点允许列表迁移到基于上下文的限制 (CBR)

不再支持专用服务端点允许列表,而应使用基于上下文的限制 (CBR)。 如果集群当前已启用主私有服务端点允许列表,则无法修改允许列表,只能禁用允许列表。 完成以下步骤,迁移到使用 基于上下文的限制 (CBR)。

以下说明将介绍如何使用 CBR 规则保护群集的专用服务端点。 如果群集既有公共服务端点又有私有服务端点 (PSE),您还可以使用 CBR 保护群集的公共服务端点。

CBR 的一些优势包括

  • 一次针对一个账户中的多个群集,无需为每个群集设置列表。
  • 允许从特定 VPC 访问,而不仅仅是 IP 或子网。
  • 设置更高的限制,即最多 200 个专用 IP 和 500 个公用 IP 或子网,而不是 PSE 的最多 75 个。
  • 通过控制台、API 或 CLI 创建和管理 CBR 规则。
  • 限制公众通过 CBR 访问。 专用服务端点允许列表只限制专用服务端点流量。

准备工作

如果您已经在使用 CBR 规则保护集群,那么这些说明可能不适合您的使用情况。 相反,请使用 CBR 文档了解如何修改现有 CBR 规则,以包含专用服务端点 allowlist 子网。 有关 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 allowlist,则命令失败,错误提示此功能已禁用。 在这种情况下,您的群集无需采取进一步行动。

    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 参数必须是以逗号分隔的子网列表,这些子网是在上述步骤中在专用服务端点 allowlist 中找到的。

    为单个群集创建网络区域的示例命令。

    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. {target_[both}].

  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 的更多信息,请参阅以下链接。