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. Meerdere containergroepen die zijn geïmplementeerd in het subnet van het virtuele netwerk, kunnen gebruikmaken van één uitgaand IP-adres.
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
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
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 subscriptionId vervangt door uw Azure-abonnements-id.
Als u geen Azure-abonnement hebt, kunt u een gratis Azure-account maken voordat u begint.
subscription="subscriptionId" # Set Azure subscription ID here
az account set -s $subscription # ...or use 'az login'
Zie Het actieve abonnement instellen of interactief aanmelden voor meer informatie.
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 hebt 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 dient.
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
Tip
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
Als u verkeer naar de Azure-firewall wilt omleiden, definieert u een door gebruik gedefinieerde route op het ACI-subnet. 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 VirtualAppliance
in 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:
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 --yes
parameter bevestigt dat u de resources wilt verwijderen zonder een andere 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 .