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 myResourceGroup2 --location eastus

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 MyResourceGroup2 \
    --name MyManagedCluster \
    --location eastus \
    --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 MyResourceGroup2 --cluster-name MyManagedCluster --name nodepool2 --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 kaynak kimliğini bayrağıyla node-public-ip-prefix geçirerek düğümleriniz için mevcut genel IP ön ekinden adreslerin kullanılmasını 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 eastus --name MyPublicIPPrefix --resource-group MyResourceGroup3

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

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

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

az aks create \
    --resource-group MyResourceGroup3 \
    --name MyManagedCluster \
    --location eastus \
    --enable-node-public-ip \
    --node-public-ip-prefix /subscriptions/<subscription-id>/resourcegroups/MyResourceGroup3/providers/Microsoft.Network/publicIPPrefixes/MyPublicIPPrefix \
    --generate-ssh-keys

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

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

  • Azure CLI komutunu az vmss list-instance-public-ipskullanın.
  • PowerShell veya Bash komutlarını kullanın.
  • Sanal Makine Ölçek Kümesi'ndeki örnekleri görüntüleyerek Azure portalında genel IP'leri de görüntüleyebilirsiniz.

Ö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_MyResourceGroup2_MyManagedCluster_eastus --name YourVirtualMachineScaleSetName

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

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

Gereksinimler

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

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

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

Yönlendirme tercihi İnternet ile düğüm havuzu ekleme

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

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

Hizmetleri konak adreslerinde barındıran düğüm genel IP'lerini kullanan AKS düğümlerinin trafiğe izin vermek için 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.

Kendi sanal ağınızı getirin kullanan bir küme ile alt ağda bir ağ güvenlik grubu varsa, bu ağ güvenlik grubuna bir izin verme 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. İzin verilen konak bağlantı noktaları belirtilirse yönetilen kaynak grubunda varsayılan olarak yönetilen bir ASG oluşturulur. Düğümler, düğüm havuzu parametrelerinde NSG'lerin kaynak kimliği belirtilerek bir veya daha fazla özel ASG'ye de eklenebilir.

Konak bağlantı noktası belirtimi biçimi

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

Örnekler:

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

Gereksinimler

  • AKS sürüm 1.24 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 <clusterName> \
    --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

  --resource-group <resourceGroup> \
  --cluster-name <clusterName> \
  --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

  --resource-group <resourceGroup> \
  --cluster-name <clusterName> \
  --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 konak bağlantı noktaları kullanılabilir. Bu, özellikle düğüm IP'sinin ve bağlantı noktasının kısa ömürlü doğasının sorun olmadığı oyun gibi senaryolarda kullanışlıdır çünkü iyi bilinen bir konak adındaki bir eşleştirme hizmeti bağlantı zamanında kullanılacak doğru konağı 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, düğüm havuzundaki konak bağlantı noktalarının trafiğin akmasına izin vermesiyle birleştirilmelidir.

Önemli

AKS önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. AKS önizlemeleri, müşteri desteği tarafından kısmen en iyi çaba temelinde 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.24 veya üzeri gereklidir.

'PodHostPortAutoAssignPreview' özellik bayrağını kaydetme

PodHostPortAutoAssignPreview Aşağıdaki örnekte gösterildiği gibi az feature register 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 olarak konak bağlantı noktası atama

Konak bağlantı noktası otomatik atamasını tetikleme işlemi, herhangi bir konak bağlantı noktası olmadan bir iş yükü dağıtılarak ve ana bilgisayar bağlantı noktası ataması gerektiren bağlantı noktalarının listesiyle ek açıklama uygulanarak kubernetes.azure.com/assign-hostports-for-containerports gerçekleştirilir. Ek açıklamanın değeri, gibi port/protocolgirdilerin virgülle ayrılmış listesi olarak belirtilmelidir; burada bağlantı noktası Pod belirtiminde tanımlanan tek bir bağlantı noktası numarasıdır ve protokol ise veya udpşeklindedirtcp.

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şler tek tek podların YAML'sinde olur:

$ 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