我有一个蓝色容器实例...我已经把它添加到vnet中了。使用内网IP地址..10.0.0.4
我只希望少数azure应用程序服务能够调用此azure容器实例公开的rest API,我如何为这些azure应用程序服务提供调用容器的能力?
干杯安德鲁
发布于 2021-09-03 09:10:49
有几种方法可以实现这一点。
一种是用这种方法Configure a single public IP address for outbound and inbound traffic to an Azure container group,你可以像你已经做的那样使用deploy an Azure Container Instance in a Virtual network。
然后,
在网络中部署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 commands在子网中创建防火墙。
如果尚未安装,请使用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防火墙。有关详细信息,请参阅Route network traffic。
创建路由表
首先,运行以下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防火墙拒绝(阻止)入站和出站流量。
在防火墙上配置到ACI子网的NAT规则
在防火墙上创建NAT rule,以将入站internet流量转换和过滤到您先前在网络中启动的应用程序容器。有关详情,请参阅Filter inbound Internet traffic with Azure Firewall DNAT
使用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替换为以空格分隔的App Services' outbound IP Addresses列表。
在防火墙上创建出站应用程序规则
运行以下az network firewall application-rule create命令,在防火墙上创建出站规则。此示例规则允许从委派给Azure容器实例的子网访问完全限定域名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另一种方法可以是Integrate your App Service with an Azure virtual network。使用Azure Virtual Network (VNets),你可以将你的许多Azure资源放在一个不可路由的网络中。VNet集成功能使您的应用程序能够访问VNet中的资源或通过a访问资源。VNet集成不会使您的应用程序能够以方式私下访问。
请找到图片示例here。然后,您可以通过Vnet-toVnet peering或Vnet-to-Vnet VPN Gateway将App Service虚拟网络与ACI虚拟网络连接起来
但是,使用此方法时,您必须集成将使用虚拟网络连接到您的ACI的所有Azure应用程序服务。
https://stackoverflow.com/questions/69039982
复制相似问题