4.2. 配置出站连接


要让对等 pod 与外部网络(如公共互联网)通信,您必须为 pod 虚拟机(VM)子网配置出站连接。这涉及设置 NAT 网关,并选择性地定义子网如何在 Azure 中与集群的虚拟网络(VNet)集成。

对等 pod 和子网
对等 pod 在专用 Azure 子网中操作,这需要显式配置出站访问。此子网可以是 OpenShift Container Platform 节点使用的默认 worker 子网,也可以是专门为对等 pod 创建的自定义子网。
VNet peering
使用单独的子网时,VNet peering 会将对等 pod VNet 连接到集群的 VNet,确保内部通信同时保持隔离。这需要在 VNets 间的非覆盖 CIDR 范围。

您可以通过两种方式配置出站连接:

  • 默认 worker 子网 :修改现有 worker 子网使其包含 NAT 网关。这更简单并重复使用集群资源,但它提供较少的隔离。
  • peer pod VNet:为对等 pod 设置专用 VNet 和子网,附加 NAT 网关,并使用集群 VNet 对等。这在额外的复杂性方面提供了更高的隔离和灵活性。

4.2.1. 为出站连接配置默认 worker 子网

您可以使用 NAT 网关配置默认 worker 子网。

先决条件

  • 已安装并进行身份验证的 Azure CLI (az)。
  • 有对 Azure 资源组和 VNet 的管理员访问权限。

流程

  1. 运行以下命令设置 AZURE_RESOURCE_GROUP 环境变量:

    $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster \
        -o jsonpath='{.status.platformStatus.azure.resourceGroupName}')
  2. 运行以下命令设置 AZURE_REGION 环境变量:

    $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP}\
        --query "{Location:location}" --output tsv) && \
        echo "AZURE_REGION: \"$AZURE_REGION\""
  3. 运行以下命令设置 AZURE_VNET_NAME 环境变量:

    $ AZURE_VNET_NAME=$(az network vnet list \
        -g "${AZURE_RESOURCE_GROUP}" --query '[].name' -o tsv)
  4. 运行以下命令设置 AZURE_SUBNET_ID 环境变量:

    $ AZURE_SUBNET_ID=$(az network vnet subnet list \
        --resource-group "${AZURE_RESOURCE_GROUP}" \
        --vnet-name "${AZURE_VNET_NAME}" --query "[].{Id:id} \
        | [? contains(Id, 'worker')]" --output tsv)
  5. 运行以下命令,为 peer pod 子网设置 NAT 网关环境变量:

    $ export PEERPOD_NAT_GW=peerpod-nat-gw
    $ export PEERPOD_NAT_GW_IP=peerpod-nat-gw-ip
  6. 运行以下命令,为 NAT 网关创建公共 IP 地址:

    $ az network public-ip create -g "${AZURE_RESOURCE_GROUP}" \
        -n "${PEERPOD_NAT_GW_IP}" -l "${AZURE_REGION}" --sku Standard
  7. 运行以下命令,创建 NAT 网关并将其与公共 IP 地址关联:

    $ az network nat gateway create -g "${AZURE_RESOURCE_GROUP}" \
        -l "${AZURE_REGION}" --public-ip-addresses "${PEERPOD_NAT_GW_IP}" \
        -n "${PEERPOD_NAT_GW}"
  8. 运行以下命令,更新 VNet 子网以使用 NAT 网关:

    $ az network vnet subnet update --nat-gateway "${PEERPOD_NAT_GW}" \
        --ids "${AZURE_SUBNET_ID}"

验证

  • 运行以下命令确认 NAT 网关已附加到 VNet 子网:

    $ az network vnet subnet show --ids "${AZURE_SUBNET_ID}" \
        --query "natGateway.id" -o tsv

    输出中包含 NAT 网关资源 ID。如果没有附加 NAT 网关,输出为空。

    输出示例

    /subscriptions/12345678-1234-1234-1234-1234567890ab/resourceGroups/myResourceGroup/providers/Microsoft.Network/natGateways/myNatGateway

其它资源

4.2.2. 为出站连接创建对等 pod VNet

要启用公共互联网访问,您可以为对等 pod 创建专用虚拟网络(VNet),附加网络地址转换(NAT)网关,创建一个子网,并使用非覆盖地址空间启用 VNet 对等。

先决条件

  • 已安装 Azure CLI (az)
  • 您已登录到 Azure。请参阅使用 Azure CLI 对 Azure 进行授权
  • 具有管理员对 Azure 资源组和托管集群的 VNet 的访问权限。
  • 您已验证了集群 VNet 无类别域间路由(CIDR)地址。默认值为 10.0.0.0/14。如果您覆盖默认值,请确保为对等 pod VNet 选择了非覆盖 CIDR 地址。例如,192.168.0.0 /16

流程

  1. 为 peer pod 网络设置环境变量:

    1. 运行以下命令设置 peer pod VNet 环境变量:

      $ export PEERPOD_VNET_NAME="${PEERPOD_VNET_NAME:-peerpod-vnet}"
      $ export PEERPOD_VNET_CIDR="${PEERPOD_VNET_CIDR:-192.168.0.0/16}"
    2. 运行以下命令来设置对等 pod 子网环境变量:

      $ export PEERPOD_SUBNET_NAME="${PEERPOD_SUBNET_NAME:-peerpod-subnet}"
      $ export PEERPOD_SUBNET_CIDR="${PEERPOD_SUBNET_CIDR:-192.168.0.0/16}"
  2. 为 Azure 设置环境变量:

    $ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster \
        -o jsonpath='{.status.platformStatus.azure.resourceGroupName}')
    $ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP}\
        --query "{Location:location}" --output tsv) && \
        echo "AZURE_REGION: \"$AZURE_REGION\""
    $ AZURE_VNET_NAME=$(az network vnet list \
        -g "${AZURE_RESOURCE_GROUP}" --query '[].name' -o tsv)
  3. 运行以下命令设置对等 pod NAT 网关环境变量:

    $ export PEERPOD_NAT_GW="${PEERPOD_NAT_GW:-peerpod-nat-gw}"
    $ export PEERPOD_NAT_GW_IP="${PEERPOD_NAT_PUBLIC_IP:-peerpod-nat-gw-ip}"
  4. 配置 VNET:

    1. 运行以下命令来创建对等 pod VNet:

      $ az network vnet create --resource-group "${AZURE_RESOURCE_GROUP}" \
          --name "${PEERPOD_VNET_NAME}" \
          --address-prefixes "${PEERPOD_VNET_CIDR}"
    2. 运行以下命令,为对等 pod VNet 创建公共 IP 地址:

      $ az network public-ip create -g "${AZURE_RESOURCE_GROUP}" \
          -n "${PEERPOD_NAT_GW_IP}" -l "${AZURE_REGION}"
    3. 运行以下命令,为对等 pod VNet 创建 NAT 网关:

      $ az network nat gateway create -g "${AZURE_RESOURCE_GROUP}" \
          -l "${AZURE_REGION}" \
          --public-ip-addresses "${PEERPOD_NAT_GW_IP}" \
          -n "${PEERPOD_NAT_GW}"
    4. 运行以下命令,在对等 pod VNet 中创建子网并附加 NAT 网关:

      $ az network vnet subnet create \
          --resource-group "${AZURE_RESOURCE_GROUP}" \
          --vnet-name "${PEERPOD_VNET_NAME}" \
          --name "${PEERPOD_SUBNET_NAME}" \
          --address-prefixes "${PEERPOD_SUBNET_CIDR}" \
          --nat-gateway "${PEERPOD_NAT_GW}"
  5. 配置虚拟网络对等连接:

    1. 运行以下命令来创建对等连接:

      $ az network vnet peering create -g "${AZURE_RESOURCE_GROUP}" \
          -n peerpod-azure-vnet-to-peerpod-vnet \
          --vnet-name "${AZURE_VNET_NAME}" \
          --remote-vnet "${PEERPOD_VNET_NAME}" --allow-vnet-access \
          --allow-forwarded-traffic
    2. 运行以下命令来同步对等连接:

      $ az network vnet peering sync -g "${AZURE_RESOURCE_GROUP}" \
          -n peerpod-azure-vnet-to-peerpod-vnet \
          --vnet-name "${AZURE_VNET_NAME}"
    3. 运行以下命令来完成 peering 连接:

      $ az network vnet peering create -g "${AZURE_RESOURCE_GROUP}" \
          -n peerpod-peerpod-vnet-to-azure-vnet \
          --vnet-name "${PEERPOD_VNET_NAME}" \
          --remote-vnet "${AZURE_VNET_NAME}" --allow-vnet-access \
          --allow-forwarded-traffic

验证

  1. 运行以下命令,从集群 VNet 检查对等连接状态:

    $ az network vnet peering show -g "${AZURE_RESOURCE_GROUP}" \
        -n peerpod-azure-vnet-to-peerpod-vnet \
        --vnet-name "${AZURE_VNET_NAME}" \
        --query "peeringState" -o tsv

    这应该返回 Connected

  2. 运行以下命令,验证 NAT 网关是否已附加到对等 pod 子网:

    $ az network vnet subnet show --resource-group "${AZURE_RESOURCE_GROUP}" \
        --vnet-name "${PEERPOD_VNET_NAME}" --name "${PEERPOD_SUBNET_NAME}" \
        --query "natGateway.id" -o tsv

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.