Share via


Eén openbaar IP-adres configureren voor uitgaand en inkomend verkeer naar een containergroep

Door een containergroep met een extern IP-adres in te stellen, kunnen externe clients het IP-adres gebruiken voor toegang tot een container in de groep. Een browser heeft bijvoorbeeld toegang tot een web-app die wordt uitgevoerd in een container. Momenteel gebruikt een containergroep echter een ander IP-adres voor uitgaand verkeer. Dit uitgaande IP-adres wordt niet programmatisch weergegeven, waardoor het bewaken en configureren van clientfirewallregels voor containergroepen complexer wordt.

Dit artikel bevat stappen voor het configureren van een containergroep in een virtueel netwerk dat is geïntegreerd met Azure Firewall. Door een door de gebruiker gedefinieerde route in te stellen voor de containergroep en firewallregels, kunt u verkeer naar en van de containergroep routeren en identificeren. Containergroep voor inkomend en uitgaand verkeer gebruikt het openbare IP-adres van de firewall. Eén uitgaand IP-adres kan worden gebruikt door meerdere containergroepen die zijn geïmplementeerd in het subnet van het virtuele netwerk dat is gedelegeerd aan Azure Container Instances.

In dit artikel gebruikt u de Azure CLI om de resources voor dit scenario te maken:

  • Containergroepen die zijn geïmplementeerd op een gedelegeerd subnet in het virtuele netwerk
  • Een Azure-firewall geïmplementeerd in het netwerk met een statisch openbaar IP-adres
  • Een door de gebruiker gedefinieerde route in het subnet van de containergroepen
  • Een NAT-regel voor inkomend verkeer van firewalls en een toepassingsregel voor uitgaand verkeer

Vervolgens valideert u inkomend en uitgaand verkeer van voorbeeldcontainergroepen via de firewall.

Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

Vereisten

Azure Cloud Shell starten

Azure Cloud Shell is een gratis interactieve shell waarmee u de stappen in dit artikel kunt uitvoeren. In deze shell zijn algemene Azure-hulpprogramma's vooraf geïnstalleerd en geconfigureerd voor gebruik met uw account.

Als u Cloud Shell wilt openen, selecteert u Proberen in de rechterbovenhoek van een codeblok. U kunt Cloud Shell ook openen in een afzonderlijk browsertabblad door naar https://shell.azure.com te gaan.

Wanneer Cloud Shell wordt geopend, controleert u of Bash is geselecteerd voor uw omgeving. Volgende sessies gebruiken Azure CLI in een Bash-omgeving, selecteer Kopiëren om de codeblokken te kopiëren, plak deze in Cloud Shell en druk op Enter om deze uit te voeren.

Aanmelden bij Azure

Cloud Shell wordt automatisch geverifieerd onder het eerste account waarmee is aangemeld. Gebruik het volgende script om u aan te melden met een ander abonnement, waarbij u <Subscription ID> uw Azure-abonnements-id vervangt. Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.

subscription="<subscriptionId>" # add subscription here

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

Zie Voor meer informatie het instellen van een actief abonnement of het interactief aanmelden

Notitie

Als u het volledige script wilt downloaden, gaat u naar het volledige script.

Aan de slag

In deze zelfstudie wordt gebruikgemaakt van een gerandomiseerde variabele. Als u een bestaande resourcegroep gebruikt, wijzigt u de waarde van deze variabele op de juiste manier.

resourceGroup=resourceGroup$RANDOM

Azure-resourcegroep: Als u nog geen Azure-resourcegroep hebt, maakt u een resourcegroep met de opdracht az group create . Wijzig de locatiewaarde naar wens.

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

ACI implementeren in een virtueel netwerk

In een typisch geval hebt u mogelijk al een virtueel Azure-netwerk waarin een containergroep moet worden geïmplementeerd. Voor demonstratiedoeleinden maken de volgende opdrachten een virtueel netwerk en subnet wanneer de containergroep wordt gemaakt. Het subnet wordt gedelegeerd aan Azure Container Instances.

De containergroep voert een kleine web-app uit vanuit de aci-helloworld installatiekopieën. Zoals wordt weergegeven in andere artikelen in de documentatie, verpakt deze afbeelding een kleine web-app die is geschreven in Node.js die een statische HTML-pagina gebruikt.

Maak de containergroep met de opdracht 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

Fooi

Pas de waarde aan van --subnet address-prefix de IP-adresruimte die u nodig hebt in uw subnet. Het kleinste ondersteunde subnet is /29, dat acht IP-adressen biedt. Sommige IP-adressen zijn gereserveerd voor gebruik door Azure.

Voor gebruik in een latere stap haalt u het privé-IP-adres van de containergroep op door de opdracht [az container show][az-container-show] uit te voeren:

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

Azure Firewall implementeren in het netwerk

In de volgende secties gebruikt u de Azure CLI om een Azure-firewall in het virtuele netwerk te implementeren. Zie Zelfstudie: Azure Firewall implementeren en configureren met behulp van Azure Portal voor achtergrondinformatie.

Gebruik eerst het az network vnet subnet create om een subnet met de naam AzureFirewallSubnet toe te voegen voor de firewall. AzureFirewallSubnet is de vereiste naam van dit subnet.

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

Gebruik de volgende Azure CLI-opdrachten om een firewall te maken in het subnet.

Als deze nog niet is geïnstalleerd, voegt u de firewallextensie toe aan de Azure CLI met behulp van de opdracht az extension add :

az extension add --name azure-firewall

Maak de firewall-resources met behulp van de opdracht 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

Werk de firewallconfiguratie bij met behulp van de opdracht az network firewall update :

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

Haal het privé-IP-adres van de firewall op met behulp van de opdracht az network firewall ip-config list . Dit privé-IP-adres wordt gebruikt in een latere opdracht.

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

Haal het openbare IP-adres van de firewall op met behulp van de opdracht az network public-ip show . Dit openbare IP-adres wordt gebruikt in een latere opdracht.

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

Door de gebruiker gedefinieerde route definiëren in het ACI-subnet

Definieer een door gebruik gedefinieerde route op het ACI-subnet om verkeer om te leiden naar de Azure-firewall. Zie Netwerkverkeer routeren voor meer informatie.

Routetabel maken

Voer eerst de volgende opdracht az network route-table create uit om de routetabel te maken. Maak de routetabel in dezelfde regio als het virtuele netwerk.

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

Route maken

Voer az network-route-table route create uit om een route in de routetabel te maken. Als u verkeer naar de firewall wilt routeren, stelt u het volgende hoptype VirtualAppliancein op en geeft u het privé-IP-adres van de firewall door als het volgende hopadres.

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

Routetabel koppelen aan ACI-subnet

Voer de opdracht az network vnet subnet update uit om de routetabel te koppelen aan het subnet dat is gedelegeerd aan 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

Regels voor firewall configureren

Standaard weigert Azure Firewall (blokken) inkomend en uitgaand verkeer.

NAT-regel configureren voor firewall naar ACI-subnet

Maak een NAT-regel op de firewall om binnenkomend internetverkeer te vertalen en te filteren naar de toepassingscontainer die u eerder in het netwerk hebt gestart. Zie Inkomend internetverkeer filteren met Azure Firewall DNAT voor meer informatie

Maak een NAT-regel en -verzameling met behulp van de opdracht 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

Voeg zo nodig NAT-regels toe om verkeer te filteren op andere IP-adressen in het subnet. Andere containergroepen in het subnet kunnen bijvoorbeeld IP-adressen beschikbaar maken voor inkomend verkeer, of andere interne IP-adressen kunnen worden toegewezen aan de containergroep nadat het opnieuw is opgestart.

Regel voor uitgaande toepassing maken op de firewall

Voer de volgende opdracht az network firewall application-rule create uit om een uitgaande regel op de firewall te maken. Met deze voorbeeldregel is toegang toegestaan vanuit het subnet dat is gedelegeerd aan Azure Container Instances naar de FQDN checkip.dyndns.org. HTTP-toegang tot de site wordt in een latere stap gebruikt om het UITGAANDE IP-adres van Azure Container Instances te bevestigen.

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

Toegang tot containergroepen testen via de firewall

In de volgende secties wordt gecontroleerd of het subnet dat is gedelegeerd aan Azure Container Instances correct is geconfigureerd achter de Azure-firewall. In de vorige stappen is zowel binnenkomend verkeer naar het subnet als uitgaand verkeer van het subnet via de firewall gerouteerd.

Inkomend verkeer naar een containergroep testen

Test binnenkomende toegang tot het appcontainer actieve netwerk in het virtuele netwerk door naar het openbare IP-adres van de firewall te bladeren. Eerder hebt u het openbare IP-adres opgeslagen in variabele $FW_PUBLIC_IP:

echo $fwPublicIp

De uitvoer ziet er ongeveer zo uit:

52.142.18.133

Als de NAT-regel op de firewall juist is geconfigureerd, ziet u het volgende wanneer u het openbare IP-adres van de firewall invoert in uw browser:

Browse to firewall's public IP address

Uitgaand verkeer van een containergroep testen

Implementeer de volgende voorbeeldcontainer in het virtuele netwerk. Wanneer deze wordt uitgevoerd, wordt één HTTP-aanvraag verzonden naar http://checkip.dyndns.org, waarin het IP-adres van de afzender (het uitgaande IP-adres) wordt weergegeven. Als de toepassingsregel op de firewall juist is geconfigureerd, wordt het openbare IP-adres van de firewall geretourneerd.

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

Bekijk de containerlogboeken om te bevestigen dat het IP-adres hetzelfde is als het openbare IP-adres van de firewall.

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

De uitvoer ziet er ongeveer zo uit:

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

Resources opschonen

Wanneer u deze niet meer nodig hebt, kunt u az group delete gebruiken om de resourcegroep en alle gerelateerde resources als volgt te verwijderen. De parameter --no-wait retourneert het besturingselement naar de prompt zonder te wachten totdat de bewerking is voltooid. De parameter --yes bevestigt dat u de resources wilt verwijderen, zonder een extra prompt om dit te doen.

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

Volgende stappen

In dit artikel stelt u containergroepen in een virtueel netwerk in achter een Azure-firewall. U hebt een door de gebruiker gedefinieerde route en NAT- en toepassingsregels op de firewall geconfigureerd. Met behulp van deze configuratie stelt u één statisch IP-adres in voor inkomend en uitgaand verkeer van Azure Container Instances.

Zie de documentatie van Azure Firewall voor meer informatie over het beheren van verkeer en het beveiligen van Azure-resources .