Wdrażanie szyfrowania WireGuard za pomocą usług Advanced Container Networking Services

W tym artykule pokazano, jak wdrożyć szyfrowanie WireGuard za pomocą usług Advanced Container Networking Services w klastrach Azure Kubernetes Service (AKS).

Wymagania wstępne

  • Konto Azure z aktywną subskrypcją. Jeśli go nie masz, przed rozpoczęciem utwórz bezpłatne konto .
  • Minimalna wersja Azure CLI wymagana do wykonania kroków w tym artykule to 2.71.0. Aby dowiedzieć się, jaka wersja jest używana, uruchom polecenie az --version. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI.

  • Szyfrowanie WireGuard jest obsługiwane tylko w przypadku Azure CNI obsługiwanej przez cilium. Jeśli używasz innej wtyczki sieciowej, szyfrowanie WireGuard nie jest obsługiwane. Zobacz Konfigurowanie Azure CNI obsługiwane przez Cilium.

  • WireGuard ustanawia szyfrowane tunele za pośrednictwem portu UDP 51871, który jest udostępniony na każdym węźle AKS. Upewnij się, że port UDP 51871 jest dozwolony między wszystkimi adresami IP węzłów, zwłaszcza jeśli środowisko korzysta z zapór.

Włączanie usług Advanced Container Networking Services i WireGuard

Aby kontynuować, musisz mieć klaster usługi AKS z włączoną usługą Advanced Container Networking Services .

Polecenie az aks create z flagą --enable-acns Advanced Container Networking Services tworzy nowy klaster AKS ze wszystkimi funkcjami Advanced Container Networking Services. Obejmują one następujące funkcje:

  • Obserwowanie sieci kontenerów: zapewnia wgląd w ruch sieciowy. Aby dowiedzieć się więcej, odwiedź stronę Obserwacja sieci kontenerów.

  • Zabezpieczenia sieci kontenerów: Oferuje funkcje zabezpieczeń, takie jak filtrowanie w pełni kwalifikowanej nazwy domeny (FQDN). Aby dowiedzieć się więcej, odwiedź stronę Zabezpieczenia sieci kontenerów.

Uwaga / Notatka

Klastry z płaszczyzną danych Cilium obsługują obserwowalność sieci kontenerów i zabezpieczenia sieci kontenerów, począwszy od wersji 1.29 platformy Kubernetes. Narzędzie WireGuard jest domyślnie wyłączone nawet po włączeniu usług Advanced Container Networking Services. Aby włączyć funkcję WireGuard, ustaw typ szyfrowania przy użyciu flagi --acns-transit-encryption-type wireguard.


# Set environment variables for the AKS cluster name and resource group. Make sure to replace the placeholders with your own values.
export CLUSTER_NAME="<aks-cluster-name>"
export RESOURCE_GROUP="<resourcegroup-name>"
 
# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --location eastus \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --network-dataplane cilium \
    --enable-acns \
    --acns-transit-encryption-type wireguard \
    --generate-ssh-keys

Włączanie usług Advanced Container Networking Services i WireGuard w istniejącym klastrze

Polecenie az aks update z flagą --enable-acns Zaawansowane Usługi Sieciowe Kontenerów, aktualizuje istniejący klaster AKS ze wszystkimi funkcjami Zaawansowanych Usług Sieciowych Kontenerów, które obejmują obserwowalność sieci kontenerów oraz funkcję bezpieczeństwa sieci kontenerów.

Ważne

Włączenie narzędzia WireGuard w istniejącym klastrze spowoduje wyzwolenie ponownego uruchomienia agenta Cilium we wszystkich węzłach. W przypadku dużych klastrów ten proces może zająć trochę czasu i może tymczasowo wpłynąć na obciążenia. Zaleca się zaplanowanie aktualizacji w oknie obsługi lub okresie niskiego natężenia ruchu w celu zminimalizowania zakłóceń

Uwaga / Notatka

Tylko klastry z płaszczyzną danych Cilium obsługują funkcje zabezpieczeń sieci kontenerów usługi Advanced Container Networking Services.

Narzędzie WireGuard jest domyślnie wyłączone nawet po włączeniu usług Advanced Container Networking Services. Aby włączyć funkcję WireGuard, ustaw typ szyfrowania przy użyciu flagi --acns-transit-encryption-type wireguard.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns \
    --acns-transit-encryption-type wireguard

Pobieranie poświadczeń klastra

Pobierz poświadczenia klastra, używając polecenia az aks get-credentials.

az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Weryfikowanie konfiguracji

Sprawdź, czy WireGuard został pomyślnie włączony przy użyciu polecenia cilium-dbg.

Uwaga / Notatka

Po aktywacji może upłynąć kilka minut, aby funkcja WireGuard była w pełni włączona i skonfigurowana we wszystkich węzłach.

  1. Uruchom powłokę bash w jednym z podów Cilium
kubectl -n kube-system exec -ti ds/cilium -- bash
  1. Sprawdź, czy funkcja WireGuard jest włączona
cilium-dbg encrypt status

Oczekiwane dane wyjściowe:

Encryption: Wireguard
Interface: cilium_wg0
        Public key: jikeOvVATORm/1GD0kZLxKhw1lofdsfdgiXWVyVIR3T0=
        Number of peers: 2

Liczba elementów równorzędnych powinna być równa liczbie węzłów minus jeden.

Rozwiązywanie problemów

Gdy szyfrowanie WireGuard jest włączone w klastrze usługi AKS przy użyciu interfejsu CNI Cilium, możesz użyć narzędzia interfejsu wiersza polecenia cilium-dbg, aby sprawdzić stan tunelu, zweryfikować łączność równorzędną i debugować problemy związane z szyfrowaniem.

Sprawdzanie elementów równorzędnych WireGuard

Stan i konfigurację komunikacji równorzędnej można sprawdzić w każdym węźle przy użyciu:

kubectl exec -n kube-system ds/cilium -- cilium-dbg debuginfo --output json | jq .encryption

Oczekiwane dane wyjściowe:

{
  "wireguard": {
    "interfaces": [
      {
        "listen-port": 51871,
        "name": "cilium_wg0",
        "peer-count": 1,
        "peers": [
          {
            "allowed-ips": [
              "10.244.1.31/32",
              "10.244.1.206/32",
              "10.224.0.6/32"
            ],
            "endpoint": "10.224.0.6:51871",
            "last-handshake-time": "2025-04-24T11:13:49.102Z",
            "public-key": "3qwZEQLdK5IcFcdXxtr1m8RkDqznPVWEEirJ88+zDyk=",
            "transfer-rx": 2457024,
            "transfer-tx": 15746568
          }
        ],
        "public-key": "jikeOvVATORm/1GD0kZLxKhw1lofdsfdgiXWVyVIR3T0="
      }
    ],
    "node-encryption": "Disabled"
  }
}

Te dane wyjściowe pokazują bieżący stan szyfrowania WireGuard w węźle.

  • Port nasłuchiwania: port UDP (51871), na którym ten węzeł nasłuchuje ruchu zaszyfrowanego od innych węzłów.
  • liczba węzłów: liczba zdalnych węzłów WireGuard skonfigurowanych dla tego węzła.
  • Rówieśnicy
    • allowed-ips: lista adresów IP podów kierowanych przez zaszyfrowany tunel do tego węzła.
    • punkt końcowy: adres IP i port interfejsu WireGuard zdalnego współpracownika.
    • last-handshake-time: Sygnatura czasowa najnowszej pomyślnej wymiany kluczy z tym elementem równorzędnym.
    • public-key: klucz publiczny zdalnego komputera partnerskiego.
    • transfer-rx/transfer-tx: całkowita liczba bajtów odebranych/przesłanych przez tunel.
  • public-key: klucz publiczny lokalnego interfejsu WireGuard.
  • node-encryption: szyfruje ruch pochodzący z samego węzła lub z zasobników sieci hosta. Obecnie szyfrowany jest tylko ruch podów. Szyfrowanie węzła nie jest jeszcze obsługiwane i pozostaje domyślnie wyłączone.

Wyłączanie narzędzia WireGuard w istniejącym klastrze

Narzędzie WireGuard można wyłączyć niezależnie bez wpływu na inne funkcje usług Advanced Container Networking Services. Aby go wyłączyć, ustaw flagę --acns-transit-encryption-type=none.

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns \
    --acns-transit-encryption-type none

Znane problemy

  • Pakiety mogą zostać porzucone podczas konfigurowania urządzenia WireGuard prowadzącego do problemów z łącznością. Ten problem występuje, gdy punkty końcowe są dodawane lub usuwane lub gdy wystąpią aktualizacje węzła. W niektórych przypadkach ten problem może prowadzić do niepowodzenia wywołań sendmsg i sendto. Aby uzyskać więcej informacji, zobacz GitHub problem 33159.