Verkeer tussen pods beveiligen met netwerkbeleid in Azure Kubernetes Service (AKS)

Important

Vanaf 30 september 2028 biedt Azure Kubernetes Service (AKS) geen ondersteuning meer voor Azure Network Policy Manager (NPM) op Linux-knooppunten . Om serviceonderbrekingen te voorkomen, moet u AKS-clusters met Linux-knooppunten migreren van NPM naar Cilium-netwerkbeleid tegen de einddatum van de ondersteuning. Voor meer informatie over deze beëindiging, zie de aankondiging van de beëindiging van Azure Updates. Als u op de hoogte wilt blijven van aankondigingen en updates, volg de AKS-release-opmerkingen.

Betrokken clusters identificeren

Als u AKS-clusters met Linux-knooppuntgroepen wilt vinden met behulp van Azure Network Policy Manager (NPM), voert u de Azure Resource Graph-query uit waarin alle AKS-clusters worden vermeld waar agentPool.osType != "Windows" en properties.networkProfile.networkPolicy == "azure".

Important

Vanaf 31 maart 2028 biedt Azure Kubernetes Service (AKS) geen ondersteuning meer voor kubenet-netwerken. Als u serviceonderbrekingen wilt voorkomen, voert u een upgrade uit naar CNI-overlaynetwerken (Azure Container Networking Interface) vóór de einddatum van de ondersteuning. Zie voor meer informatie over deze afschaffing, het GitHub-issue over de afschaffing en de aankondiging over de afschaffing van Azure Updates. Als u op de hoogte wilt blijven van aankondigingen en updates, volg de AKS-release-opmerkingen.

Installeer een netwerkbeleidsengine en maak Kubernetes-netwerkbeleid om de verkeersstroom tussen pods in AKS-clusters te beheren met behulp van de Azure CLI of Terraform.

Overzicht van netwerkbeleid

Standaard kunnen alle pods in een AKS-cluster zonder beperkingen verkeer verzenden en ontvangen. Om de beveiliging te verbeteren, kunt u regels definiëren waarmee de verkeersstroom wordt bepaald.

Netwerkbeleid is een Kubernetes-specificatie die toegangsbeleid definieert voor communicatie tussen pods. Wanneer u netwerkbeleid gebruikt, definieert u een geordende set regels voor het verzenden en ontvangen van verkeer. Je past de regels toe op een verzameling pods die overeenkomen met een of meer labelselectoren.

U definieert de netwerkbeleidsregels als YAML-manifesten en u kunt ze opnemen in bredere manifesten die ook een implementatie of service maken.

Netwerkbeleidsopties in AKS

Azure biedt drie netwerkbeleidsengines voor het afdwingen van netwerkbeleid:

We raden u aan Cilium te gebruiken, dat robuuste ondersteuning biedt voor systeemeigen Kubernetes-beleid, uitgebreide functies zoals laag 7-beleid en FQDN-filters, en een op eBPF gebaseerd gegevensvlak dat betere prestaties, schaalbaarheid en beveiliging biedt in vergelijking met op IPTables gebaseerde oplossingen.

Als u het opgegeven beleid wilt afdwingen, gebruikt Azure NPM IPTables voor Linux-knooppunten. Beleidsregels worden omgezet in sets met toegestane en niet-toegestane IP-paren. Het systeem programmeert deze paren als IPTable-filterregels.

Verschillen tussen netwerkbeleidsengines: Cilium, Azure NPM en Calico

Engine voor netwerkbeleid Ondersteunde platforms Ondersteunde netwerkopties Naleving van Kubernetes-specificatie Andere functies Support
Cilium Linux Azure CNI Ondersteunt alle beleidstypen FQDN, L3/4, L7 Ondersteunings- en engineeringteam van Azure
Azure NPM Linux Azure CNI Ondersteunt alle beleidstypen N/A Ondersteunings- en engineeringteam van Azure
Calico Linux, Windows Server 2019, Windows Server 2022 Azure CNI (Linux, Windows Server 2019, Windows Server 2022) en kubenet (Linux) Ondersteunt alle beleidstypen AKS test niet en biedt geen ondersteuning voor functies buiten het afdwingen van networking.k8s.io-beleid. Ondersteunings- en engineeringteam van Azure

beperkingen voor netwerkbeleidsbeheer Azure

Azure NPM heeft de volgende beperkingen:

  • Schalen naar meer dan 250 knooppunten en 20.000 pods wordt niet ondersteund. Als u probeert te schalen buiten deze limieten, kunnen er OOM-fouten (Onvoldoende geheugen) optreden. Voor betere schaalbaarheid en IPv6-ondersteuning raden we u aan om azure CNI powered by Cilium te gebruiken of te upgraden voor uw netwerkbeleidsengine.
  • IPv6 wordt niet ondersteund. Anders ondersteunt het volledig de specificaties van het netwerkbeleid in Linux.
  • Vanaf 30 september 2026 biedt Azure Kubernetes Service (AKS) geen ondersteuning meer voor Azure Network Policy Manager (NPM) op Windows knooppunten.

Bekende problemen met Azure Network Policy Manager

Mogelijk ondervindt u tijdelijke verbindingsproblemen voor nieuwe verbindingen met/van pods op betrokken knooppunten wanneer u een 'groot genoeg' netwerkbeleid bewerkt of verwijdert. Het bereiken van deze racevoorwaarde heeft nooit invloed op actieve verbindingen.

Als deze racevoorwaarde optreedt voor een knooppunt, voert de Azure NPM-pod op dat knooppunt een status in waarin de beveiligingsregels niet kunnen worden bijgewerkt, wat kan leiden tot onverwachte connectiviteit voor nieuwe verbindingen met/van pods op het betrokken knooppunt. Om het probleem te verhelpen, wordt de Azure NPM-pod automatisch ~15 seconden na het invoeren van deze status opnieuw opgestart. Terwijl Azure NPM opnieuw wordt opgestart op het betrokken knooppunt, worden alle beveiligingsregels verwijderd en worden vervolgens beveiligingsregels voor alle netwerkbeleidsregels opnieuw toegepast. Hoewel alle beveiligingsregels opnieuw worden toegepast, is er een kans op tijdelijke, onverwachte connectiviteit voor nieuwe verbindingen met/van pods op het betrokken knooppunt.

Als u de kans wilt beperken dat deze racevoorwaarde wordt bereikt, kunt u de grootte van het netwerkbeleid verkleinen. Dit probleem treedt waarschijnlijk op voor een netwerkbeleid met verschillende ipBlock secties. Een netwerkbeleid met vier of minderipBlock secties heeft minder kans op het probleem.

Calico-beperkingen

  • AKS biedt geen ondersteuning voor het uitvoeren van door AKS beheerde Calico naast Calico Cloud of Calico Enterprise, omdat deze combinatie conflicten en onbedoeld gedrag kan veroorzaken. Als u Calico Cloud of Enterprise gebruikt, raadt Microsoft ten zeerste aan om AKS-beheerde Calico uit te schakelen. Neem contact op met Tigera voor ondersteuning met deze producten.
  • Door AKS beheerde Calico ondersteunt alleen networking.k8s.io netwerkbeleid. Als u projectcalico.org/v3-beleid wilt gebruiken, kunt u overwegen om te migreren naar een zelf-gehoste oplossing, zoals Calico Cloud, Calico Enterprise of BYOCNI.

Load balancer-services en netwerkbeleid

Kubernetes-serviceroutering voor zowel binnenkomende als uitgaande services omvat vaak het herschrijven van de bron- en doel-IP-adressen voor verkeer dat wordt verwerkt, inclusief verkeer dat vanuit een LoadBalancer service binnenkomt in het cluster. Dit herschrijfgedrag betekent dat het netwerkbeleid mogelijk niet correct verkeer verwerkt dat wordt ontvangen van of verzonden naar een externe service. Zie de documentatie voor Kubernetes-netwerkbeleid voor meer informatie.

Als u wilt beperken welke bronnen verkeer naar een load balancer-service kunnen verzenden, gebruikt spec.loadBalancerSourceRanges u deze om verkeerblokkering te configureren dat van toepassing is voordat eventuele herschrijvingen plaatsvinden. Zie de documentatie van de AKS Standard-load balancer voor meer informatie.

Voordat u begint

U moet Azure CLI versie 2.0.61 of hoger hebben geïnstalleerd en geconfigureerd. Zoek de versie met behulp van de az --version opdracht. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

In plaats van een door het systeem toegewezen identiteit te gebruiken, kunt u ook een door de gebruiker toegewezen identiteit gebruiken. Zie Beheerde identiteiten gebruiken voor meer informatie.

  • Terraform geïnstalleerd, versie 1.6 of hoger.
  • Azure CLI is geïnstalleerd en geverifieerd. Zoek de versie met behulp van de az --version opdracht. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. U gebruikt de Azure CLI om verbinding te maken met het cluster nadat Terraform het heeft gemaakt.
  • kubectl geïnstalleerd. U kunt deze lokaal installeren met behulp van de az aks install-cli opdracht. U gebruikt kubectl om het gedrag van het netwerkbeleid te controleren.

Een AKS-cluster maken met Azure Network Policy Manager (Linux)

  1. Stel omgevingsvariabelen in voor de naam van de resourcegroep, de clusternaam en de locatie. Vervang de waarden indien nodig.

    export RESOURCE_GROUP=myResourceGroup
    export CLUSTER_NAME=myAKSCluster
    export LOCATION=eastus
    
  2. Maak de resourcegroep met behulp van de az group create opdracht.

    az group create --resource-group $RESOURCE_GROUP --location $LOCATION
    
  3. Maak een AKS-cluster met behulp van de az aks create en specificeer azure voor de network-plugin en network-policy.

    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --node-count 1 \
        --network-plugin azure \
        --network-policy azure \
        --generate-ssh-keys
    

    Waarschuwing

    Azure Network Policy Manager (NPM) voor Linux-knooppunten wordt op 30 september 2028 buiten gebruik gesteld. Voor nieuwe implementaties raden we u aan Om Azure CNI Powered by Cilium te gebruiken met Cilium Network Policy. Zie Migreren van NPM naar Cilium-netwerkbeleid om bestaande clusters te migreren.

Een AKS-cluster maken met Calico

Maak een AKS-cluster met behulp van de az aks create opdracht. Specificeer --network-plugin azure en --network-policy calico. Wanneer u opgeeft--network-policy calico, schakelt u Calico in op zowel Linux- als Windows-knooppuntgroepen.

Als u van plan bent om Windows knooppuntgroepen toe te voegen aan uw cluster, moet u de windows-admin-username en windows-admin-password parameters opnemen die voldoen aan de Windows Server wachtwoordvereisten. Als u een gebruikersnaam wilt maken om te gebruiken als administratorreferenties voor uw Windows Server-containers in uw cluster, wordt u met de volgende opdracht gevraagd om een gebruikersnaam. Stel deze in op WINDOWS_USERNAME.

echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME

Important

Op dit moment is het gebruik van Calico-netwerkbeleid met Windows-knooppunten beschikbaar op nieuwe clusters met kubernetes versie 1.20 of hoger met Calico 3.17.2. Hiervoor moet u Azure CNI-netwerken gebruiken. Windows-knooppunten op AKS-clusters waarvoor Calico is ingeschakeld, hebben ook standaard Zwevend IP-adres ingeschakeld.

Voor clusters met alleen Linux-knooppuntgroepen met Kubernetes 1.20 met eerdere versies van Calico wordt de Calico-versie automatisch bijgewerkt naar 3.17.2.

Azure Network Policy Manager of Calico installeren op een bestaand cluster

Warning

Houd rekening met de volgende informatie bij het installeren van Azure NPM of Calico op een bestaand cluster:

  • Tijdens het upgradeproces wordt elke nodepool geactiveerd om gelijktijdig opnieuw geïmageerd te worden. Het afzonderlijk bijwerken van elke knooppuntgroep wordt niet ondersteund.
  • Binnen elke knooppuntgroep volgen knooppunten hetzelfde proces voor opnieuw opstarten als standaardbewerkingen voor upgraden van Kubernetes-versies. Dit gedrag betekent dat bufferknooppunten tijdelijk worden toegevoegd om de onderbreking van lopende applicaties tijdens het herbeeldingsproces van knooppunten te minimaliseren. Eventuele onderbrekingen die kunnen optreden, zijn vergelijkbaar met wat u kunt tegenkomen tijdens een upgrade van een knooppuntimage of Kubernetes-versie-upgrade.

De volgende informatie is van toepassing op upgrades van kubenet met Calico naar Azure CNI-overlay met Calico:

  • In kubenet-clusters waarvoor Calico is ingeschakeld, wordt Calico gebruikt als zowel een CNI- als netwerkbeleidsengine.
  • In Azure CNI-clusters wordt Calico alleen gebruikt voor het afdwingen van netwerkbeleid, niet als een CNI. Dit kan een korte vertraging veroorzaken tussen wanneer de pod wordt gestart en wanneer Calico uitgaand verkeer van de pod toestaat.

Werk een bestaand cluster bij om Azure NPM of Calico te installeren met behulp van de az aks update opdracht en het opgeven azure of calico voor de --network-policy parameter. In de volgende voorbeeldopdracht ziet u hoe u een van beide Azure NPM's installeert:

az aks update \
  --resource-group $RESOURCE_GROUP \
  --name $CLUSTER_NAME \
  --network-policy azure

Een bestaand cluster upgraden met Azure NPM of Calico naar Cilium

Werk het netwerkgegevensvlak bij naar Cilium voor clusters die al gebruikmaken van Azure CNI. Kubenet-clusters moeten eerst worden gemigreerd naar Azure CNI-overlay en vervolgens het netwerkgegevensvlak bijwerken naar Cilium als afzonderlijke bewerking. Controleer de vereisten en volg de stappen in Een bestaand cluster upgraden naar Azure CNI Powered by Cilium.

Verbinding maken met het AKS-cluster

Configureer kubectl om verbinding te maken met uw cluster met behulp van het az aks get-credentials commando. Bij deze opdracht worden inloggegevens gedownload en wordt de Kubernetes CLI geconfigureerd om deze te gebruiken.

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

Configuratie van netwerkbeleid controleren

Als u wilt beginnen met de verificatie van netwerkbeleid, maakt u een voorbeeldtoepassing en stelt u verkeersregels in.

  1. Maak een naamruimte met de naam demo om de voorbeeldpods uit te voeren met behulp van de kubectl create namespace opdracht.

    kubectl create namespace demo
    
  2. Maak een pod met de naam die server moet worden gebruikt op TCP-poort 80 met behulp van de kubectl run opdracht.

    kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80"
    
  3. Maak een pod genaamd client om Bash te draaien met behulp van de kubectl run opdracht.

    kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bash
    

    Note

    Als u de client of server op een bepaald knooppunt wilt plannen, voegt u de volgende bit toe vóór het --command argument in de opdracht voor het maken van kubectl run pods: --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'.

  4. Haal in een apart venster het IP-adres van de server pod op met behulp van de kubectl get pod opdracht.

    kubectl get pod --output=wide -n demo
    

    De uitvoer zou ongeveer moeten lijken op de volgende voorbeelduitvoer:

    NAME     READY   STATUS    RESTARTS   AGE   IP            NODE             NOMINATED NODE   READINESS GATES
    server   1/1     Running   0          30s   10.224.0.72   akswin22000001   <none>           <none>
    

Connectiviteit testen met netwerkbeleid

Aanbeveling

Voer de volgende opdracht uit in de clientshell om de connectiviteit zonder netwerkbeleid te testen: /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp Vervang door <server-ip> het IP-adres van de serverpod. Als de verbinding is geslaagd, is er geen uitvoer.

  1. Maak een bestand met de naam demo-policy.yaml en plak het volgende YAML-manifest:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: demo-policy
      namespace: demo
    spec:
      podSelector:
        matchLabels:
          app: server
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: client
        ports:
        - port: 80
          protocol: TCP
    
  2. Pas het netwerkbeleidsmanifest toe met behulp van de kubectl apply opdracht.

    kubectl apply -f demo-policy.yaml
    
  3. Controleer in de clientshell de verbinding met de server met behulp van de volgende /agnhost opdracht:

    /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp
    

    Connectiviteit met verkeer wordt geblokkeerd omdat de server is gelabeld met app=server, maar de client niet is gelabeld. De uitvoer zou ongeveer moeten lijken op de volgende voorbeelduitvoer:

    TIMEOUT
    
  4. Label de client verbinding met de server en controleer deze met behulp van de kubectl label opdracht.

    kubectl label pod client -n demo app=client
    

    Als de verbinding is geslaagd, is er geen uitvoer.

Migreren naar zelfbeheerde Calico

AKS biedt alleen ondersteuning voor Calico voor standaard Kubernetes-netwerkbeleid en test geen andere functies. Als u wilt overstappen op zelfbeheerde Calico, volgt u de Tigera-instructies in Migrate van door Azure beheerde Calico naar zelfbeheerde Calico. De Tigera-documentatie vermeldt dat u voor zelfbeheerde Calico --network-policy none instelt, zoals in de de-installatiesectie.

Azure Network Policy Manager of Calico verwijderen

Note

Houd rekening met de volgende informatie bij het verwijderen van Azure NPM of Calico vanuit een cluster:

  • Tijdens het verwijderingsproces worden geen CRD's (Custom Resource Definitions) en Custom Resources (CR's) verwijderd die door Calico worden gebruikt. Deze CRD's en CA's hebben allemaal namen die eindigen op projectcalico.org of tigera.io. U kunt deze CRD's en bijbehorende CR's handmatig verwijderen nadat u Calico hebt verwijderd.
  • De upgrade verwijdert geen netwerkbeleidsbronnen in het cluster, maar het beleid wordt niet meer afgedwongen na het verwijderingsproces.

Verwijder Azure Network Policy Manager of Calico uit een bestaand cluster met behulp van de az aks update opdracht en geef deze none op voor de --network-policy parameter.

az aks update \
  --resource-group $RESOURCE_GROUP \
  --name $CLUSTER_NAME \
  --network-policy none

Clusternetwerkbeleid wijzigen

De volgende stappen laten zien hoe u het bestaande netwerkbeleid van een cluster wijzigt in Calico. De procedure vereist dat het netwerkbeleid wordt gewijzigd in none en vervolgens wordt gewijzigd in calico.

De opdrachten gebruiken variabelen die eerder in dit artikel zijn opgegeven, een AKS-cluster maken met Azure Network Policy Manager (Linux).< Vervang anders $RESOURCE_GROUP en $CLUSTER_NAME door de resourcegroep en de naam van uw cluster.

  1. Voer de volgende opdracht uit om het bestaande netwerkbeleid van het cluster weer te geven.

    az aks show \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME \
      --query "networkProfile" \
      --output table
    
  2. Voer de volgende opdracht uit om het netwerkbeleid in te stellen op none.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy none
    
  3. Voer de volgende opdracht uit om het netwerkbeleid in te stellen op calico.

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy calico
    

De hulpbronnen opschonen

In dit artikel hebt u een naamruimte en twee pods gemaakt en een netwerkbeleid toegepast. Als u deze resources niet meer nodig hebt, kunt u ze verwijderen.

Verwijder de resources met behulp van de kubectl delete opdracht.

kubectl delete namespace demo

Als u de stappen van dit artikel hebt gevolgd om een AKS-cluster te maken, gebruikt u de az group delete opdracht om de AKS-resourcegroep en de bijbehorende resourcegroep te verwijderen met een naam die begint met MC_.

az group delete --resource-group $RESOURCE_GROUP --no-wait --yes

Een AKS-cluster maken met Cilium-netwerkbeleid met behulp van Terraform

In deze sectie wordt beschreven hoe u Terraform gebruikt om een AKS-cluster te implementeren dat gebruikmaakt van Azure CNI powered by Cilium voor het afdwingen van netwerken en netwerkbeleid en vervolgens een Kubernetes-resource NetworkPolicy gebruikt om pod-naar-pod-verkeer te beheren.

In dit voorbeeld wordt het volgende geïmplementeerd:

  • Een resourcegroep.
  • Een AKS-cluster dat gebruikmaakt van Azure CNI Overlay-netwerken met Cilium als de netwerkbeleidsengine en netwerkgegevensvlak.
  1. Maak een map om de Terraform-voorbeeldcode te testen en uit te voeren, en stel deze in als de huidige werkmap.

  2. Maak een bestand met de naam main.tfen voeg de volgende code in:

    terraform {
      required_version = ">= 1.6.0"
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~> 4.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
    resource "azurerm_resource_group" "example" {
      name     = "rg-aks-network-policy-example"
      location = "eastus"
    }
    
    resource "azurerm_kubernetes_cluster" "example" {
      name                = "aks-network-policy-example"
      location            = azurerm_resource_group.example.location
      resource_group_name = azurerm_resource_group.example.name
      dns_prefix          = "aksnetpolicyexample"
    
      default_node_pool {
        name       = "default"
        node_count = 1
        vm_size    = "Standard_D2s_v3"
    
        upgrade_settings {
          drain_timeout_in_minutes      = 0
          max_surge                     = "10%"
          node_soak_duration_in_minutes = 0
        }
      }
    
      identity {
        type = "SystemAssigned"
      }
    
      network_profile {
        network_plugin      = "azure"
        network_plugin_mode = "overlay"
        network_policy      = "cilium"
        network_data_plane  = "cilium"
        load_balancer_sku   = "standard"
      }
    }
    
  3. Initialiseer Terraform door de opdracht uit te terraform init voeren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van Azure-resources met Terraform.

    terraform init
    
  4. Maak de configuratie op en valideer deze door de terraform fmt en terraform validate opdrachten uit te voeren.

    terraform fmt
    terraform validate
    
  5. Maak een Terraform-uitvoeringsplan door de opdracht uit te terraform plan voeren. Met deze opdracht ziet u de resources die Terraform maakt of wijzigt in uw Azure-abonnement.

    terraform plan
    
  6. Pas het Terraform-uitvoeringsplan toe door de opdracht uit te terraform apply voeren. Met deze opdracht worden de resources gemaakt die zijn gedefinieerd in uw main.tf bestand in uw Azure-abonnement.

    terraform apply
    

Verbinding maken met het AKS-cluster met behulp van Terraform

  1. Installeer het kubernetes-opdrachtregelprogramma door de az aks install-cli opdracht uit te voeren en controleer de installatie.

    az aks install-cli
    kubectl version --client
    
  2. Configureer kubectl deze om verbinding te maken met uw cluster door de az aks get-credentials opdracht uit te voeren. Bij deze opdracht worden inloggegevens gedownload en wordt de Kubernetes CLI geconfigureerd om deze te gebruiken.

    az aks get-credentials \
        --resource-group rg-aks-network-policy-example \
        --name aks-network-policy-example
    
  3. Controleer of het cluster actief is door de opdracht kubectl get nodes uit te voeren.

    kubectl get nodes
    

Het instellen van netwerkbeleid controleren met Behulp van Terraform

Als u de installatie van het netwerkbeleid wilt controleren, maakt u een voorbeeldtoepassing en stelt u verkeersregels in.

  1. Maak een naamruimte met de naam demo om de voorbeeldpods uit te voeren met behulp van de kubectl create namespace opdracht.

    kubectl create namespace demo
    
  2. Maak een pod met de naam server die op TCP-poort 80 luistert door de opdracht kubectl run uit te voeren.

    kubectl run server \
      -n demo \
      --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \
      --labels="app=server" \
      --port=80 \
      --command -- /agnhost serve-hostname --tcp --http=false --port "80"
    
  3. Maak een pod met de naam client om Bash uit te voeren met de opdracht kubectl run.

    kubectl run -it client \
      -n demo \
      --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \
      --command -- bash
    
  4. Haal in een afzonderlijk venster het IP-adres van de server pod op met behulp van de kubectl get pod opdracht.

    kubectl get pod --output=wide -n demo
    

    Gebruik het IP-adres van de server pod wanneer u de connectiviteit vanuit de client shell in de volgende sectie test.

Connectiviteit met netwerkbeleid testen met behulp van Terraform

Het voorbeeld bevat een Kubernetes-manifest NetworkPolicy waarmee inkomend verkeer naar pods met het label app=server alleen wordt toegestaan vanaf pods met het label app=client op TCP-poort 80.

  1. Maak een bestand met de naam network-policy.yamlen voeg de volgende code in:

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: demo-policy
      namespace: demo
    spec:
      podSelector:
        matchLabels:
          app: server
      policyTypes:
        - Ingress
      ingress:
        - from:
            - podSelector:
                matchLabels:
                  app: client
          ports:
            - protocol: TCP
              port: 80
    
  2. Pas het netwerkbeleid toe met behulp van de kubectl apply opdracht.

    kubectl apply -f network-policy.yaml
    
  3. Test de verbinding met de server in de client shell met behulp van de volgende /agnhost opdracht:

    /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp
    

    De verbinding wordt geblokkeerd omdat de server is gelabeld met app=server, maar de client niet is gelabeld. De uitvoer zou ongeveer moeten lijken op de volgende voorbeelduitvoer:

    TIMEOUT
    
  4. Label de client en controleer de verbinding met de server met behulp van de kubectl label opdracht.

    kubectl label pod client -n demo app=client
    
  5. Test de verbinding met de server opnieuw in de client shell met behulp van dezelfde /agnhost opdracht:

    /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp
    

    Als de verbinding is geslaagd, is er geen uitvoer.

  6. Controleer het netwerkbeleid met behulp van de kubectl get networkpolicy en kubectl describe networkpolicy opdrachten.

    kubectl get networkpolicy -n demo
    kubectl describe networkpolicy demo-policy -n demo
    

    De uitvoer laat zien dat pods app=server zijn geselecteerd, inkomend verkeer is toegestaan op TCP-poort 80 en alleen pods die zijn gelabeld app=client , kunnen verbindingen initiëren.

Resources opschonen met behulp van Terraform

In deze sectie hebt u een naamruimte, twee pods en een netwerkbeleid gemaakt. Als u deze Kubernetes-resources niet meer nodig hebt, verwijdert u deze voordat u de onderliggende Azure-infrastructuur verwijdert.

Gebruik de kubectl delete opdracht om de resources te verwijderen.

kubectl delete namespace demo

Warning

Met de volgende opdracht verwijdert u de resourcegroep, het AKS-cluster en alle andere resources die zijn gekoppeld aan de resourcegroep die voor dit voorbeeld is gemaakt. Als u andere resources in deze resourcegroep hebt geïmplementeerd, verwijdert de opdracht die ook.

Verwijder de Azure resources met behulp van de terraform destroy opdracht.

terraform destroy