Udostępnij za pośrednictwem


Konfigurowanie funkcji filtrowania nazw FQDN dla zabezpieczeń sieci kontenerów w usłudze Advanced Container Networking Services

W tym artykule pokazano, jak skonfigurować usługę Advanced Container Networking Services za pomocą funkcji zabezpieczeń sieci kontenerów w klastrach usługi AKS.

Wymagania wstępne

  • Konto platformy Azure z aktywną subskrypcją. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto.

Minimalna wersja interfejsu wiersza polecenia platformy Azure wymagana do wykonania kroków w tym artykule to 2.56.0. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.

Instalowanie rozszerzenia interfejsu wiersza polecenia platformy Azure w wersji zapoznawczej usługi aks

Zainstaluj lub zaktualizuj rozszerzenie interfejsu wiersza polecenia platformy Azure w wersji zapoznawczej przy użyciu az extension add polecenia lub az extension update .

# Install the aks-preview extension
az extension add --name aks-preview

# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

Włączanie zaawansowanych usług sieciowych kontenerów

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

Polecenie az aks create z flagą --enable-acnsAdvanced 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 nazw FQDN. Aby dowiedzieć się więcej, odwiedź stronę Zabezpieczenia sieci kontenerów.

Uwaga

Klastry z płaszczyzną danych Cilium obsługują zabezpieczenia sieci kontenerów i sieci kontenerów, począwszy od platformy Kubernetes w wersji 1.29.

# Set an environment variable for the AKS cluster name. Make sure to replace the placeholder with your own value.
export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --location eastus \
    --max-pods 250 \
    --network-plugin azure \
    --network-plugin-mode overlay \
    --network-dataplane cilium \
    --node-count 2 \
    --pod-cidr 192.168.0.0/16 \
    --kubernetes-version 1.29 \
    --enable-acns

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

Polecenie az aks update z flagą --enable-acnsAdvanced Container Networking Services , aktualizuje istniejący klaster AKS ze wszystkimi funkcjami Advanced Container Networking Services, które obejmują możliwość obserwowania sieci kontenerów i funkcję zabezpieczeń sieci kontenerów.

Uwaga

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

az aks update \
    --resource-group $RESOURCE_GROUP \
    --name $CLUSTER_NAME \
    --enable-acns

Pobieranie poświadczeń klastra

Pobierz poświadczenia klastra az aks get-credentials przy użyciu polecenia .

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

Testowanie łączności przy użyciu zasad

W tej sekcji pokazano, jak obserwować wymuszanie zasad za pośrednictwem agenta Cilium. Żądanie DNS jest wykonywane do dozwolonej nazwy FQDN i innego przypadku, w którym jest blokowany.

Utwórz plik o nazwie demo-policy.yaml i wklej następujący manifest YAML:

apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
  name: "allow-bing-fqdn"
spec:
  endpointSelector:
    matchLabels:
      app: demo-container
  egress:
    - toEndpoints:
      - matchLabels:
          "k8s:io.kubernetes.pod.namespace": kube-system
          "k8s:k8s-app": kube-dns
      toPorts:
        - ports:
           - port: "53"
             protocol: ANY
          rules:
            dns:
              - matchPattern: "*.bing.com"
    - toFQDNs:
      - matchPattern: "*.bing.com"

Określ nazwę manifestu YAML i zastosuj go przy użyciu polecenia [kubectl apply][kubectl-apply]:

kubectl apply –f demo-policy.yaml -n demo

Tworzenie zasobnika demonstracyjnego

Utwórz zasobnik z uruchomioną powłoką client Bash:

kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.43 --labels="app=demo-container" --command -- bash

Powłoka z narzędziami do testowania nazwy FQDN powinna zostać otwarta z następującymi danymi wyjściowymi:

If you don't see a command prompt, try pressing enter.
bash-5.0#

W osobnym oknie uruchom następujące polecenie, aby pobrać węzeł uruchomionego zasobnika.

kubectl get po -n demo --sort-by="{spec.nodeName}" -o wide

Dane wyjściowe powinny wyglądać mniej więcej tak jak w tym przykładzie:

NAME     READY   STATUS    RESTARTS   AGE     IP              NODE                                NOMINATED NODE   READINESS GATES
client   1/1     Running   0          5m50s   192.168.0.139   aks-nodepool1-22058664-vmss000001   <none>           <none>

Zasobnik jest uruchomiony w węźle o nazwie aks-nodepool1-22058664-vmss000001. Uzyskaj wystąpienie agenta Cilium uruchomione w tym węźle:

k get po -n kube-system -o wide --field-selector spec.nodeName="aks-nodepool1-22058664-vmss000001" | grep "cilium"

cilium-s4x24 Oczekiwana wartość powinna znajdować się w danych wyjściowych.

cilium-s4x24                          1/1     Running   0          47m   10.224.0.4      aks-nodepool1-22058664-vmss000001   <none>           <none>

Sprawdzanie agenta cilium

Użyj interfejsu cilium wiersza polecenia, aby monitorować zablokowany ruch.

kubectl exec -it -n kube-system cilium-s4x24 -- sh
Defaulted container "cilium-agent" out of: cilium-agent, install-cni-binaries (init), mount-cgroup (init), apply-sysctl-overwrites (init), mount-bpf-fs (init), clean-cilium-state (init), block-wireserver (init)
#

W tej powłoce uruchom polecenie cilium monitor -t drop:

Listening for events on 2 CPUs with 64x4096 of shared memory
Press Ctrl-C to quit
time="2024-10-08T17:48:27Z" level=info msg="Initializing dissection cache..." subsys=monitor

Weryfikowanie zasad

W pierwszej powłoce utwórz żądanie do dozwolonej nazwy FQDN, *.bing.comzgodnie z zasadami. Powinno to zakończyć się pomyślnie i dozwolone przez agenta.

bash-5.0# ./agnhost connect www.bing.com:80

Następnie utwórz kolejne żądanie do nazwy FQDN, które ma zostać zablokowane:

bash-5.0# ./agnhost connect www.example.com:80

Agent Cilium zablokował żądanie przy użyciu danych wyjściowych:

xx drop (Policy denied) flow 0xfddd76f6 to endpoint 0, ifindex 29, file bpf_lxc.c:1274, , identity 48447->world: 192.168.0.149:45830 -> 93.184.215.14:80 tcp SYN

Czyszczenie zasobów

Jeśli nie planujesz korzystania z tej aplikacji, usuń inne zasoby utworzone w tym artykule przy użyciu az group delete polecenia .

  az group delete --name $RESOURCE_GROUP

Następne kroki

W tym artykule z instrukcjami przedstawiono sposób instalowania i włączania funkcji zabezpieczeń za pomocą usług Advanced Container Networking Services dla klastra usługi AKS.