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 的管理员访问权限。
流程
运行以下命令设置
AZURE_RESOURCE_GROUP
环境变量:$ AZURE_RESOURCE_GROUP=$(oc get infrastructure/cluster \ -o jsonpath='{.status.platformStatus.azure.resourceGroupName}')
运行以下命令设置
AZURE_REGION
环境变量:$ AZURE_REGION=$(az group show --resource-group ${AZURE_RESOURCE_GROUP}\ --query "{Location:location}" --output tsv) && \ echo "AZURE_REGION: \"$AZURE_REGION\""
运行以下命令设置
AZURE_VNET_NAME
环境变量:$ AZURE_VNET_NAME=$(az network vnet list \ -g "${AZURE_RESOURCE_GROUP}" --query '[].name' -o tsv)
运行以下命令设置
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)
运行以下命令,为 peer pod 子网设置 NAT 网关环境变量:
$ export PEERPOD_NAT_GW=peerpod-nat-gw
$ export PEERPOD_NAT_GW_IP=peerpod-nat-gw-ip
运行以下命令,为 NAT 网关创建公共 IP 地址:
$ az network public-ip create -g "${AZURE_RESOURCE_GROUP}" \ -n "${PEERPOD_NAT_GW_IP}" -l "${AZURE_REGION}" --sku Standard
运行以下命令,创建 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}"
运行以下命令,更新 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
其它资源
- Azure 文档: NAT 网关概述
- Azure 文档: VNet Peering 概述
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
。
流程
为 peer pod 网络设置环境变量:
运行以下命令设置 peer pod VNet 环境变量:
$ export PEERPOD_VNET_NAME="${PEERPOD_VNET_NAME:-peerpod-vnet}"
$ export PEERPOD_VNET_CIDR="${PEERPOD_VNET_CIDR:-192.168.0.0/16}"
运行以下命令来设置对等 pod 子网环境变量:
$ export PEERPOD_SUBNET_NAME="${PEERPOD_SUBNET_NAME:-peerpod-subnet}"
$ export PEERPOD_SUBNET_CIDR="${PEERPOD_SUBNET_CIDR:-192.168.0.0/16}"
为 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)
运行以下命令设置对等 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}"
配置 VNET:
运行以下命令来创建对等 pod VNet:
$ az network vnet create --resource-group "${AZURE_RESOURCE_GROUP}" \ --name "${PEERPOD_VNET_NAME}" \ --address-prefixes "${PEERPOD_VNET_CIDR}"
运行以下命令,为对等 pod VNet 创建公共 IP 地址:
$ az network public-ip create -g "${AZURE_RESOURCE_GROUP}" \ -n "${PEERPOD_NAT_GW_IP}" -l "${AZURE_REGION}"
运行以下命令,为对等 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}"
运行以下命令,在对等 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}"
配置虚拟网络对等连接:
运行以下命令来创建对等连接:
$ 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
运行以下命令来同步对等连接:
$ az network vnet peering sync -g "${AZURE_RESOURCE_GROUP}" \ -n peerpod-azure-vnet-to-peerpod-vnet \ --vnet-name "${AZURE_VNET_NAME}"
运行以下命令来完成 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
验证
运行以下命令,从集群 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
。运行以下命令,验证 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
其它资源
- Azure 文档: NAT 网关概述
- Azure 文档: VNet Peering 概述