Azure Sanal Ağ kapsayıcı ağı arabirimi eklentisini dağıtma

Azure Sanal Ağ kapsayıcı ağı arabirimi (CNI) eklentisi bir Azure sanal makinesi yükler ve Kubernetes podları ile Docker kapsayıcılarına sanal ağ özellikleri kazandırır. Eklenti hakkında daha fazla bilgi edinmek için bkz. Kapsayıcıların Azure Sanal Ağ özelliklerini kullanmasını sağlama. Buna ek olarak eklenti, AKS kapsayıcılarını otomatik olarak bir sanal ağa ekleyen Gelişmiş Ağ seçeneği sayesinde Azure Kubernetes Service (AKS) ile birlikte kullanılabilir.

Azure Container Service-Engine Kubernetes kümesi için eklenti dağıtma

Azure Container Service-Engine, Azure Resource Manager şablonuyla bir Kubernetes kümesi dağıtır. Küme yapılandırması, şablon oluşturma sırasında araca geçirilen bir JSON dosyasında belirtilir. Desteklenen küme ayarlarının tam listesi ve açıklamaları hakkında daha fazla bilgi edinmek için bkz. Microsoft Azure Container Service Engine - Küme Tanımı. Eklenti, Azure Container Service-Engine kullanılarak oluşturulan kümeler için varsayılan ağ eklentisidir. Eklenti yapılandırma sırasında aşağıdaki ağ yapılandırma ayarlarına dikkat edilmesi gerekir:

Ayar Açıklama
ilkArdışıkStatikIP Ana düğüme ayrılan IP adresi. Bu seçenek zorunludur.
kubernetesConfig altında clusterSubnet Kümenin dağıtıldığı ve podlara IP adreslerinin ayrıldığı sanal ağ alt ağının CIDR değeridir
masterProfile içindeki vnetSubnetId Kümenin dağıtılacağı alt ağın Azure Resource Manager kaynak kimliğini belirtir
vnetCidr Kümenin konumlandırıldığı sanal ağın CIDR'si
kubeletConfig içerisindeki max-Pods Her bir aracı sanal makinedeki maksimum pod sayısı. Eklentide varsayılan değer 30'dur. En fazla 250 değerini kullanabilirsiniz

Örnek yapılandırma

Aşağıdaki JSON örneği, şu özelliklere sahip bir kümeye aittir:

  • Bir ana düğüm ve iki aracı düğümü

  • KubeClusterSubnet (10.0.0.0/20) adlı bir alt ağda dağıtılır ve hem ana düğüm hem de aracı düğümleri bulunur.

{
  "apiVersion": "vlabs",
  "properties": {
    "orchestratorProfile": {
      "orchestratorType": "Kubernetes",
      "kubernetesConfig": {
        "clusterSubnet": "10.0.0.0/20" --> Subnet allocated for the cluster
      }
    },
    "masterProfile": {
      "count": 1,
      "dnsPrefix": "ACSKubeMaster",
      "vmSize": "Standard_A2",
      "vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<Vnet Name>/subnets/KubeClusterSubnet",
      "firstConsecutiveStaticIP": "10.0.1.50", --> IP address allocated to the Master node
      "vnetCidr": "10.0.0.0/16" --> Virtual network address space
    },
    "agentPoolProfiles": [
      {
        "name": "k8sagentpoo1",
        "count": 2,
        "vmSize": "Standard_A2_v2",
"vnetSubnetId": "/subscriptions/<subscription ID>/resourceGroups/<Resource Group Name>/providers/Microsoft.Network/virtualNetworks/<VNet Name>/subnets/KubeClusterSubnet",
        "availabilityProfile": "AvailabilitySet"
      }
    ],
    "linuxProfile": {
      "adminUsername": "KubeServerAdmin",
      "ssh": {
        "publicKeys": [
          {…}
        ]
      }
    },
    "servicePrincipalProfile": {
      "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
      "secret": "azure123"
    }
  }
}

Eklentiyi Kubernetes kümesi için dağıtma

Eklentiyi bir Kubernetes kümesindeki tüm Azure sanal makinelerine yüklemek için aşağıdaki adımları izleyin:

  1. Eklentiyi indirin ve yükleyin.

  2. POD'lara IP adreslerinin atandığı her sanal makinede bir sanal ağ IP adresi havuzunu önceden ayırın. Her Azure sanal makinesinin ağ arabirimlerinde birincil sanal ağ özel IP adresi bulunur. Podlar için IP adresi havuzu aşağıdaki seçeneklerden biri kullanılarak sanal makina ağ arabirimine ikincil adresler (ipconfigs) olarak eklenir:

    Sanal makinede kullanmayı beklediğiniz tüm podlar için yeterli IP adresi eklediğinizden emin olun.

  3. Küme oluşturma sırasında Kubelet'e –network-plugin=cni komut satırı seçeneğini geçirerek kümeniz için ağ oluşturma eklentisini seçin. Kubernetes, varsayılan olarak eklentiyi ve yapılandırma dosyasını zaten yüklü oldukları dizinlerde arar.

  4. Podlarınızın internete erişmesini istiyorsanız Linux sanal makinelerinizde kaynak-NAT internet trafiğine aşağıdaki iptables kuralını ekleyin. Aşağıdaki örnekte IP aralığı 10.0.0.0/8 olarak belirtilmiştir.

    iptables -t nat -A POSTROUTING -m iprange ! --dst-range 168.63.129.16 -m
    addrtype ! --dst-type local ! -d 10.0.0.0/8 -j MASQUERADE
    

    Belirtilen IP aralıklarına yönelik olmayan NAT trafiğine ilişkin kurallar. Önceki aralıkların dışındaki tüm trafiğin internet trafiği olduğu kabul edilir. Sanal makinenin sanal ağının, eşlenen sanal ağların ve şirket içi ağların IP aralıklarını belirtebilirsiniz.

    Windows sanal makineleri otomatik olarak sanal makinenin ait olduğu alt ağın dışında bir hedefe sahip olan NAT trafiği için kaynak oluşturur. Özel IP aralıkları belirtmek mümkün değildir.

Önceki adımlar tamamlandıktan sonra Kubernetes Aracısı sanal makinelerine getirilen podlara sanal ağdan otomatik olarak özel IP adresleri atanır.

Docker kapsayıcıları için eklentiyi dağıtın

  1. Eklentiyi indirin ve yükleyin.

  2. Şu komutu kullanarak Docker kapsayıcılarını oluşturun:

    ./docker-run.sh \<container-name\> \<container-namespace\> \<image\>
    

Kapsayıcılar otomatik olarak atanan havuzdan IP adreslerini almaya başlar. Docker kapsayıcılarındaki trafiği dengelemek istiyorsanız, kapsayıcılar yük dengeleyici yoklamasına sahip bir yazılım yük dengeleyicisinin arkasına yerleştirilmelidir.

CNI ağ yapılandırma dosyası

CLI ağ yapılandırma dosyası, JSON biçiminde ifade edilir. Varsayılan konumu Linux'ta /etc/cni/net.d, Windows'da ise c:\cni\netconf şeklindedir. Bu dosya eklentinin yapılandırmasını belirtir ve Windows ile Linux'ta farklıdır. Aşağıda JSON biçiminde örnek bir Linux yapılandırma dosyası verilmiş ve önemli ayarların bazıları açıklanmıştır. Dosyada değişiklik yapmanıza gerek yoktur:

{
	   "cniVersion":"0.3.0",
	   "name":"azure",
	   "plugins":[
	      {
	         "type":"azure-vnet",
	         "mode":"bridge",
	         "bridge":"azure0",
	         "ipam":{
	            "type":"azure-vnet-ipam"
	         }
	      },
	      {
	         "type":"portmap",
	         "capabilities":{
	            "portMappings":true
	         },
	         "snat":true
	      }
	   ]
}

Ayarların açıklaması

  • "cniVersion": Azure Sanal Ağ CNI eklentileri, CNI belirtiminin 0.3.0 ve 0.3.1 sürümlerini destekler.

  • "name": Ağın adı. Bu özellik herhangi bir benzersiz değer olarak ayarlanabilir.

  • "type": Ağ eklentisinin adı. azure-vnet olarak ayarlanmıştır.

  • "mode": İşletimsel mod. Bu alan isteğe bağlıdır. Yalnızca "bridge" modu desteklenir. Daha fazla bilgi için bkz. çalışma modları.

  • "bridge": Kapsayıcıları bir sanal ağa bağlamak için kullanılan köprünün adı. Bu alan isteğe bağlıdır. Belirtilmezse eklenti, ana arabirim dizinine göre otomatik olarak benzersiz bir ad seçer.

  • "ipam" - "type": IPAM eklentisinin adı. Her zaman azure-vnet-ipam olarak ayarlanır.

Eklentiyi indirme ve yükleme

Eklentiyi GitHub'dan indirin. Kullandığınız platforma uygun en son sürümü indirin:

Linux veya Windows yükleme betiğini bilgisayarınıza kopyalayın. Betiği bilgisayarınızdaki bir scripts dizinine kopyalayın ve dosyayı Linux için install-cni-plugin.sh, Windows için ise install-cni-plugin.ps1 olarak adlandırın.

Eklentiyi yüklemek için, kullandığınız eklentinin sürümünü belirterek platformunuza uygun betiği çalıştırın. Örneğin, v1.4.20 belirtebilirsiniz. Linux yüklemesi için v1.0.1 gibi uygun bir CNI eklenti sürümü sağlayın:

scripts/install-cni-plugin.sh [azure-cni-plugin-version] [cni-plugin-version]
scripts\\ install-cni-plugin.ps1 [azure-cni-plugin-version]

Betik, eklentiyi Linux için /opt/cni/bin, Windows için ise c:\cni\bin konumuna yükler. Yüklenen eklenti, yükleme sonrasında çalışan basit bir ağ yapılandırma dosyasına sahiptir. Güncelleştirilmesi gerekmez. Dosyadaki ayarlar hakkında daha fazla bilgi edinmek için bkz. CNI ağ yapılandırma dosyası.