Condividi tramite


Configurare i criteri di livello 7(L7) con Advanced Container Networking Services (anteprima)

Questo articolo illustra come configurare le politiche L7 con Advanced Container Networking Services nei cluster AKS. Continuare solo dopo aver esaminato le limitazioni e le considerazioni elencate nella pagina Panoramica dei criteri di livello 7 .

Prerequisiti

  • Un account Azure con una sottoscrizione attiva. Se non ne hai uno, crea un account gratuito prima di iniziare.

La versione minima dell'interfaccia della riga di comando di Azure necessaria per i passaggi descritti in questo articolo è 2.71.0. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Installare l'estensione aks-preview dell'interfaccia della riga di comando di Azure.

Installare o aggiornare l'estensione di anteprima dell'interfaccia della riga di comando di Azure usando i comandi az extension add o az extension update.

La versione minima dell'estensione dell'interfaccia della riga di comando di Azure aks-preview è 14.0.0b6

# 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

Registrare il flag di funzionalità AdvancedNetworkingL7PolicyPreview

Registrare il flag della funzionalità AdvancedNetworkingL7PolicyPreview usando il comando az feature register.

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

Verificare la corretta registrazione usando il az feature show comando . Per completare la registrazione sono necessari alcuni minuti.

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

Una volta visualizzata la funzionalità Registered, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il comando az provider register.

Abilitare i servizi avanzati di rete per contenitori

Per continuare, è necessario disporre di un cluster AKS con i Servizi di Rete Avanzati per i Contenitori abilitati.

Il comando az aks create con il flag Advanced Container Networking Services, --enable-acns, crea un nuovo cluster AKS con tutte le funzionalità avanzate di networking per container. Queste funzionalità includono:

Annotazioni

I cluster con il piano dati Cilium supportano l'osservabilità della rete dei contenitori e la sicurezza della rete dei contenitori a partire da Kubernetes versione 1.29.

Per questa demo, il --acns-advanced-networkpolicies parametro deve essere impostato su "L7" per abilitare i criteri L7. L'impostazione di questo parametro su "L7" abilita anche il filtro FQDN. Se si vuole abilitare solo il filtro FQDN, impostare il parametro su "FQDN". Per disabilitare entrambe le funzionalità, è possibile seguire le istruzioni fornite in Disabilitare la sicurezza di rete dei contenitori.


export CLUSTER_NAME="<aks-cluster-name>"

# Create an AKS cluster
az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --generate-ssh-keys \
    --network-plugin azure \
    --network-dataplane cilium \
    --enable-acns \
    --acns-advanced-networkpolicies L7

Abilitare i Servizi di Networking Avanzato per Container in un cluster esistente

Il comando az aks update con il flag Advanced Container Networking Services, --enable-acns, aggiorna un cluster AKS esistente con tutte le funzionalità di Advanced Container Networking Services, che includono l'osservabilità della rete dei contenitori e la funzionalità di sicurezza della rete dei contenitori.

Annotazioni

Solo i cluster con il piano dati Cilium supportano le funzionalità di sicurezza di rete dei contenitori di Advanced Container Networking Services.

Per questa demo, il --acns-advanced-networkpolicies parametro deve essere impostato su "L7" per abilitare i criteri L7. L'impostazione di questo parametro su "L7" abilita anche il filtro FQDN. Se si vuole abilitare solo il filtro FQDN, impostare il parametro su "FQDN". Per disabilitare entrambe le funzionalità, è possibile seguire le istruzioni fornite in Disabilitare la sicurezza di rete dei contenitori.

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

Ottenere le credenziali del cluster

Ottenere le credenziali del cluster usando il comando az aks get-credentials.

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

Configurare l'applicazione http-server sul cluster AKS.

Applicare il codice YAML seguente al cluster del servizio Azure Kubernetes per configurare l'applicazione http-server .

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-server
  labels:
    app: http-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: http-server
  template:
    metadata:
      labels:
        app: http-server
    spec:
      containers:
      - name: http-server
        image: nginx:latest
        ports:
        - containerPort: 8080
        volumeMounts:
        - name: config-volume
          mountPath: /etc/nginx/conf.d
      volumes:
      - name: config-volume
        configMap:
          name: nginx-config

---
apiVersion: v1
kind: Service
metadata:
  name: http-server
spec:
  selector:
    app: http-server
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-config
data:
  default.conf: |
    server {
        listen 8080;

        location / {
            return 200 "Hello from the server root!\n";
        }

        location /products {
            return 200 "Listing products...\n";
        }
    }

Configurare l'applicazione http-client nel cluster del servizio Azure Kubernetes

Applicare il codice YAML seguente al cluster del servizio Azure Kubernetes per configurare l'applicazione http-client .

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-client
  labels:
    app: http-client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: http-client
  template:
    metadata:
      labels:
        app: http-client
    spec:
      containers:
      - name: http-client
        image: curlimages/curl:latest
        command: ["sleep", "infinity"]

Testare la connettività con una politica

Applicare quindi i seguenti criteri livello 7 per consentire solo le richieste di GET dall'applicazione http-client all'endpoint /products sul http-server:

apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
  name: allow-get-products
spec:
  description: "Allow only GET requests to /products from http-client to http-server"
  endpointSelector:
    matchLabels:
      app: http-server
  ingress:
  - fromEndpoints:
    - matchLabels:
        app: http-client
    toPorts:
    - ports:
      - port: "8080"
        protocol: TCP
      rules:
        http:
        - method: "GET"
          path: "/products"

Verificare la polizza

Per verificare l'applicazione dei criteri, eseguire questi comandi dal pod http-client:

kubectl exec -it <your-http-client-pod-name> -n default -- curl -v http://http-server:80/products

È consigliabile aspettarsi un output come Listing products... quando si esegue il comando precedente

kubectl exec -it <your-http-client-pod-name> -n default -- curl -v -XPOST http://http-server:80/products -d "test=data"

È consigliabile aspettarsi un output come Access Denied quando si esegue il comando precedente

Osservazione delle metriche L7

Se è abilitata l'osservabilità della rete dei contenitori di Advanced Container Network Service, è possibile visualizzare il traffico in Grafana.

Per semplificare l'analisi di queste metriche L7, forniamo dashboard Grafana gestiti di Azure preconfigurati. È possibile trovarli nella cartella Dashboard di > Azure Managed Prometheus, con nomi file come "Kubernetes/Networking/L7 (spazio dei nomi)" e "Kubernetes/Networking/L7 (Workload)".

Le metriche visualizzate saranno simili alle seguenti:

Screenshot che mostra il dashboard di Grafana per il traffico L7.

Pulire le risorse

Se non si prevede di usare questa applicazione, eliminare le altre risorse create in questo articolo usando il comando az group delete.

  az group delete --name $RESOURCE_GROUP

Passaggi successivi

In questo articolo pratico, hai imparato come abilitare e applicare le politiche L7 con i servizi avanzati di rete per i container nel cluster AKS.