Kapsayıcı örneklerini Azure sanal ağına dağıtma

Azure Sanal Ağ, Azure ve şirket içi kaynaklarınız için güvenli, özel ağ sağlar. Kapsayıcı grupları bir Azure sanal ağına dağıtarak, kapsayıcılar sanal ağ içinde diğer kaynaklarla güvenli bir şekilde iletişim kurabilir.

Bu makalede, kapsayıcı gruplarını yeni bir sanal ağa veya var olan bir sanal ağa dağıtmak için Azure CLI'da az container create komutunun nasıl kullanımı açıklanmıştır.

Ağ senaryoları ve sınırlamaları için bkz. Sanal ağ senaryoları ve kaynakları Azure Container Instances.

Önemli

Sanal ağa kapsayıcı grubu dağıtımı genellikle Linux kapsayıcıları için kullanılabilir ve bu kapsayıcıların Azure Container Instances kullanılabilir. Ayrıntılar için bkz. Bölgeler ve kaynak kullanılabilirliği.

Bu makaledeki örnekler Bash kabuğu için biçimlendirildi. PowerShell veya Komut İstemi gibi başka bir kabuk tercih ediyorsanız, satır devamlılığı karakterlerini uygun şekilde ayarlayın.

Yeni sanal ağa dağıtma

Yeni bir sanal ağa dağıtmak ve Azure'ın ağ kaynaklarını sizin için otomatik olarak oluşturmasını yapmak için az container create yürütülürken şunları belirtin:

  • Sanal ağın adı
  • CIDR biçiminde sanal ağ adresi ön eki
  • Alt ağ adı
  • CIDR biçiminde alt ağ adresi ön eki

Sanal ağ ve alt ağ adresi ön ekleri sırasıyla sanal ağ ve alt ağ için adres alanlarını belirtir. Bu değerler, Örneğin, Sınıfsız Inter-Domain Yönlendirme (CIDR) notasyonunda temsil 10.0.0.0/16 eder. Alt ağlarla çalışma hakkında daha fazla bilgi için bkz. Sanal ağ alt ağına ekleme, değiştirme veya silme.

İlk kapsayıcı grubularınızı bu yöntemle dağıttıktan sonra, sanal ağ ve alt ağ adlarını veya Azure'ın sizin için otomatik olarak oluşturduğu ağ profilini belirterek aynı alt ağa dağıtabilirsiniz. Azure alt ağı alt ağı Azure Container Instances alt ağ için yalnızca kapsayıcı gruplarını dağıtabilirsiniz.

Örnek

Aşağıdaki az container create komutu yeni bir sanal ağ ve alt ağ için ayarları belirtir. Bir sanal ağ içinde kapsayıcı grubu dağıtımlarının kullanılabilir olduğu bir bölgede oluşturulan kaynak grubunun adını girin. Bu komut, statik bir web sayfasına hizmet veren küçük bir web sunucusu Node.js genel Microsoft aci-helloworld kapsayıcısı dağıtır. Sonraki bölümde, aynı alt ağ için ikinci bir kapsayıcı grubu dağıtacak ve iki kapsayıcı örneği arasındaki iletişimi test edin.

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

Bu yöntemi kullanarak yeni bir sanal ağa dağıtım yaparken, ağ kaynakları oluşturulurken dağıtım birkaç dakika sürebilir. İlk dağıtımdan sonra, aynı alt ağ için ek kapsayıcı grubu dağıtımları daha hızlı tamamlanır.

Mevcut sanal ağa dağıtma

Kapsayıcı grubunu mevcut bir sanal ağa dağıtmak için:

  1. Mevcut sanal ağ içinde bir alt ağ oluşturun, içinde bir kapsayıcı grubunun zaten dağıtılmış olduğu mevcut bir alt ağı kullanın veya diğer tüm kaynakların boşaltılan mevcut bir alt ağın kullanın
  2. az container create ile bir kapsayıcı grubu dağıtın ve aşağıdakilerden birini belirtin:
    • Sanal ağ adı ve alt ağ adı
    • Farklı bir kaynak grubundan bir sanal ağ kullanmaya olanak sağlayan sanal ağ kaynak kimliği ve alt ağ kaynak kimliği
    • Az network profile list kullanarak edinebilirsiniz ağ profili adı veya kimliği

Örnek

Aşağıdaki örnek, daha önce oluşturulan aynı alt ağ için ikinci bir kapsayıcı grubu dağıtır ve iki kapsayıcı örneği arasındaki iletişimi doğrular.

İlk olarak, dağıtılan ilk kapsayıcı grubunun IP adresini (appcontainer) elde edin:

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

Çıkış, özel alt ağda kapsayıcı grubunun IP adresini görüntüler. Örnek:

10.0.0.4

Şimdi CONTAINER_GROUP_IP komutuyla alınan IP'ye az container show ayarlayın ve aşağıdaki komutu az container create yürütün. İkinci kapsayıcı olan commchecker, Alpine Linux tabanlı bir görüntü çalıştırır ve ilk kapsayıcı grubunun özel alt ağ wget IP adresine göre yürütülür.

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

Bu ikinci kapsayıcı dağıtımı tamamlandıktan sonra, yürütülen komutun çıkışını görmek için wget günlüklerini çekin:

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

İkinci kapsayıcı ilk kapsayıcıyla başarıyla iletişim kurarsa, çıktı aşağıdakine benzer:

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

Günlük çıktısı, yerel alt ağda özel IP adresini kullanarak ilk kapsayıcıdan dizin dosyasına bağlananın ve dosyayı wget indirenin mümkün olduğunu göstermelisiniz. İki kapsayıcı grubu arasındaki ağ trafiği sanal ağ içinde kaldı.

Örnek - YAML

YaML dosyası, Resource Manager şablonu veya Python SDK'sı gibi başka bir programlama yöntemi kullanarak da var olan bir sanal ağa kapsayıcı grubu dağıtabilirsiniz.

Örneğin, bir YAML dosyası kullanırken, sanal ağ için temsilci olarak bir alt ağa sahip bir sanal ağa Azure Container Instances. Aşağıdaki özellikleri belirtin:

  • ipAddress: Kapsayıcı grubunun özel IP adresi ayarları.
    • ports: Varsa, açılacak bağlantı noktaları.
    • protocol: Açılan bağlantı noktası için protokol (TCP veya UDP).
  • networkProfile: Sanal ağ ve alt ağ için ağ ayarları.
    • id: tam Resource Manager kimliğinin kaynak networkProfile kimliği.

Ağ profilinin kimliğini almak için az network profile list komutunu çalıştırın ve sanal ağın ve temsilci alt ağın yer alan kaynak grubunun adını belirtin.

az network profile list --resource-group myResourceGroup \
  --query [0].id --output tsv

Örnek çıktı:

/subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-vnet-aci-subnet

Ağ profili kimliğine sahip olduktan sonra, aşağıdaki YAML'yi vnet-deploy-aci.yaml adlı yeni bir dosyaya kopyalayın. altında, networkProfile değerini az önce alınan id kimlikle değiştirin ve dosyayı kaydedin. Bu YAML, sanal ağ içinde appcontaineryaml adlı bir kapsayıcı grubu oluşturur.

apiVersion: '2019-12-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'
  networkProfile:
    id: /subscriptions/<Subscription ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkProfiles/aci-network-profile-aci-vnet-subnet
  osType: Linux
  restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

parametre için YAML dosya adını belirterek az container create komutuyla kapsayıcı grubunu --file dağıtın:

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

Dağıtım tamamlandıktan sonra durumunu görüntülemek için az container show komutunu çalıştırın. Örnek çıktı:

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

Kaynakları temizleme

Kapsayıcı örneklerini silme

Oluşturduğunuz kapsayıcı örnekleriyle çalışmayı bitirin ve aşağıdaki komutlarla bunları silin:

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

Ağ kaynaklarını silme

Bu özellik şu anda daha önce oluşturduğunuz ağ kaynaklarını silmek için birkaç ek komut gerektirir. Bu makalenin önceki bölümlerinde yer alan örnek komutları kullanarak sanal ağımız ve alt ağımız oluştursanız, bu ağ kaynaklarını silmek için aşağıdaki betiği kullanabilirsiniz. Betik, kaynak grubu grubunun tek bir ağ profiline sahip tek bir sanal ağ içerdiğini varsayıyor.

Betiği yürütmeden önce değişkenini, silinmesi gereken sanal ağı ve alt ağı içeren kaynak RES_GROUP grubunun adına ayarlayın. Daha önce önerilen adı kullanmadıysanız sanal ağın aci-vnet adını güncelleştirin. Betik Bash kabuğu için biçimlendirildi. PowerShell veya Komut İstemi gibi başka bir kabuk tercih ediyorsanız, değişken atamasını ve erişimcilerini uygun şekilde ayarlamanız gerekir.

Uyarı

Bu betik kaynakları siler! Sanal ağı ve içerdiği tüm alt ağları siler. Bu betiği çalıştırmadan önce, içerdiği alt ağlar da dahil olmak üzere sanal ağda artık herhangi bir kaynak gerek kalmay olduğundan emin olun. Silindikten sonra bu kaynaklar kurtarılamaz.

# 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

Sonraki adımlar

Sanal ağ şablonu kullanarak yeni bir sanal ağ, alt ağ, ağ profili ve kapsayıcı Resource Manager dağıtmak için bkz. Sanal ağ ile Azure kapsayıcı grubu oluşturma.