Freigeben über


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.

  1. 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
    
  2. 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
    
  3. 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".

  4. 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
    
  5. 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 auf false 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).