Bereitstellen einer Containergruppe mit benutzerdefinierten DNS-Einstellungen
In Azure Virtual Network können Sie Containergruppen mithilfe des az container create
-Befehls in der Azure CLI bereitstellen. Sie können auch erweiterte Konfigurationseinstellungen für den az container create
-Befehl mithilfe einer YAML-Konfigurationsdatei bereitstellen.
In diesem Artikel wird veranschaulicht, wie Sie eine Containergruppe mit benutzerdefinierten DNS-Einstellungen mithilfe einer YAML-Konfigurationsdatei bereitstellen.
Weitere Informationen zum Bereitstellen von Containergruppen in einem virtuellen Netzwerk finden Sie im Artikel zum Bereitstellen in einem virtuellen Netzwerk.
Wichtig
Zuvor wurden im Prozess der Bereitstellung von Containergruppen in virtuellen Netzwerken Netzwerkprofile für die Konfiguration verwendet. Netzwerkprofile sind ab der 2021-07-01
-API-Version jedoch veraltet. Sie sollten stattdessen die neueste API-Version verwenden, die auf Subnetz-IDs basiert.
Voraussetzungen
Ein aktives Azure-Abonnement Wenn Sie über kein aktives Azure-Abonnement verfügen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Azure-Befehlszeilenschnittstelle. Die Befehlszeilenbeispiele in diesem Artikel verwenden die Azure CLI und sind für die Bash-Shell formatiert. Sie können lokal die Azure CLI installieren oder die Azure Cloud Shell nutzen.
Eine Ressourcengruppe zum Verwalten aller Ressourcen, die Sie in dieser Schrittanleitung verwenden. In diesem Artikel wird durchgängig die Beispielressourcengruppe mit dem Namen ACIResourceGroup verwendet.
az group create --name ACIResourceGroup --location westus
Begrenzungen
Die Azure DNS Resolver-IP-Adresse, 168.63.129.16, wird automatisch der Datei „/etc/resolve.conf“ in Containerinstanzen hinzugefügt, auch wenn eine benutzerdefinierte DNS-Konfiguration angewendet wird. Das Vorhandensein der Azure DNS Resolver-IP-Adresse kann falsche DNS-Auflösungen für Verteilungen mit musl-libc verursachen, z. B. Alpine Linux. Diese falsche Auflösung liegt daran, dass musl-libc DNS-Abfragen parallel sendet und die schnellste Antwort zwischenspeichert. Um dieses Problem zu vermeiden, empfehlen wir Ihnen, Verteilungen zu verwenden, die DNS-Abfragen sequenziell verarbeiten, z. B. Ubuntu und RHEL, die glibc anstelle von musl-libc verwenden.
Andere Netzwerkszenarien und Einschränkungen finden Sie unter Szenarien für virtuelle Netzwerke und Ressourcen für Azure Container Instances.
Wichtig
Die Bereitstellung von Containergruppen in einem virtuellen Netzwerk ist in den meisten Regionen, in denen Azure Container Instances verfügbar ist, für Linux-Container verfügbar. Details hierzu finden Sie unter Verfügbarkeit von Regionen und Ressourcen. Beispiele in diesem Artikel sind für die Ausführung in der Bash-Shell formatiert. Passen Sie für PowerShell oder Eingabeaufforderung die Zeilenfortsetzungszeichen entsprechend an.
Erstellen des virtuellen Netzwerks
Sie benötigen ein virtuelles Netzwerk, um eine Containergruppe mit einer benutzerdefinierten DNS-Konfiguration bereitzustellen. Dieses virtuelle Netzwerk erfordert ein Subnetz mit Berechtigungen, um Azure Container Instances-Ressourcen und eine verknüpfte private DNS-Zone zum Testen der Namensauflösung zu erstellen.
In diesem Leitfaden werden ein virtuelles Netzwerk namens aci-vnet
, ein Subnetz mit dem Namen aci-subnet
und eine private DNS-Zone mit dem Namen private.contoso.com
verwendet Wir verwenden private Azure-DNS Zonen, über die Sie sich unter Was ist privates Azure-DNS? informieren können.
Wenn Sie über ein virtuelles Netzwerk verfügen, das diese Kriterien erfüllt, können Sie unter Bereitstellen Ihrer Containergruppe fortfahren.
Tipp
Sie können die folgenden Befehle nach Bedarf mit ihren eigenen Informationen ändern.
Erstellen Sie mit dem Befehl az network vnet create das virtuelle Netzwerk. Geben Sie Adresspräfixe im Format „Classless Inter-Domain Routing“ (CIDR) ein (z. B.:
10.0.0.0/16
).az network vnet create \ --name aci-vnet \ --resource-group ACIResourceGroup \ --location westus \ --address-prefix 10.0.0.0/16
Erstellen Sie das Subnetz mit dem Befehl az network vnet subnet create. Der folgende Befehl erstellt ein Subnetz in Ihrem virtuellen Netzwerk mit einer Delegierung, die ermöglicht, Containergruppen zu erstellen. Weitere Informationen zum Arbeiten mit Subnetzen finden Sie unter Hinzufügen, Ändern oder Löschen von Subnetzen virtueller Netzwerke. Weitere Informationen zur Subnetzdelegierung finden Sie im Abschnitt „Szenarien und Ressourcen für virtuelle Azure-Netzwerke“ zu delegierten Subnetzen.
az network vnet subnet create \ --name aci-subnet \ --resource-group ACIResourceGroup \ --vnet-name aci-vnet \ --address-prefixes 10.0.0.0/24 \ --delegations Microsoft.ContainerInstance/containerGroups
Zeichnen Sie das Subnetz-ID-Schlüssel-Wertpaar aus der Ausgabe dieses Befehls auf. Sie verwenden dieses Schlüssel-Wert-Paar später in Ihrer YAML-Konfigurationsdatei. Es hat das Format
"id"
:"/subscriptions/<subscription-ID>/resourceGroups/ACIResourceGroup/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet"
.Erstellen Sie die private DNS-Zone mit dem Befehl az network private-dns zone create.
az network private-dns zone create -g ACIResourceGroup -n private.contoso.com
Verknüpfen Sie die DNS-Zone mit dem Befehl az network private-dns link vnet create mit Ihrem virtuellen Netzwerk. Der DNS-Server ist nur zum Testen der Namensauflösung erforderlich. Das
-e
-Flag aktiviert die automatische Hostnamenregistrierung, die nicht benötigt wird, sodass wir es auffalse
festlegen.az network private-dns link vnet create \ -g ACIResourceGroup \ -n aciDNSLink \ -z private.contoso.com \ -v aci-vnet \ -e false
Nachdem Sie die vorherigen Schritte abgeschlossen haben, sollten Sie eine Ausgabe mit dem endgültigen Schlüssel-Wert-Paar "virtualNetworkLinkState"
: "Completed"
sehen.
Bereitstellen Ihrer Containergruppe
Hinweis
Benutzerdefinierte DNS-Einstellungen sind derzeit nicht im Azure-Portal für Bereitstellungen von Containergruppen verfügbar. Sie müssen mit YAML-Datei, Resource Manager-Vorlage, REST-API oder einem Azure SDK bereitgestellt werden.
Kopieren Sie den folgenden YAML-Inhalt in eine neue Datei mit dem Namen custom-dns-deploy-aci.yaml. Bearbeiten Sie die folgenden Konfigurationen mit Ihren Werten:
dnsConfig
: DNS-Einstellungen für Ihre Container in Ihrer Containergruppe.nameServers
: Eine Liste der Namenserver, die für DNS-Lookups verwendet werden sollen.searchDomains
: DNS-Suffixe, die für DNS-Lookups angefügt werden sollen.
ipAddress
: Die privaten IP-Adresseinstellungen für die Containergruppe.ports
: Die zu öffnenden Ports, sofern vorhanden.protocol
: Das Protokoll (TCP oder UDP) für den geöffneten Port.
subnetIDs
: Netzwerkeinstellungen für das/die Subnetz(e) im virtuellen Netzwerk.id
: Die vollständige Resource Manager-Ressourcen-ID des Subnetzes, die Sie zuvor abgerufen haben.
Hinweis
Die DNS-Konfigurationsfelder werden derzeit nicht automatisch abgefragt, sodass diese Felder explizit ausgefüllt werden müssen.
apiVersion: '2021-07-01'
location: westus
name: pwsh-vnet-dns
properties:
containers:
- name: pwsh-vnet-dns
properties:
command:
- /bin/bash
- -c
- echo hello; sleep 10000
environmentVariables: []
image: mcr.microsoft.com/powershell:latest
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 2.0
dnsConfig:
nameServers:
- 10.0.0.10 # DNS Server 1
- 10.0.0.11 # DNS Server 2
searchDomains: contoso.com # DNS search suffix
ipAddress:
type: Private
ports:
- port: 80
subnetIds:
- id: /subscriptions/<subscription-ID>/resourceGroups/ACIResourceGroup/providers/Microsoft.Network/virtualNetworks/aci-vnet/subnets/aci-subnet
osType: Linux
tags: null
type: Microsoft.ContainerInstance/containerGroups
Stellen Sie die Containergruppe mithilfe des Befehls az container create bereit, und geben Sie dabei mit dem Parameter --file
den YAML-Dateinamen an.
az container create --resource-group ACIResourceGroup \
--file custom-dns-deploy-aci.yaml
Führen Sie den Befehl az container show aus, sobald die Bereitstellung abgeschlossen ist, um den Status anzuzeigen. Beispielausgabe:
az container show --resource-group ACIResourceGroup --name pwsh-vnet-dns -o table
Name ResourceGroup Status Image IP:ports Network CPU/Memory OsType Location
---------------- --------------- -------- ------------------------------------------ ----------- --------- --------------- -------- ----------
pwsh-vnet-dns ACIResourceGroup Running mcr.microsoft.com/powershell 10.0.0.5:80 Private 1.0 core/2.0 gb Linux westus
Führen Sie nach der Statusanzeige Running
den Befehl az container exec aus, um Bash-Zugriff innerhalb des Containers abzurufen.
az container exec --resource-group ACIResourceGroup --name pwsh-vnet-dns --exec-command "/bin/bash"
Überprüfen Sie, ob DNS wie erwartet in Ihrem Container funktioniert. Lesen Sie beispielsweise die /etc/resolv.conf
-Datei, um die richtige Konfiguration der in der YAML-Datei angegebenen DNS-Einstellungen sicherzustellen.
Hinweis
Beachten Sie, dass die Azure DNS Resolver-IP-Adresse 168.63.129.16 automatisch der Datei „/etc/resolve.conf“ in ACIs hinzugefügt wird, auch wenn eine benutzerdefinierte DNS-Konfiguration angewendet wird. Dies kann zu Auflösungsproblemen in Verteilungen führen, die DNS-Abfrageprozesse parallel verarbeiten. Weitere Informationen finden Sie im Abschnitt „Einschränkungen“.
root@wk-caas-81d609b206c541589e11058a6d260b38-90b0aff460a737f346b3b0:/# cat /etc/resolv.conf
nameserver 10.0.0.10
nameserver 10.0.0.11
nameserver 168.63.129.16
search contoso.com
Bereinigen von Ressourcen
Löschen von Containerinstanzen
Wenn Sie die von Ihnen erstellten Containerinstanz nicht mehr benötigen, löschen Sie sie mit dem Befehl az container delete:
az container delete --resource-group ACIResourceGroup --name pwsh-vnet-dns -y
Löschen von Netzwerkressourcen
Wenn Sie dieses virtuelle Netzwerk nicht erneut verwenden möchten, können Sie es mit dem Befehl az network vnet delete löschen:
az network vnet delete --resource-group ACIResourceGroup --name aci-vnet
Ressourcengruppe löschen
Wenn Sie diese Ressourcengruppe nicht außerhalb dieses Leitfadens verwenden möchten, können Sie sie mit dem Befehl az group delete löschen:
az group delete --name ACIResourceGroup
Geben Sie nach Aufforderung y
ein, wenn Sie den Vorgang ausführen möchten.
Nächste Schritte
Weitere Informationen zum Bereitstellen einer Containergruppe in einem virtuellen Netzwerk finden Sie in der Azure-Schnellstartvorlage Create an Azure container group with virtual network (Erstellen einer Azure-Containergruppe mit virtuellem Netzwerk).