Zasobniki z wieloma kartami sieciowymi w Azure Kubernetes Service (AKS) (wersja zapoznawcza)

Korzystając z obsługi zasobników z wieloma interfejsami sieciowymi w Azure Kubernetes Service (AKS), można dołączyć jeden lub więcej dodatkowych interfejsów sieciowych do zasobników uruchomionych w klastrze wraz ze standardowym interfejsem podstawowym przypisanym przez interfejs CNI. Ta funkcja korzysta z Kubernetes Dynamic Resource Allocation (DRA) i zarządzanego sterownika sieciowego DRAnet, który automatycznie odnajduje i wprowadza pomocnicze karty sieciowe do podów w czasie wykonywania.

Important

Funkcje usługi AKS w wersji zapoznawczej są dostępne na zasadzie samoobsługi i wymagają zapisania się. Wersje zapoznawcze są udostępniane w wersji "as is" i "jako dostępne" i są wykluczone z umów dotyczących poziomu usług i ograniczonej gwarancji. Wersje zapoznawcze usługi AKS są częściowo objęte pomocą techniczną dla klientów, świadczoną w miarę możliwości. W związku z tym te funkcje nie są przeznaczone do użytku produkcyjnego. Aby uzyskać więcej informacji, zobacz następujące artykuły pomocy technicznej:

Overview

Domyślnie każdy zasobnik w klastrze usługi AKS otrzymuje jeden interfejs sieciowy (eth0) zarządzany przez wtyczkę Azure CNI. Chociaż ten interfejs jest wystarczający dla większości obciążeń, niektóre scenariusze wymagają, aby zasobniki miały wiele interfejsów sieciowych połączonych z różnymi podsieciami lub sieciami wirtualnymi.

Obsługa podów z wieloma kartami sieciowymi dotyczy tych scenariuszy, umożliwiając:

  • Aprowizuj pule węzłów usługi AKS przy użyciu pomocniczych interfejsów sieciowych dołączonych do każdego węzła.
  • Użyj sterownika AKS DRANET, aby automatycznie odnaleźć pomocnicze karty sieciowe w każdym węźle.
  • Wstrzykiwanie tych interfejsów pomocniczych do podów w czasie planowania za pomocą żądań zasobów.

Important

Dodatkowe karty sieciowe z publicznymi adresami IP pomijają Azure Load Balancer i SNAT, dzięki czemu uwidaczniają obciążenia robocze bezpośrednio w Internecie. Usługa AKS nie zapewnia domyślnej warstwy ochrony dla tego ruchu. Należy skonfigurować i utrzymywać odpowiednie reguły sieciowej grupy zabezpieczeń i zapory, aby ograniczyć dostęp przychodzący i wychodzący.

Jak to działa

Obsługa zasobników z wieloma kartami sieciowymi w usłudze AKS opiera się na trzech kluczowych składnikach, które współpracują ze sobą:

1. Konfiguracja pomocniczych interfejsów sieciowych

Podczas tworzenia lub aktualizowania puli węzłów określ jeden lub więcej dodatkowych interfejsów sieciowych w profilu sieciowym puli węzłów. Usługa AKS aprowizuje węzły z dołączonymi dodatkowymi kartami sieciowymi, a każda karta sieciowa łączy się z wybraną podsiecią.

"networkProfile": {
    "secondaryNetworkInterfaces": [
        {
            "type": "Standard",
            "vnetSubnetId": "<subnet-resource-id>"
        }
    ]
}

2. Dynamiczna alokacja zasobów (DRA)

Dynamiczna alokacja zasobów (DRA) to funkcja Kubernetes (ogólna dostępność w Kubernetes 1.34), która zapewnia strukturę do żądania i zarządzania dostępem do zasobów sprzętowych. W kontekście wielu kart sieciowych DRA zarządza cyklem życia wtórnych interfejsów sieciowych jako urządzeń, które można przydzielać.

Używane są następujące zasoby DRA:

  • DeviceClass — definiuje klasę urządzeń (pomocniczych kart sieciowych), które publikuje sterownik DRAnet, z selektorami do filtrowania, które urządzenia spełniają kryteria.
  • ResourceClaimTemplate — szablon, do którego odwołują się zasobniki w celu żądania określonej liczby kart sieciowych z danej klasy urządzenia.

3. Sterownik sieciowy DRAnet z obsługą zarządzania

Sterownik DRAnet network jest uruchamiany jako element DaemonSet w każdym węźle. Ono:

  • Odnajduje wszystkie interfejsy sieciowe w węźle.
  • Publikuje dostępne dodatkowe karty sieciowe jako zasoby urządzeń DRA.
  • Obsługuje dołączanie i odłączanie kart sieciowych do i z przestrzeni nazw sieci zasobników podczas planowania zasobnika.

Kompletny przepływ od początku do końca

sequenceDiagram
    participant User
    participant AKS as AKS Control Plane
    participant Node as AKS Node
    participant DRAnet as DRAnet Driver
    participant Scheduler as K8s Scheduler
    participant Pod

    User->>AKS: Create node pool with secondary NICs
    AKS->>Node: Provision node with primary + secondary NICs
    DRAnet->>Node: Discover available NICs
    DRAnet->>Scheduler: Publish NIC devices via DRA
    User->>Scheduler: Deploy pod with ResourceClaim
    Scheduler->>DRAnet: Allocate NIC to pod
    DRAnet->>Pod: Inject secondary NIC into pod namespace
    Pod->>Pod: Pod runs with eth0 + secondary NIC(s)

Limitations

  • Wersja platformy Kubernetes — wymaga platformy Kubernetes w wersji 1.34 lub nowszej (w przypadku obsługi ogólnie dostępnej wersji DRA).
  • Zakres sieci wirtualnej — wszystkie pomocnicze karty sieciowe muszą łączyć się z tą samą siecią wirtualną co podstawowa karta sieciowa. Można je dołączyć do różnych podsieci w tej sieci wirtualnej.
  • Przypisanie karty sieciowej — każda pomocnicza karta sieciowa może być przypisana tylko do jednego podu. Nie można współdzielić pomocniczej karty sieciowej między wieloma zasobnikami.
  • Rozwiązanie DRANET obsługuje tylko pule węzłów systemu Linux. Nie są obsługiwane grupy węzłów Windows.
  • Zasady sieci są wymuszane tylko na podstawowej karcie sieciowej. Ruch przepływujący przez dodatkowe interfejsy sieciowe (NIC) pomija wymuszanie zasad sieciowych usługi AKS.
  • Rozmiar maszyny wirtualnej — rozmiar maszyny wirtualnej puli węzłów musi obsługiwać łączną liczbę interfejsów sieciowych (podstawowy i pomocniczy). Aby sprawdzić maksymalną liczbę obsługiwanych interfejsów sieciowych i możliwości usługi Accelerated Networking, zobacz dokumentację rozmiaru maszyny wirtualnej platformy Azure lub użyj polecenia az vm list-skus. Oto przykład:
az vm list-skus \
  --location eastus \
  --resource-type virtualMachines \
  --all \
  --query "[?name=='Standard_D8s_v5'].{
      SKU:name,
      MaxNICs:capabilities[?name=='MaxNetworkInterfaces']|[0].value,
      AcceleratedNetworking:capabilities[?name=='AcceleratedNetworkingEnabled']|[0].value
  }" \
  -o table

Następne kroki