Azure Kubernetes Service'te (AKS) örnek düzeyinde genel IP'leri kullanma

AKS düğümleri, iletişim için kendi genel IP adreslerini gerektirmez. Ancak senaryolar, bir düğüm havuzundaki düğümlerin kendi ayrılmış genel IP adreslerini almasını gerektirebilir. Yaygın bir senaryo, konsolun atlamaları en aza indirmek için bulut sanal makinesine doğrudan bağlantı sağlaması gereken oyun iş yüklerine yöneliktir. Bu senaryo, Düğüm Genel IP'si kullanılarak AKS'de elde edilebilir.

İlk olarak yeni bir kaynak grubu oluşturun.

az group create --name <resourceGroup> --location <region>

Yeni bir AKS kümesi oluşturun ve düğümleriniz için bir genel IP ekleyin. Düğüm havuzundaki düğümlerin her biri benzersiz bir genel IP alır. Sanal Makine Ölçek Kümesi örneklerine bakarak bunu doğrulayabilirsiniz.

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --location <region> \
    --enable-node-public-ip \
    --generate-ssh-keys

Mevcut AKS kümeleri için yeni bir düğüm havuzu ekleyebilir ve düğümleriniz için genel IP ekleyebilirsiniz.

az aks nodepool add --resource-group <resourceGroup> --cluster-name <aksClusterName> --name <newNodePool> --enable-node-public-ip

Genel IP ön eki kullanma

Genel IP ön eki kullanmanın çeşitli avantajları vardır. AKS, yeni bir küme oluştururken veya düğüm havuzu eklerken --node-public-ip-prefix-id bayrağı ile kaynak kimliğini geçirerek düğümleriniz için mevcut bir genel IP ön eki adreslerini kullanmayı destekler.

İlk olarak az network public-ip prefix create komutunu kullanarak bir genel IP ön eki oluşturun:

az network public-ip prefix create --length 28 --location <region> --name <publicIPPrefixName> --resource-group <resourceGroup>

Çıktıyı görüntüleyin ve ön ek için id öğesini not alın.

{
  ...
  "id": "/subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName>",
  ...
}

Son olarak, yeni küme oluştururken veya yeni düğüm havuzu eklerken bayrağı --node-public-ip-prefix-id kullanın ve ön ekin kaynak kimliğini parametre olarak geçirin.

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --location <region> \
    --enable-node-public-ip \
    --node-public-ip-prefix-id /subscriptions/<subscription-id>/resourceGroups/<resourceGroup>/providers/Microsoft.Network/publicIPPrefixes/<publicIPPrefixName> \
    --generate-ssh-keys

Çift yığınlı genel IP ön eki kullanımı (önizleme)

Çift yığınlı genel IP ön eki kullanarak bir düğüm havuzundaki her düğüme hem IPv4 hem de IPv6 genel IP adresleri atayabilirsiniz. Bu yaklaşım kendi genel IP ön eklerinizi getirmenize ve her düğümün bir IPv4 adresi ve bir IPv6 adresi aldığından emin olmanıza olanak tanır.

Bu özellik, hem IPv4 hem de IPv6 üzerinden doğrudan gelen veya giden bağlantı gerektiren iş yükleri veya IPv6 uyumluluğu gerektiren ortamlarda çalışan uygulamalar için kullanışlıdır.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Gereksinimler

Çift yığınlı genel IP ön eklerini düğüm genel IP'leriyle kullanmak için aşağıdaki önkoşulların karşılandığından emin olun:

  • Kümeniz hem IPv4 hem de IPv6 IP ailelerine sahip bir çift yığınlı küme olarak yapılandırılır.
  • Kümeniz, örtüşen ağ ile Azure CNI kullanır.
  • AKS kümenizle aynı bölgede oluşturulmuş bir IPv4 genel IP ön ekiniz ve bir IPv6 genel IP ön ekiniz var.
  • Her iki genel IP ön eki de Standart SKU'yu kullanır.
  • AKS kümesi kimliğinin genel IP ön eklerini yönetme izni vardır. Ön ekler farklı bir kaynak grubundaysa, bu kaynak grubundaki Ağ Katkıda Bulunanı rolünü küme kimliğine atayın.

Önizleme özelliklerini kaydetme

Düğümlere ait genel IP adresleri için çift yığınlı (IPv4 ve IPv6) genel IP ön eki desteği şu anda önizleme olarak sunulmaktadır. Bu özelliği kullanabilmeniz için önce Azure CLI uzantısını yüklemeniz veya güncelleştirmeniz ve özellik bayraklarını aboneliğinize kaydetmeniz NodePublicIPv6PrefixPreview gerekir.

aks-preview uzantısını yükleyin veya güncelleştirin:

az extension add --name aks-preview --upgrade

Gerekli önizleme özelliklerini kaydedin:

az feature register --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview

Özellik kayıtlarının tamamlanması birkaç dakika sürebilir. Kayıt durumunu denetlemek için şunu çalıştırın:

az feature show --namespace Microsoft.ContainerService --name NodePublicIPv6PrefixPreview --query "properties.state"

Devam etmeden önce her iki özellik de Kayıtlı durumunu bildirene kadar bekleyin.

Özellik bayrakları kaydedildikten sonra, değişikliklerin uygulandığından emin olmak için kaynak sağlayıcısını yenileyin:

az provider register --namespace Microsoft.ContainerService

Kayıt tamamlandıktan sonra, düğüm genel IP'leri için çift yığınlı genel IP ön eklerini kullanmak üzere bir küme oluşturabilir veya güncelleştirebilirsiniz.

Genel IP ön ekleri oluşturma

Azure CLI kullanarak IPv4 ve IPv6 için bir genel IP ön eki oluşturun.

IPv4 için:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv4PrefixName> \
  --location <region> \
  --length 28 \
  --sku Standard \
  --version IPv4

IPv6 için:

az network public-ip prefix create \
  --resource-group <resourceGroup> \
  --name <ipv6PrefixName> \
  --location <region> \
  --length 124 \
  --sku Standard \
  --version IPv6

Ön ekleri oluşturduktan sonra her iki ön ekin kaynak kimliklerini not edin.

Çift yığınlı düğüm genel IP ön ekleriyle yeni bir küme oluşturma

Yeni bir AKS kümesi oluştururken, hem IPv4 hem de IPv6 genel IP ön eklerini belirtmek için parametresini kullanın --node-public-ip-prefix-ids .

az aks create \
  --resource-group <resourceGroup> \
  --name <aksClusterName> \
  --location <region> \
  --enable-node-public-ip \
  --ip-families IPv4,IPv6 \
  --network-plugin azure \
  --network-plugin-mode overlay \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>" \
  --generate-ssh-keys

parametresi, --node-public-ip-prefix-ids genel IP ön eki kaynak kimliklerinin virgülle ayrılmış bir listesini kabul eder. Listede bir IPv4 öneki ve bir IPv6 öneki bulunmalıdır.

Çift yığınlı düğüm genel IP ön ekleriyle düğüm havuzu ekleme

Mevcut bir çift yığınlı kümeye, çift yığınlı düğüm genel IP ön eklerine sahip bir düğüm havuzu da ekleyebilirsiniz.

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --enable-node-public-ip \
  --node-public-ip-prefix-ids "<ipv4PrefixResourceId>,<ipv6PrefixResourceId>"

Limitations

Çift yığınlı genel IP ön eki için aşağıdaki sınırlamalar geçerlidir:

  • Hem IPv4 hem de IPv6 ön eki sağlamanız gerekir. Yalnızca IPv6 yapılandırmaları desteklenmez.
  • Düğümün genel IP adresi yapılandırması değiştirilemez. Genel IP ön eklerini değiştirmek için yeni bir düğüm havuzu oluşturmanız ve iş yüklerini geçirmeniz gerekir.
  • Her düğüme tek bir IPv6 genel IP adresi atanır.
  • Bu özellik AKS Otomatik veya düğüm otomatik sağlama ile desteklenmez.
  • Çok NIC düğümlü havuzlar desteklenmez.
  • Küme Otomatik Ölçeklendiricisi desteklenir, ancak her düğüm ön ekten bir IP gerektirdiğinden, yapılandırılan en fazla düğüm sayısının genel IP ön ekindeki kullanılabilir IP adresi sayısını aşmadığından emin olun.

Düğümler için genel IP'leri bul

Düğümleriniz için genel IP'leri çeşitli yollarla bulabilirsiniz:

Önemli

Düğüm kaynak grubu düğümleri ve bunların genel IP'lerini içerir. Düğümlerinizin genel IP'lerini bulmak için komutları yürütürken düğüm kaynak grubunu kullanın.

az vmss list-instance-public-ips --resource-group <MC_region_aksClusterName_region> --name <virtualMachineScaleSetName>

Düğüm genel IP'lerinde genel IP etiketlerini kullanma

Genel IP etiketleri, belirtilen bölgelerde kullanılabilen Azure Yönlendirme Tercihi özelliğini kullanmak için düğüm genel IP'lerinde kullanılabilir.

Gereksinimler

  • AKS sürüm 1.29 veya üzeri gereklidir.

Yönlendirme tercihi interneti kullanarak yeni küme oluşturma

az aks create \
    --name <aksClusterName> \
    --location <region> \
    --resource-group <resourceGroup> \
    --enable-node-public-ip \
    --node-public-ip-tags RoutingPreference=Internet \
    --generate-ssh-keys

Yönlendirme tercihi internet olan bir düğüm havuzu ekleyin.

az aks nodepool add --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --location <region> \
  --resource-group <resourceGroup> \
  --enable-node-public-ip \
  --node-public-ip-tags RoutingPreference=Internet

Ana bilgisayar bağlantı noktası bağlantılarına izin ver ve uygulama güvenlik gruplarına düğüm havuzları ekle

Kendi konak adreslerinde hizmet barındıran ve düğüm genel IP'lerini kullanan AKS düğümleri için, trafiğe izin vermek amacıyla bir NSG kuralı eklenmesi gerekir. Düğüm havuzu yapılandırmasına istenen bağlantı noktalarının eklenmesi, küme ağ güvenlik grubunda uygun izin verme kurallarını oluşturur.

Alt ağda kendi sanal ağınızı getirin kullanan bir küme ile bir ağ güvenlik grubu varsa, bu ağ güvenlik grubuna bir izin kuralı eklenmelidir. Bu, düğüm havuzunu bir uygulama güvenlik grubuna (ASG) ekleyerek belirli bir düğüm havuzundaki düğümler ile sınırlandırılabilir. Yönetilen kaynak grubunda, izin verilen konak bağlantı noktaları belirtilirse, varsayılan olarak yönetilen bir ASG oluşturulacaktır. Düğümler, düğüm havuzu parametrelerinde NSG'lerin kaynak kimliği belirtilerek bir veya daha fazla özel ASG'ye de eklenebilir.

Host bağlantı noktası belirtim biçimi

İzin verilen bağlantı noktalarının listesini belirtirken, port/protocol veya startPort-endPort/protocol biçiminde girdiler içeren virgülle ayrılmış bir liste kullanın.

Examples:

  • 80/tcp
  • 80/tcp,443/tcp
  • 53/udp,80/tcp
  • 50000-60000/tcp

Gereksinimler

  • AKS sürüm 1.29 veya üzeri gereklidir.

İzin verilen bağlantı noktaları ve uygulama güvenlik gruplarıyla yeni bir küme oluşturma

az aks create \
    --resource-group <resourceGroup> \
    --name <aksClusterName> \
    --nodepool-name <nodePoolName> \
    --nodepool-allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp\
    --nodepool-asg-ids "<asgId>,<asgId>" \
    --generate-ssh-keys

İzin verilen bağlantı noktaları ve uygulama güvenlik gruplarıyla yeni bir düğüm havuzu ekleme

az aks nodepool add \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
  --asg-ids "<asgId>,<asgId>"

Düğüm havuzu için izin verilen bağlantı noktalarını ve uygulama güvenlik gruplarını güncelleştirme

az aks nodepool update \
  --resource-group <resourceGroup> \
  --cluster-name <aksClusterName> \
  --name <nodePoolName> \
  --allowed-host-ports 80/tcp,443/tcp,53/udp,40000-60000/tcp,40000-50000/udp \
  --asg-ids "<asgId>,<asgId>"

Pod iş yükleri için konak bağlantı noktalarını otomatik olarak atama (ÖNİzLEME)

Düğümlerde genel IP'ler yapılandırıldığında, podların yük dengeleyici hizmeti yapılandırmak zorunda kalmadan trafiği doğrudan almasına izin vermek için host portlar kullanılabilir. Bu, özellikle düğüm IP'si ve bağlantı noktasının geçici doğasının sorun olmadığı oyun gibi senaryolarda kullanışlıdır; çünkü bilinen bir ana bilgisayar adındaki bir eşleştirme hizmeti, bağlantı anında kullanılacak doğru ana bilgisayar ve bağlantı noktasını sağlayabilir. Ancak, bir konak üzerindeki yalnızca bir işlem aynı bağlantı noktasında dinleyebildiğinden, konak bağlantı noktalarıyla uygulamaları kullanmak zamanlamayla ilgili sorunlara yol açabilir. Aks, bu sorunu önlemek için sistemin zamanlama zamanında dinamik olarak kullanılabilir bir bağlantı noktası atamasını sağlayarak çakışmaları önler.

Uyarı

Pod konak bağlantı noktası trafiği, kümedeki varsayılan NSG kuralları tarafından engellenir. Bu özellik, trafiğin akışına izin vermek için düğüm havuzundaki ana makine bağlantı noktalarıyla birleştirilerek kullanılmalıdır.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "mevcut olduğu şekilde" sağlanmakta olup, hizmet seviyesi anlaşmalarına ve sınırlı garantilere dahil edilmemektedir. AKS önizlemeleri, müşteri desteği ekibi tarafından maksimum çaba gösterilerek kısmen ele alınmaktadır. Bu nedenle, bu özellikler üretim kullanımı için tasarlanmamıştır. Daha fazla bilgi için aşağıdaki destek makalelerine bakın:

Gereksinimler

  • AKS sürüm 1.29 veya üzeri gereklidir.

'PodHostPortAutoAssignPreview' özellik bayrağını kaydetme

Aşağıdaki örnekte gösterildiği gibi PodHostPortAutoAssignPreview komutunu kullanarak özellik bayrağını kaydedin.

az feature register --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Durumun Kayıtlı olarak gösterilmesi birkaç dakika sürer. az feature show komutunu kullanarak kayıt durumunu doğrulayın:

az feature show --namespace "Microsoft.ContainerService" --name "PodHostPortAutoAssignPreview"

Durum Kayıtlı olarak gösterildiğinde, az provider register komutunu kullanarak Microsoft.ContainerService kaynak sağlayıcısının kaydını yenileyin.

az provider register --namespace Microsoft.ContainerService

Pod'a otomatik konak portu atama

Konak bağlantı noktası otomatik atamasının tetiklenmesi, iş yükünün herhangi bir konak bağlantı noktası olmadan dağıtılması ve ana bilgisayar bağlantı noktası ataması gerektiren bağlantı noktalarının listesiyle belirtilmiş olan kubernetes.azure.com/assign-hostports-for-containerports açıklamasının uygulanmasıyla gerçekleştirilir. Ek açıklamanın değeri, port/protocol gibi girdilerin virgülle ayrılmış bir listesi olarak belirtilmelidir; burada bağlantı noktası, Pod belirtiminde tanımlanan tek bir bağlantı noktası numarasıdır ve protokol tcp veya udp şeklindedir.

Bağlantı noktaları aralıktan 40000-59999 atanır ve küme genelinde benzersiz olur. Atanan bağlantı noktaları, uygulamanın hangi bağlantı noktalarının atandığını belirleyebilmesi için pod içindeki ortam değişkenlerine de eklenir. Ortam değişkeni adı şu biçimde olacaktır (aşağıdaki örnek): <deployment name>_PORT_<port number>_<protocol>_HOSTPORTbu nedenle bir örnek olacaktır mydeployment_PORT_8080_TCP_HOSTPORT: 41932.

8080 ve 8443 bağlantı noktaları için konak bağlantı noktalarının eşlemesini gösteren örnek echoserver bir dağıtım aşağıda verilmiştir:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: echoserver-hostport
  labels:
    app: echoserver-hostport
spec:
  replicas: 3
  selector:
    matchLabels:
      app: echoserver-hostport
  template:
    metadata:
      annotations:
        kubernetes.azure.com/assign-hostports-for-containerports: 8080/tcp,8443/tcp
      labels:
        app: echoserver-hostport
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
        - name: echoserver-hostport
          image: k8s.gcr.io/echoserver:1.10
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
            - name: https
              containerPort: 8443
              protocol: TCP

Dağıtım uygulandığında, hostPort girişleri tek tek podların YAML'inde olacak.

$ kubectl describe pod echoserver-hostport-75dc8d8855-4gjfc
<cut for brevity>
Containers:
  echoserver-hostport:
    Container ID:   containerd://d0b75198afe0612091f412ee7cf7473f26c80660143a96b459b3e699ebaee54c
    Image:          k8s.gcr.io/echoserver:1.10
    Image ID:       k8s.gcr.io/echoserver@sha256:cb5c1bddd1b5665e1867a7fa1b5fa843a47ee433bbb75d4293888b71def53229                                                                                                      Ports:          8080/TCP, 8443/TCP
    Host Ports:     46645/TCP, 49482/TCP
    State:          Running
      Started:      Thu, 12 Jan 2023 18:02:50 +0000
    Ready:          True
    Restart Count:  0
    Environment:
      echoserver-hostport_PORT_8443_TCP_HOSTPORT:  49482
      echoserver-hostport_PORT_8080_TCP_HOSTPORT:  46645

Sonraki Adımlar