Dela via


Konfigurera en enskild offentlig IP-adress för utgående och inkommande trafik till en containergrupp

Genom att konfigurera en containergrupp med en extern IP-adress kan externa klienter använda IP-adressen för att komma åt en container i gruppen. En webbläsare kan till exempel komma åt en webbapp som körs i en container. Men för närvarande använder en containergrupp en annan IP-adress för utgående trafik. Den här utgående IP-adressen exponeras inte programmatiskt, vilket gör övervakning av containergrupper och konfiguration av klientbrandväggsregler mer komplexa.

Den här artikeln innehåller steg för att konfigurera en containergrupp i ett virtuellt nätverk som är integrerat med Azure Firewall. Genom att konfigurera en användardefinierad väg till containergruppen och brandväggsregler kan du dirigera och identifiera trafik till och från containergruppen. Ingress och utgående containergrupp använder brandväggens offentliga IP-adress. En enda utgående IP-adress kan användas av flera containergrupper som distribueras i det virtuella nätverkets undernät som delegerats till Azure Container Instances.

I den här artikeln använder du Azure CLI för att skapa resurser för det här scenariot:

  • Containergrupper som distribueras i ett delegerat undernät i det virtuella nätverket
  • En Azure-brandvägg som distribueras i nätverket med en statisk offentlig IP-adress
  • En användardefinierad väg i containergruppernas undernät
  • En NAT-regel för brandväggs-ingress och en programregel för utgående trafik

Sedan validerar du inkommande och utgående från exempelcontainergrupper via brandväggen.

Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

Förutsättningar

Starta Azure Cloud Shell

Azure Cloud Shell är ett interaktivt gränssnitt som du kan använda för att utföra stegen i den här artikeln. Den har vanliga Azure-verktyg förinstallerat och har konfigurerats för användning med ditt konto.

Om du vill öppna Cloud Shell väljer du bara Prova från det övre högra hörnet i ett kodblock. Du kan också starta Cloud Shell i en separat webbläsarflik genom att gå till https://shell.azure.com.

När Cloud Shell öppnas kontrollerar du att Bash har valts för din miljö. Efterföljande sessioner använder Azure CLI i en Bash-miljö, Välj Kopiera för att kopiera kodblocken, klistra in dem i Cloud Shell och tryck på Retur för att köra det.

Logga in på Azure

Cloud Shell autentiseras automatiskt under det första kontot som loggas in med. Använd följande skript för att logga in med en annan prenumeration och ersätt <Subscription ID> med ditt Azure-prenumerations-ID. Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.

subscription="<subscriptionId>" # add subscription here

az account set -s $subscription # ...or use 'az login'

Mer information finns i ange en aktiv prenumeration eller logga in interaktivt

Kommentar

Om du vill ladda ned det fullständiga skriptet går du till fullständigt skript.

Kom igång

I den här självstudien används en randomiserad variabel. Om du använder en befintlig resursgrupp ändrar du värdet för den här variabeln på rätt sätt.

resourceGroup=resourceGroup$RANDOM

Azure-resursgrupp: Om du inte redan har en Azure-resursgrupp skapar du en resursgrupp med kommandot az group create . Ändra platsvärdet efter behov.

az group create --name $resourceGroup --location eastus

Distribuera ACI i ett virtuellt nätverk

I ett vanligt fall kanske du redan har ett virtuellt Azure-nätverk där du kan distribuera en containergrupp. I demonstrationssyfte skapar följande kommandon ett virtuellt nätverk och undernät när containergruppen skapas. Undernätet delegeras till Azure Container Instances.

Containergruppen kör en liten webbapp från avbildningen aci-helloworld . Som du ser i andra artiklar i dokumentationen paketar den här bilden en liten webbapp skriven i Node.js som hanterar en statisk HTML-sida.

Skapa containergruppen med kommandot az container create :

az container create \
  --name appcontainer \
  --resource-group $resourceGroup \
  --image mcr.microsoft.com/azuredocs/aci-helloworld \
  --vnet aci-vnet \
  --vnet-address-prefix 10.0.0.0/16 \
  --subnet aci-subnet \
  --subnet-address-prefix 10.0.0.0/24

Dricks

Justera värdet --subnet address-prefix för för det IP-adressutrymme som du behöver i undernätet. Det minsta undernätet som stöds är /29, vilket ger åtta IP-adresser. Vissa IP-adresser är reserverade för användning av Azure.

För användning i ett senare steg hämtar du containergruppens privata IP-adress genom att köra kommandot [az container show][az-container-show] :

aciPrivateIp="$(az container show --name appcontainer \
  --resource-group $resourceGroup \
  --query ipAddress.ip --output tsv)"

Distribuera Azure Firewall i nätverket

I följande avsnitt använder du Azure CLI för att distribuera en Azure-brandvägg i det virtuella nätverket. Bakgrund finns i Självstudie: Distribuera och konfigurera Azure Firewall med hjälp av Azure-portalen.

Använd först az network vnet subnet create för att lägga till ett undernät med namnet AzureFirewallSubnet för brandväggen. AzureFirewallSubnet är det nödvändiga namnet på det här undernätet.

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

Använd följande Azure CLI-kommandon för att skapa en brandvägg i undernätet.

Om det inte redan är installerat lägger du till brandväggstillägget i Azure CLI med kommandot az extension add :

az extension add --name azure-firewall

Skapa brandväggsresurserna med kommandot az network firewall create :

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

az network public-ip create \
  --name fw-pip \
  --resource-group $resourceGroup \
  --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 $resourceGroup \
  --vnet-name aci-vnet

Uppdatera brandväggskonfigurationen med kommandot az network firewall update :

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

Hämta brandväggens privata IP-adress med kommandot az network firewall ip-config list . Den här privata IP-adressen används i ett senare kommando.

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

Hämta brandväggens offentliga IP-adress med kommandot az network public-ip show . Den här offentliga IP-adressen används i ett senare kommando.

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

Definiera användardefinierad väg i ACI-undernät

Definiera en användningsdefinierad väg i ACI-undernätet för att omdirigera trafik till Azure-brandväggen. Mer information finns i Dirigera nätverkstrafik.

Skapa routningstabell

Kör först följande az network route-table create-kommando för att skapa routningstabellen. Skapa routningstabellen i samma region som det virtuella nätverket.

az network route-table create \
  --name Firewall-rt-table \
  --resource-group $resourceGroup \
  --location eastus \
  --disable-bgp-route-propagation true

Skapa väg

Kör az network-route-table route create för att skapa en väg i routningstabellen. Om du vill dirigera trafik till brandväggen anger du nästa hopptyp till VirtualApplianceoch skickar brandväggens privata IP-adress som nästa hoppadress.

az network route-table route create \
  --resource-group $resourceGroup \
  --name DG-Route \
  --route-table-name Firewall-rt-table \
  --address-prefix 0.0.0.0/0 \
  --next-hop-type VirtualAppliance \
  --next-hop-ip-address $fwPrivateIp

Associera routningstabell till ACI-undernät

Kör kommandot az network vnet subnet update för att associera routningstabellen med det undernät som delegerats till Azure Container Instances.

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

Konfigurera regler för brandvägg

Som standard nekar Azure Firewall (block) inkommande och utgående trafik.

Konfigurera NAT-regel för brandvägg till ACI-undernät

Skapa en NAT-regel i brandväggen för att översätta och filtrera inkommande Internettrafik till programcontainern som du startade tidigare i nätverket. Mer information finns i Filtrera inkommande Internettrafik med Azure Firewall DNAT

Skapa en NAT-regel och en samling med hjälp av kommandot az network firewall nat-rule create :

az network firewall nat-rule create \
  --firewall-name myFirewall \
  --collection-name myNATCollection \
  --action dnat \
  --name myRule \
  --protocols TCP \
  --source-addresses '*' \
  --destination-addresses $fwPublicIp \
  --destination-ports 80 \
  --resource-group $resourceGroup \
  --translated-address $aciPrivateIp \
  --translated-port 80 \
  --priority 200

Lägg till NAT-regler efter behov för att filtrera trafik till andra IP-adresser i undernätet. Andra containergrupper i undernätet kan till exempel exponera IP-adresser för inkommande trafik, eller så kan andra interna IP-adresser tilldelas till containergruppen efter en omstart.

Skapa regel för utgående program i brandväggen

Kör följande az network firewall application-rule create-kommando för att skapa en regel för utgående trafik i brandväggen. Den här exempelregeln tillåter åtkomst från det undernät som delegerats till Azure Container Instances till det fullständiga domännamnet checkip.dyndns.org. HTTP-åtkomst till webbplatsen används i ett senare steg för att bekräfta den utgående IP-adressen från Azure Container Instances.

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

Testa åtkomsten för containergrupper via brandväggen

Följande avsnitt kontrollerar att undernätet som delegerats till Azure Container Instances är korrekt konfigurerat bakom Azure-brandväggen. Föregående steg dirigerade både inkommande trafik till undernätet och utgående trafik från undernätet via brandväggen.

Testa ingress till en containergrupp

Testa inkommande åtkomst till körningen appcontainer i det virtuella nätverket genom att bläddra till brandväggens offentliga IP-adress. Tidigare lagrade du den offentliga IP-adressen i variabeln $FW_PUBLIC_IP:

echo $fwPublicIp

Utdata liknar följande:

52.142.18.133

Om NAT-regeln i brandväggen är korrekt konfigurerad visas följande när du anger brandväggens offentliga IP-adress i webbläsaren:

Browse to firewall's public IP address

Testa utgående trafik från en containergrupp

Distribuera följande exempelcontainer till det virtuella nätverket. När den körs skickar den en enda HTTP-begäran till http://checkip.dyndns.org, som visar avsändarens IP-adress (den utgående IP-adressen). Om programregeln i brandväggen är korrekt konfigurerad returneras brandväggens offentliga IP-adress.

az container create \
  --resource-group $resourceGroup \
  --name testegress \
  --image mcr.microsoft.com/azuredocs/aci-tutorial-sidecar \
  --command-line "curl -s http://checkip.dyndns.org" \
  --restart-policy OnFailure \
  --vnet aci-vnet \
  --subnet aci-subnet

Visa containerloggarna för att bekräfta att IP-adressen är samma som brandväggens offentliga IP-adress.

az container logs \
  --resource-group $resourceGroup \
  --name testegress 

Utdata liknar följande:

<html><head><title>Current IP Check</title></head><body>Current IP Address: 52.142.18.133</body></html>

Rensa resurser

När den inte längre behövs kan du använda az group delete för att ta bort resursgruppen och alla relaterade resurser på följande sätt. Parametern --no-wait återför kontrollen till kommandotolken utan att vänta på att uppgiften slutförs. Parametern --yes bekräftar att du vill ta bort resurserna utan att tillfrågas ytterligare en gång.

az group delete --name $resourceGroup --yes --no-wait

Nästa steg

I den här artikeln konfigurerar du containergrupper i ett virtuellt nätverk bakom en Azure-brandvägg. Du har konfigurerat en användardefinierad väg och NAT- och programregler i brandväggen. Med den här konfigurationen konfigurerar du en enda statisk IP-adress för inkommande och utgående från Azure Container Instances.

Mer information om hur du hanterar trafik och skyddar Azure-resurser finns i dokumentationen om Azure Firewall .