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

通常,设置 ARO 群集时,必须指定用于部署 ARO 群集对象的资源组(如下图所示的基资源组)。 在这种情况下,可以为虚拟网络(VNET)和群集使用相同的资源组,也可以只为 VNET 选择单独的资源组。 这两个资源组均未直接对应于单个 ARO 集群,因此,您可以完全控制它们。 这意味着可以自由创建、修改或删除这些资源组中的资源。

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

显示网络安全组在典型 ARO 群集中的工作概况的关系图。

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

此关系图展示了如何在 Azure Red Hat OpenShift 中使用自定义网络安全组的概况。

常规功能和限制

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

  • 可以选择对主子网和工作子网使用相同或不同的预配置的网络安全组(NSG)。

  • 使用自己的 NSG 时,ARO RP 仍会在托管资源组中创建一个默认 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 中设置以下入站允许规则(或等效规则)。 请参阅群集的默认 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
    

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