【问题标题】:Azure Container Instance Security VPNAzure 容器实例安全 VPN
【发布时间】:2021-09-03 17:10:48
【问题描述】:

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

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

干杯 安德鲁

【问题讨论】:

    标签: azure azure-container-instances vnet


    【解决方案1】:

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

    一个是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 防火墙拒绝(阻止)入站和出站流量。

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

    在防火墙上创建一个NAT rule,以转换和过滤到您之前在网络中启动的应用程序容器的入站互联网流量。详情见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 容器实例的子网访问 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
    

    另一种方法可以是Integrate your App Service with an Azure virtual network。使用Azure Virtual Network (VNets),您可以将许多 Azure 资源放置在不可 Internet 路由的网络中。 VNet 集成功能使您的应用程序能够访问 VNet 中或通过 VNet 的资源。 VNet 集成无法让您的应用私下访问

    请查找图片示例here。然后您可以通过Vnet-toVnet peeringVnet-to-Vnet VPN Gateway 将应用服务虚拟网络与ACI 虚拟网络连接

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-09-28
      • 1970-01-01
      • 2021-11-26
      • 2023-03-08
      • 1970-01-01
      • 2021-01-01
      • 2019-04-10
      相关资源
      最近更新 更多