Dela via


Konfigurera Layer 7(L7)-principer med Advanced Container Networking Services

Den här artikeln visar hur du konfigurerar L7-principer med Advanced Container Networking Services i AKS-kluster. Fortsätt först när du har granskat begränsningarna och övervägandena som anges på sidan Översikt över Layer 7-princip .

Förutsättningar

Den lägsta versionen av Azure CLI som krävs för stegen i den här artikeln är 2.79.0. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera, se Installera Azure CLI.

Installera Azure CLI-tillägget aks-preview

Installera eller uppdatera azure CLI-förhandsgranskningstillägget az extension add med hjälp av kommandot eller az extension update .

Den lägsta versionen av Azure CLI-tillägget aks-preview är 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

Registrera funktionsflaggan AdvancedNetworkingL7PolicyPreview

Registrera funktionsflaggan AdvancedNetworkingL7PolicyPreview med az feature register-kommandot.

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

Verifiera lyckad registrering med hjälp av az feature show kommandot . Det tar några minuter innan registreringen har slutförts.

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

När funktionen visas Registereduppdaterar du registreringen av Microsoft.ContainerService resursprovidern med kommandot az provider register .

Aktivera avancerade containernätverkstjänster

För att kunna fortsätta måste du ha ett AKS-kluster med Advanced Container Networking Services aktiverat.

Kommandot az aks create med flaggan Advanced Container Networking Services, --enable-acns, skapar ett nytt AKS-kluster med alla funktioner i Advanced Container Networking Services. Dessa funktioner omfattar:

Anmärkning

Kluster med Cilium-dataplanet stöder containernätverksobservabilitet och containernätverkssäkerhet från och med Kubernetes version 1.29.

För den här demonstrationen måste parametern --acns-advanced-networkpolicies vara inställd på "L7" för att aktivera L7-principer. Om du anger den här parametern till "L7" aktiveras även FQDN-filtrering. Om du bara vill aktivera FQDN-filtrering anger du parametern till "FQDN". Om du vill inaktivera båda funktionerna kan du följa anvisningarna i Inaktivera containernätverkssäkerhet.


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

Aktivera Advanced Container Networking Services i ett befintligt kluster

Kommandot az aks update med flaggan Advanced Container Networking Services uppdaterar --enable-acnsett befintligt AKS-kluster med alla avancerade funktioner för containernätverkstjänster som innehåller containernätverksobservabilitet och funktionen Container Network Security .

Anmärkning

Endast kluster med Cilium-dataplanet stöder funktioner för containernätverkssäkerhet i Advanced Container Networking Services.

För den här demonstrationen måste parametern --acns-advanced-networkpolicies vara inställd på "L7" för att aktivera L7-principer. Om du anger den här parametern till "L7" aktiveras även FQDN-filtrering. Om du bara vill aktivera FQDN-filtrering anger du parametern till "FQDN". Om du vill inaktivera båda funktionerna kan du följa anvisningarna i Inaktivera containernätverkssäkerhet.

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

Hämta klusterautentiseringsuppgifter

Hämta dina autentiseringsuppgifter för klustret med hjälp av az aks get-credentials kommandot .

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

Konfigurera http-server-program i ditt AKS-kluster

Använd YAML nedan på AKS-klustret för att konfigurera http-server programmet.

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";
        }
    }

Konfigurera http-klientprogram i ditt AKS-kluster

Använd YAML nedan på AKS-klustret för att konfigurera http-client programmet.

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"]

Testa anslutningen med en policy

Tillämpa sedan följande Layer 7-policy för att endast tillåta GET begäranden från http-client-applikationen till /products-slutpunkten på 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"

Verifiera princip

Kontrollera att principen tillämpas genom att köra dessa kommandon från http-client podden:

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

Du bör förvänta dig utdata som Listing products... när du kör kommandot ovan

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

Du bör förvänta dig utdata som Access Denied när du kör kommandot ovan

Observera L7-mått

Om du har containernätverksobservatör för avancerad containernätverkstjänst aktiverad kan du visualisera trafiken i Grafana.

För att förenkla analysen av dessa L7-mått tillhandahåller vi förkonfigurerade Azure Managed Grafana-instrumentpaneler. Du hittar dem under mappen Instrumentpaneler > i Azure Managed Prometheus , med filnamn som "Kubernetes/Networking/L7 (Namnområde)" och "Kubernetes/Networking/L7 (arbetsbelastning)".

Du bör se mått som liknar följande:

Skärmbild som visar Grafana-instrumentpanelen för L7-trafik.

Rensa resurser

Om du inte planerar att använda det här programmet tar du bort de andra resurser som du skapade i den här artikeln med hjälp av az group delete kommandot .

  az group delete --name $RESOURCE_GROUP

Nästa steg

I den här artikeln har du lärt dig hur du aktiverar och tillämpar L7-principer med Advanced Container Networking Services för ditt AKS-kluster.