从专用服务端点允许列表迁移到基于上下文的限制 (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 属于允许列表中的自定义子网之一。
-
运行以下命令验证允许的 IP 是否可以连接 PSE。
oc get nodes
1 访问您的Red Hat OpenShift集群。 从一个 IP 地址锁定私人服务端点,以验证您是否可以连接。
1 访问您的Red Hat OpenShift集群。 从使用允许列表不允许的专用 IP 的客户端系统锁定专用服务端点。
- 再次运行之前的命令,确认不在允许列表中的 IP 无法连接 PSE。
现在,您已经验证了允许列表是否按预期运行,可以继续迁移了。
步骤 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
-
查看输出结果并记下自定义子网。 这些子网将在后面使用。
- 系统条目会自动迁移,可以忽略。 这些条目确保允许群集工作者连接到群集 apiserver。
- 自定义条目是您添加的允许连接到该群集专用服务端点的子网。 下一步将把示例中的子网“
10.30.50.0/24
和”10.249.94.103/32
添加到 CBR 网络区域。
步骤 2:创建网络区域
创建一个 CBR 网络区域,其中包含与现有自定义专用服务端点允许列表相同的子网。
在控制台中创建网络区域
-
单击创建。
-
提供网络区域的详细信息。
- 名称:为网络区域命名。
- 允许的 IP 地址:输入上一步中找到的子网。
-
单击下一步查看网络区域的详细信息。
-
单击创建完成网络区域的创建。
使用 CLI 创建网络区域
-
通过 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
输入上一步在主服务端点允许列表中找到的子网。 -
创建 CBR 规则,用 CBR 保护群集。 此规则引用您的群集或此账户中的所有群集,并引用您创建的网络区域。
步骤 3:创建 CBR 规则
创建一条 CBR 规则,引用您创建的网络区域。 您可以在控制台、CLI 或 API 中创建 CBR 规则。
在控制台中创建 CBR 规则
-
在 CBR 控制台导航到网络区域。
-
单击“操作列表”,然后单击“编辑”。
-
在网络区域中添加或删除子网、VPC 或服务,以控制哪些资源可以访问一个或多个群集。
使用 CLI 创建 CBR 规则
以下说明介绍了如何使用 CLI 创建网络区域。
-
列出您的网络区,并记下您在前面步骤中创建的网络区 ID。
ibmcloud cbr zones
-
创建 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 规则正在保护群集的私有服务端点,请验证其是否按预期运行。 运行 之前完成的 相同测试。
-
{target_[both}].
-
使用以专用服务端点为目标的 "
kubeconfig
对该群集运行以下命令。oc get nodes
-
从使用位于您创建的网络区域中的某个子网的私有 IP 的客户端系统测试该命令(验证命令是否有效),然后从使用不位于网络区域中的任何子网的私有 IP 的客户端系统测试该命令(验证命令是否失败并超时)。
如果发现行为与预期不同,请检查 "containers-kubernetes
服务的其他 CBR 规则是否适用于群集,因为这些规则可能也会影响群集访问。
步骤 6:添加或删除可访问群集的子网
既然使用 CBR 规则保护群集,就可以修改网络区域,指定哪些子网可以访问群集。
从控制台修改网络区域
-
在 CBR 控制台中导航到网络区域。
-
选择区域,然后单击操作列表并单击编辑。
-
在网络区域中添加或删除子网、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
值中省略要删除的子网。 在这种情况下,只包含您仍希望允许访问群集的子网。
从专用服务端点移除基于上下文的限制
从控制台删除规则
-
导航到 CBR 控制台中的规则。
-
选择您的规则,然后单击操作列表并单击删除。
-
在网络区域中添加或删除子网、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 的更多信息,请参阅以下链接。
- [使用基于上下文的限制保护群集资源/docs/openshift]?topic=openshift-cbr&interface=ui)。
- 基于情境的限制示例。
- CBR CLI 参考。