Wdrażanie wystąpień kontenerów w sieci wirtualnej platformy Azure

Usługa Azure Virtual Network zapewnia bezpieczną sieć prywatną dla zasobów platformy Azure i zasobów lokalnych. Wdrażając grupy kontenerów w sieci wirtualnej platformy Azure, kontenery mogą bezpiecznie komunikować się z innymi zasobami w sieci wirtualnej.

W tym artykule pokazano, jak za pomocą polecenia az container create w interfejsie wiersza polecenia platformy Azure wdrożyć grupy kontenerów w nowej sieci wirtualnej lub istniejącej sieci wirtualnej.

Ważne

Przed wdrożeniem grup kontenerów w sieciach wirtualnych zalecamy najpierw sprawdzenie ograniczenia. W przypadku scenariuszy sieciowych i ograniczeń zobacz Scenariusze i zasoby sieci wirtualnej dla Azure Container Instances.

Ważne

Wdrażanie grupy kontenerów w sieci wirtualnej jest ogólnie dostępne dla kontenerów systemu Linux i Windows, w większości regionów, w których jest dostępna Azure Container Instances. Aby uzyskać szczegółowe informacje, zobacz dostępne regiony.

Ważne

Profile sieciowe zostały wycofane w wersji interfejsu 2021-07-01 API. Jeśli używasz tej lub nowszej wersji, zignoruj wszystkie kroki i akcje związane z profilami sieciowymi.

Przykłady w tym artykule są sformatowane dla powłoki powłoki Bash. Jeśli wolisz inną powłokę, taką jak program PowerShell lub wiersz polecenia, odpowiednio dostosuj znaki kontynuacji wiersza.

Wdrażanie w nowej sieci wirtualnej

Uwaga

Jeśli używasz zakresu adresów IP podsieci /29, aby mieć tylko 3 adresy IP. Zalecamy zawsze przejście do jednego zakresu powyżej (nigdy poniżej). Na przykład użyj zakresu adresów IP podsieci /28, aby mieć co najmniej 1 lub więcej buforu IP na grupę kontenerów. Dzięki temu można uniknąć zakleszczonych kontenerów, nie można uruchomić, uruchomić ponownie lub nawet nie można zatrzymać stanów.

Aby wdrożyć w nowej sieci wirtualnej i automatycznie utworzyć zasoby sieciowe platformy Azure, określ następujące elementy podczas wykonywania polecenia az container create:

  • Nazwa sieci wirtualnej
  • Prefiks adresu sieci wirtualnej w formacie CIDR
  • Nazwa podsieci
  • Prefiks adresu podsieci w formacie CIDR

Prefiksy adresów sieci wirtualnej i podsieci określają odpowiednio przestrzenie adresowe dla sieci wirtualnej i podsieci. Te wartości są reprezentowane w notacji Routing bez klas (CIDR, Classless Inter-Domain Routing), na przykład 10.0.0.0/16. Aby uzyskać więcej informacji na temat pracy z podsieciami, zobacz Dodawanie, zmienianie lub usuwanie podsieci sieci wirtualnej.

Po wdrożeniu pierwszej grupy kontenerów za pomocą tej metody można wdrożyć w tej samej podsieci, określając sieć wirtualną i nazwy podsieci lub profil sieciowy tworzony automatycznie przez platformę Azure. Ponieważ platforma Azure deleguje podsieć do Azure Container Instances, można wdrożyć tylko grupy kontenerów w podsieci.

Przykład

Następujące polecenie az container create określa ustawienia nowej sieci wirtualnej i podsieci. Podaj nazwę grupy zasobów, która została utworzona w regionie, w którym są dostępne wdrożenia grup kontenerów w sieci wirtualnej. To polecenie wdraża publiczny kontener microsoft aci-helloworld , który uruchamia mały Node.js serwer internetowy obsługujący statyczną stronę internetową. W następnej sekcji wdrożysz drugą grupę kontenerów w tej samej podsieci i przetestujesz komunikację między dwoma wystąpieniami kontenerów.

az container create \
  --name appcontainer \
  --resource-group myResourceGroup \
  --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

Wdrożenie w nowej sieci wirtualnej przy użyciu tej metody może potrwać kilka minut podczas tworzenia zasobów sieciowych. Po początkowym wdrożeniu dodatkowe wdrożenia grup kontenerów w tej samej podsieci będą szybciej wykonywać.

Wdrażanie w istniejącej sieci wirtualnej

Aby wdrożyć grupę kontenerów w istniejącej sieci wirtualnej:

  1. Utwórz podsieć w istniejącej sieci wirtualnej, użyj istniejącej podsieci, w której grupa kontenerów jest już wdrożona, lub użyj istniejącej podsieci opróżnionej ze wszystkich innych zasobów i konfiguracji.
  2. Wdróż grupę kontenerów za pomocą polecenia az container create i określ jedną z następujących opcji:
    • Nazwa sieci wirtualnej i nazwa podsieci
    • Identyfikator zasobu sieci wirtualnej i identyfikator zasobu podsieci, który umożliwia używanie sieci wirtualnej z innej grupy zasobów
    • Nazwa lub identyfikator profilu sieciowego, który można uzyskać za pomocą polecenia az network profile list

Przykład

Poniższy przykład wdraża drugą grupę kontenerów w tej samej utworzonej wcześniej podsieci i weryfikuje komunikację między dwoma wystąpieniami kontenera.

Najpierw pobierz adres IP pierwszej wdrożonej grupy kontenerów : appcontainer:

az container show --resource-group myResourceGroup \
  --name appcontainer \
  --query ipAddress.ip --output tsv

Dane wyjściowe wyświetla adres IP grupy kontenerów w podsieci prywatnej. Na przykład:

10.0.0.4

Teraz ustaw CONTAINER_GROUP_IP adres IP pobrany za az container show pomocą polecenia i wykonaj następujące az container create polecenie. Ten drugi kontener , commchecker, uruchamia obraz oparty na systemie Alpine Linux i wykonuje względem wget prywatnego adresu IP podsieci pierwszej grupy kontenerów.

CONTAINER_GROUP_IP=<container-group-IP-address>

az container create \
  --resource-group myResourceGroup \
  --name commchecker \
  --image alpine:3.5 \
  --command-line "wget $CONTAINER_GROUP_IP" \
  --restart-policy never \
  --vnet aci-vnet \
  --subnet aci-subnet

Po zakończeniu drugiego wdrożenia kontenera pobierz dzienniki, aby wyświetlić dane wyjściowe wget polecenia, które zostało wykonane:

az container logs --resource-group myResourceGroup --name commchecker

Jeśli drugi kontener pomyślnie komunikował się z pierwszym, dane wyjściowe są podobne do następujących:

Connecting to 10.0.0.4 (10.0.0.4:80)
index.html           100% |*******************************|  1663   0:00:00 ETA

Dane wyjściowe dziennika powinny wskazywać, że wget można było nawiązać połączenie i pobrać plik indeksu z pierwszego kontenera przy użyciu jego prywatnego adresu IP w podsieci lokalnej. Ruch sieciowy między dwiema grupami kontenerów pozostał w sieci wirtualnej.

Przykład — YAML

Grupę kontenerów można również wdrożyć w istniejącej sieci wirtualnej przy użyciu pliku YAML, szablonu Resource Manager lub innej metody programowej, takiej jak zestaw SDK języka Python.

Na przykład w przypadku korzystania z pliku YAML można wdrożyć w sieci wirtualnej z podsiecią delegowana do Azure Container Instances. Określ następujące właściwości:

  • ipAddress: ustawienia prywatnego adresu IP dla grupy kontenerów.
    • ports: porty do otwarcia, jeśli istnieją.
    • protocol: protokół (TCP lub UDP) dla otwartego portu.
  • subnetIds: Identyfikatory zasobów podsieci, które mają zostać wdrożone w
    • id: identyfikator zasobu podsieci
    • name: nazwa podsieci

Ten kod YAML tworzy grupę kontenerów o nazwie appcontaineryaml w sieci wirtualnej.

apiVersion: '2021-07-01'
location: westus
name: appcontaineryaml
properties:
  containers:
  - name: appcontaineryaml
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      ports:
      - port: 80
        protocol: TCP
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
  ipAddress:
    type: Private
    ports:
    - protocol: tcp
      port: '80'
  osType: Linux
  restartPolicy: Always
  subnetIds:
    - id: <subnet-id>
      name: default
tags: null
type: Microsoft.ContainerInstance/containerGroups

Wdróż grupę kontenerów za pomocą polecenia az container create , określając nazwę pliku YAML dla parametru --file :

az container create --resource-group myResourceGroup \
  --file vnet-deploy-aci.yaml

Po zakończeniu wdrażania uruchom polecenie az container show , aby wyświetlić jego stan. Przykładowe dane wyjściowe:

Name              ResourceGroup    Status    Image                                       IP:ports     Network    CPU/Memory       OsType    Location
----------------  ---------------  --------  ------------------------------------------  -----------  ---------  ---------------  --------  ----------
appcontaineryaml  myResourceGroup  Running   mcr.microsoft.com/azuredocs/aci-helloworld  10.0.0.5:80  Private    1.0 core/1.5 gb  Linux     westus

Czyszczenie zasobów

Usuwanie wystąpień kontenera

Po zakończeniu pracy z utworzonymi wystąpieniami kontenera usuń je za pomocą następujących poleceń:

az container delete --resource-group myResourceGroup --name appcontainer -y
az container delete --resource-group myResourceGroup --name commchecker -y
az container delete --resource-group myResourceGroup --name appcontaineryaml -y

Usuwanie zasobów sieciowych

Ta funkcja wymaga obecnie kilku dodatkowych poleceń w celu usunięcia utworzonych wcześniej zasobów sieciowych. Jeśli użyto przykładowych poleceń w poprzednich sekcjach tego artykułu w celu utworzenia sieci wirtualnej i podsieci, możesz użyć następującego skryptu, aby usunąć te zasoby sieciowe. Skrypt zakłada, że grupa zasobów zawiera jedną sieć wirtualną z jednym profilem sieciowym.

Przed wykonaniem skryptu ustaw zmienną RES_GROUP na nazwę grupy zasobów zawierającej sieć wirtualną i podsieć, która ma zostać usunięta. Zaktualizuj nazwę sieci wirtualnej, jeśli nie użyto nazwy sugerowanej aci-vnet wcześniej. Skrypt jest sformatowany dla powłoki powłoki Bash. Jeśli wolisz inną powłokę, taką jak program PowerShell lub wiersz polecenia, musisz odpowiednio dostosować przypisanie zmiennych i metody dostępu.

Ostrzeżenie

Ten skrypt usuwa zasoby! Usuwa ona sieć wirtualną i wszystkie podsieci, które zawiera. Przed uruchomieniem tego skryptu upewnij się, że nie potrzebujesz już żadnych zasobów w sieci wirtualnej, w tym wszystkich podsieci, które zawiera. Po usunięciu te zasoby są nieodwracalne.

# Replace <my-resource-group> with the name of your resource group
# Assumes one virtual network in resource group
RES_GROUP=<my-resource-group>

# Get network profile ID
# Assumes one profile in virtual network
NETWORK_PROFILE_ID=$(az network profile list --resource-group $RES_GROUP --query [0].id --output tsv)

# Delete the network profile
az network profile delete --id $NETWORK_PROFILE_ID -y

# Delete virtual network
az network vnet delete --resource-group $RES_GROUP --name aci-vnet

Następne kroki