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 użyciem sieci wirtualnej należy delegować podsieci
- Przed wdrożeniem grup kontenerów w sieciach wirtualnych zalecamy najpierw sprawdzenie ograniczenia. Aby zapoznać się ze scenariuszami i ograniczeniami sieci wirtualnych, zobacz Scenariusze i zasoby sieci wirtualnej dla usługi Azure Container Instances.
- Wdrażanie grupy kontenerów w sieci wirtualnej jest ogólnie dostępne dla kontenerów systemów Linux i Windows, w większości regionów, w których jest dostępna usługa 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ą formatowane dla powłoki Bash. Jeśli wolisz inną powłokę, taką jak program PowerShell lub wiersz polecenia, odpowiednio dostosuj znaki kontynuacji wiersza.
Wymagania wstępne
Do zarządzania wszystkimi zasobami używanymi w poniższych przykładach potrzebna jest grupa zasobów. Aby utworzyć grupę zasobów, użyj polecenia az group create:
az group create --name myResourceGroup --location eastus
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 dla grupy 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 na platformie 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 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 usługi 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 kolejne wdrożenia grup kontenerów do tej samej podsieci są szybsze.
Wdrażanie w istniejącej sieci wirtualnej
Aby wdrożyć grupę kontenerów w istniejącej sieci wirtualnej:
- 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 wszystkich innych zasobów i konfiguracji. Podsieć używana dla grup kontenerów może zawierać tylko grupy kontenerów. Przed wdrożeniem grupy kontenerów w podsieci należy jawnie delegować podsieć przed zainicjowaniem obsługi administracyjnej. Po delegowaniu podsieć może być używana tylko dla grup kontenerów. Jeśli spróbujesz wdrożyć zasoby inne niż grupy kontenerów w delegowanej podsieci, operacja nie powiedzie się.
- 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 korzystanie z sieci wirtualnej z innej grupy zasobów
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 kontenerów.
Najpierw uzyskaj 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 prywatnego adresu IP podsieci wget
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 jego 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 usługi 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 usługi 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 wid
: identyfikator zasobu podsieciname
: 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
Usuń wystąpienia 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óre mają zostać usunięte. Zaktualizuj nazwę sieci wirtualnej, jeśli nie użyto nazwy sugerowanej aci-vnet
wcześniej. Skrypt jest sformatowany dla 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 jej podsieci. Przed uruchomieniem tego skryptu upewnij się, że nie potrzebujesz już żadnych zasobów w sieci wirtualnej, w tym wszystkich zawartych w niej podsieci. 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
Aby wdrożyć nową sieć wirtualną, podsieć, profil sieciowy i grupę kontenerów przy użyciu szablonu usługi Resource Manager, zobacz Tworzenie grupy kontenerów platformy Azure z siecią wirtualną.
Aby wdrożyć usługi Azure Container Instances, które mogą ściągać obrazy z usługi Azure Container Registry za pośrednictwem prywatnego punktu końcowego, zobacz Deploy to Azure Container Instances from Azure Container Registry using a managed identity (Wdrażanie w usłudze Azure Container Instances z usługi Azure Container Registry przy użyciu tożsamości zarządzanej).