首页 > 解决方案 > Azure 容器实例安全 VPN

问题描述

我有一个 azure 容器实例...我已将其添加到 vnet 中...具有私有 IP 地址..10.0.0.4

我只希望少数 azure 应用程序服务能够调用此 azure 容器实例公开的其余 API,如何让这些 azure 应用程序服务能够调用容器?

干杯安德鲁

标签: azureazure-container-instancesvnet

解决方案


有几种方法可以实现这一目标。

一种方法是为到 Azure 容器组的出站和入站流量配置单个公共 IP 地址使用此方法,您可以在虚拟网络中部署 Azure 容器实例,就像您已经完成的那样。

然后,

在网络中部署 Azure 防火墙

首先,使用az network vnet subnet create为防火墙添加一个名为 AzureFirewallSubnet 的子网。AzureFirewallSubnet 是此子网的必需名称。

az network vnet subnet create \
  --name AzureFirewallSubnet \
  --resource-group $RESOURCE_GROUP_NAME \
  --vnet-name $aci-vnet   \
  --address-prefix 10.0.1.0/26

使用以下Azure CLI 命令在子网中创建防火墙。

如果尚未安装,请使用az extension add命令将防火墙扩展添加到 Azure CLI:

az extension add --name azure-firewall

创建防火墙资源:

az network firewall create \
  --name myFirewall \
  --resource-group $RESOURCE_GROUP_NAME \
  --location eastus

az network public-ip create \
  --name fw-pip \
  --resource-group $RESOURCE_GROUP_NAME \
  --location eastus \
  --allocation-method static \
  --sku standard
    
az network firewall ip-config create \
  --firewall-name myFirewall \
  --name FW-config \
  --public-ip-address fw-pip \
  --resource-group $RESOURCE_GROUP_NAME \
  --vnet-name $aci-vnet

使用az network firewall update命令更新防火墙配置:

az network firewall update \
  --name myFirewall \
  --resource-group $RESOURCE_GROUP_NAME

使用az network firewall ip-config list命令获取防火墙的专用 IP 地址。此私有 IP 地址将在后面的命令中使用。

FW_PRIVATE_IP="$(az network firewall ip-config list \
  --resource-group $RESOURCE_GROUP_NAME \
  --firewall-name myFirewall \
  --query "[].privateIpAddress" --output tsv)"

使用az network public-ip show 命令获取防火墙的公共 IP 地址。此公共 IP 地址将在后面的命令中使用。

FW_PUBLIC_IP="$(az network public-ip show \
  --name fw-pip \
  --resource-group $RESOURCE_GROUP_NAME \
  --query ipAddress --output tsv)"

在 ACI 子网上定义用户定义的路由

在 ACI 子网上定义用户定义的路由,以将流量转移到 Azure 防火墙。有关详细信息,请参阅路由网络流量

创建路由表

首先,运行以下az network route-table create命令来创建路由表。在与虚拟网络相同的区域中创建路由表。

az network route-table create \
  --name Firewall-rt-table \
  --resource-group $RESOURCE_GROUP_NAME \
  --location eastus \
  --disable-bgp-route-propagation true
创建路线

运行az network-route-table route create以在路由表中创建路由。要将流量路由到防火墙,请将下一跳类型设置为VirtualAppliance,并将防火墙的私有 IP 地址作为下一跳地址。

az network route-table route create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name DG-Route \
  --route-table-name Firewall-rt-table \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $FW_PRIVATE_IP
将路由表关联到 ACI 子网

运行az network vnet subnet update命令以将路由表与委派给 Azure 容器实例的子网相关联。

az network vnet subnet update \
  --name $aci-subnet \
  --resource-group $RESOURCE_GROUP_NAME \
  --vnet-name $aci-vnet \
  --address-prefixes 10.0.0.0/24 \
  --route-table Firewall-rt-table

最后,

在防火墙上配置规则

默认情况下,Azure 防火墙拒绝(阻止)入站和出站流量。

将防火墙上的 NAT 规则配置到 ACI 子网

在防火墙上创建NAT 规则,以将入站 Internet 流量转换和过滤到您之前在网络中启动的应用程序容器。有关详细信息,请参阅使用 Azure 防火墙 DNAT 过滤入站 Internet 流量

使用az network firewall nat-rule create命令创建 NAT 规则和集合:

az network firewall nat-rule create \
  --firewall-name myFirewall \
  --collection-name myNATCollection \
  --action dnat \
  --name myRule \
  --protocols TCP \
  --source-addresses '$SOURCE_ADDRESSES' \
  --destination-addresses $FW_PUBLIC_IP \
  --destination-ports 80 \
  --resource-group $RESOURCE_GROUP_NAME \
  --translated-address $ACI_PRIVATE_IP \
  --translated-port 80 \
  --priority 200

根据需要添加 NAT 规则以过滤到子网中其他 IP 地址的流量。例如,子网中的其他容器组可能会公开入站流量的 IP 地址,或者其他内部 IP 地址可以在重新启动后分配给容器组。

注意:将 $SOURCE_ADDRESSES 替换为应用服务的出站 IP 地址的空格分隔列表。

在防火墙上创建出站应用程序规则

运行以下az network firewall application-rule create e 命令在防火墙上创建出站规则。此示例规则允许从委派给 Azure 容器实例的子网访问 FQDN checkip.dyndns.org。在后续步骤中使用对站点的 HTTP 访问来确认来自 Azure 容器实例的出口 IP 地址。

az network firewall application-rule create \
  --collection-name myAppCollection \
  --firewall-name myFirewall \
  --name Allow-CheckIP \
  --protocols Http=80 Https=443 \
  --resource-group $RESOURCE_GROUP_NAME \
  --target-fqdns checkip.dyndns.org \
  --source-addresses 10.0.0.0/24 \
  --priority 200 \
  --action Allow

另一种方法是将应用服务与 Azure 虚拟网络集成。使用Azure 虚拟网络 (VNet),您可以将许多 Azure 资源放置在非 Internet 可路由网络中。VNet 集成功能使您的应用程序能够访问 VNet 中或通过 VNet 的资源。VNet 集成不会让您的应用程序可以私下访问

请在此处找到图片示例。然后,您可以通过Vnet-to-Vnet 对等互连Vnet-to-Vnet VPN 网关将应用服务虚拟网络与 ACI 虚拟网络连接起来

但是,使用此方法,您必须将所有将连接到您的 ACI 的 Azure 应用服务与虚拟网络集成。


推荐阅读