你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将自己的网络安全组 (NSG) 引入 Azure Red Hat OpenShift (ARO) 群集

通常,设置 ARO 群集时,必须指定用于部署 ARO 群集对象的资源组(在下图中称为基本资源组)。 在这种情况下,可以为虚拟网络 (VNET) 和群集使用相同的资源组,也可以只为 VNET 选择单独的资源组。 这两个资源组都不与单个 ARO 群集直接对应,因而你对其具有完全控制权。 这意味着你可以自由创建、修改或删除这些资源组中的资源。

在群集创建过程中,ARO 资源提供程序 (RP) 会建立特定于群集需求的专用资源组。 此组包含各种特定于群集的资源,例如节点 VM、负载均衡器和网络安全组 (NSG),如下图中的受管理资源组所示。 受管理资源组受到严格保护,禁止对其内容进行任何修改,包括链接到群集创建期间指定的 VNET 子网的 NSG。 在某些情况下,ARO RP 生成的 NSG 可能不遵守某些组织的安全策略。

概述网络安全组在典型 ARO 群集中的工作原理的示意图。

本文介绍如何使用“自带”网络安全组 (NSG) 功能将你自己的驻留在基本/VNET 资源组 (RG) 中的预配置 NSG(在下图中显示为 BYO-NSG)附加到 ARO 群集子网。 由于你拥有此预配置的 NSG,因此可以在 ARO 群集的生存期内添加/移除规则。

概述如何将自己的网络安全组引入 Azure Red Hat OpenShift 的示意图。

常规功能和限制

  • 在创建群集之前,需要将预配置的 NSG 附加到主子网和辅助角色子网。 未能将预配置的 NSG 附加到这两个子网会导致错误。

  • 可以选择对主子网和辅助角色子网使用相同或不同的预配置 NSG。

  • 使用自己的 NSG 时,ARO RP 仍会在受管理资源组(默认 NSG)中创建 NSG,但此 NSG 不会附加到辅助角色子网或主子网。

  • 无法在现有 ARO 群集上启用预配置的 NSG 功能。 目前,只能在创建群集时启用此功能。

  • 预配置的 NSG 选项无法从 Azure 门户进行配置。

  • 如果在预览版期间使用了此功能,则现有的预配置群集现在完全受支持。

注意

如果使用“自带”NSG 功能并想要使用 NSG 流日志,请参阅 Azure 网络观察程序文档中网络安全组的流日志记录,而不是 ARO 特定的流日志文档(这不适用于自带 NSG 功能)。

使用规则

警告

在 ARO 群集中创建 Kubernetes LoadBalancer 类型服务或 OpenShift 路由时,预配置的 NSG 不会自动更新规则。 因此,必须根据需要手动更新这些规则。 此行为不同于原始 ARO 行为,原始行为是在这种情况下以编程方式更新默认 NSG。

  • 在 ARO 群集中创建 Kubernetes LoadBalancer 类型服务或 OpenShift 路由时,默认 ARO 群集 NSG(使用此功能时未附加到任何子网)仍会更新规则。

  • 可以将预配置的 NSG 从使用此功能创建的群集的子网中拆离。 这会导致群集中出现没有 NSG 的子网。 然后,可以将一组不同的预配置 NSG 附加到群集。 或者,也可以将 ARO 默认 NSG 附加到群集子网(此时群集会像未使用此功能的任何其他群集一样)。

  • 预配置的 NSG 不应具有以下类型的 INBOUND/OUTBOUND DENY 规则,因为这些规则可能会干扰群集的操作和/或阻碍 ARO 支持/SRE 团队提供支持/管理。 (此处,子网指示子网中的任何或所有 IP 地址以及对应于该子网的所有端口):

    • 主子网 ←→ 主子网

    • 辅助角色子网 ←→ 辅助角色子网

    • 主子网 ←→ 辅助角色子网

    • 如果规则配置错误,则需借助 Azure Monitor 使用的信号来排除预配置的 NSG 故障。

  • 若要允许传入到 ARO 公共群集的流量,请在 NSG 中设置以下 INBOUND ALLOW 规则(或等效规则)。 请参阅群集的默认 NSG(获取特定详细信息)和部署中显示的示例 NSG。 即使 NSG 中没有此类规则,也可以创建群集。

    • 若要访问 API 服务器 → 从 Internet(或首选源 IP)到主子网上的端口 6443。
    • 若要访问 OpenShift 路由器(因此访问 OpenShift 控制台和 OpenShift 路由)→ 从 Internet(或首选源 IP)到群集公共负载均衡器上的默认 v4 公共 IP 上的端口 80 和 443。
    • 若要访问任何负载均衡器类型 Kubernetes 服务 → 从 Internet(或首选源 IP)到与群集公共负载均衡器上的服务对应的公共 IP 上的服务端口。

部署

创建 VNET 并创建和配置预配置的 NSG

  1. 创建 VNET,然后在其中创建主子网和辅助角色子网。

  2. 使用默认规则(或根本没有规则)创建预配置 NSG,并将其附加到主子网和辅助角色子网。

创建 ARO 群集并更新预配置的 NSG

  1. 创建群集。

    az aro create \
    --resource-group BASE_RESOURCE_GROUP_NAME \
    --name CLUSTER_NAME \
    --vnet VNET_NAME \
    --master-subnet MASTER_SUBNET_NAME \
    --worker-subnet WORKER_SUBNET_NAME \
    --client-id CLUSTER_SERVICE_PRINCIPAL_ID \
    --client-secret CLUSTER_SERVICE_PRINCIPAL_SECRET \
    --enable-preconfigured-nsg
    
  2. 根据要求更新预配置的 NSG,同时考虑功能和限制中提到的要点。

    以下示例包含群集公共负载均衡器,如屏幕截图/CLI 输出中所示:

    群集的公共负载均衡器的屏幕截图,如命令的输出所示。

    $ oc get svc | grep tools
    tools LoadBalancer 172.30.182.7 20.141.176.3 80:30520/TCP 143m
    $ $ oc get svc -n openshift-ingress | grep Load
    router-default LoadBalancer 172.30.105.218 20.159.139.208 80:31157/TCP,443:31177/TCP 
    5d20
    

    显示入站和出站安全规则的屏幕截图。