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. Flera containergrupper som distribueras i det virtuella nätverkets undernät kan använda en enda utgående IP-adress.
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
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
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ätta subscriptionId med ditt Azure-prenumerations-ID.
Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt Azure-konto innan du börjar.
subscription="subscriptionId" # Set Azure subscription ID 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ände en befintlig resursgrupp ändrar du värdet för den här variabeln på lämpligt 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 Portal.
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
Om du vill omdirigera trafik till Azure-brandväggen definierar du en användningsdefinierad väg i ACI-undernätet. 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 VirtualAppliance
och 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:
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 någon annan uppmaning om att göra det.
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 .