Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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:
- Cilium (voor AKS-clusters met behulp van Azure CNI Powered by Cilium)
- Azure Network Policy Manager (NPM)
- Calico (een opensource-netwerk- en netwerkbeveiligingsoplossing die is opgericht door Tigera)
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.ionetwerkbeleid. Als uprojectcalico.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 --versionopdracht. 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-cliopdracht. U gebruiktkubectlom het gedrag van het netwerkbeleid te controleren.
Een AKS-cluster maken met Azure Network Policy Manager (Linux)
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=eastusMaak de resourcegroep met behulp van de
az group createopdracht.az group create --resource-group $RESOURCE_GROUP --location $LOCATIONMaak een AKS-cluster met behulp van de
az aks createen specificeerazurevoor denetwork-pluginennetwork-policy.az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 1 \ --network-plugin azure \ --network-policy azure \ --generate-ssh-keysWaarschuwing
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.
Maak een naamruimte met de naam
demoom de voorbeeldpods uit te voeren met behulp van dekubectl create namespaceopdracht.kubectl create namespace demoMaak een pod met de naam die
servermoet worden gebruikt op TCP-poort 80 met behulp van dekubectl runopdracht.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"Maak een pod genaamd
clientom Bash te draaien met behulp van dekubectl runopdracht.kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bashNote
Als u de client of server op een bepaald knooppunt wilt plannen, voegt u de volgende bit toe vóór het
--commandargument in de opdracht voor het maken vankubectl runpods:--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'.Haal in een apart venster het IP-adres van de
serverpod op met behulp van dekubectl get podopdracht.kubectl get pod --output=wide -n demoDe 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.
Maak een bestand met de naam
demo-policy.yamlen 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: TCPPas het netwerkbeleidsmanifest toe met behulp van de
kubectl applyopdracht.kubectl apply -f demo-policy.yamlControleer in de clientshell de verbinding met de server met behulp van de volgende
/agnhostopdracht:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpConnectiviteit 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:TIMEOUTLabel de
clientverbinding met de server en controleer deze met behulp van dekubectl labelopdracht.kubectl label pod client -n demo app=clientAls 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, $RESOURCE_GROUP en $CLUSTER_NAME door de resourcegroep en de naam van uw cluster.
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 tableVoer de volgende opdracht uit om het netwerkbeleid in te stellen op
none.az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy noneVoer 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.
Note
De voorbeeldcode voor deze sectie bevindt zich in de Azure Terraform GitHub opslagplaats. U kunt het logboekbestand met de testresultaten van de huidige en vorige versies van Terraform bekijken.
Zie meer artikelen en voorbeeldcode over het gebruik van Terraform voor het beheren van Azure-resources.
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.
Maak een map om de Terraform-voorbeeldcode te testen en uit te voeren, en stel deze in als de huidige werkmap.
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" } }Initialiseer Terraform door de opdracht uit te
terraform initvoeren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van Azure-resources met Terraform.terraform initMaak de configuratie op en valideer deze door de
terraform fmtenterraform validateopdrachten uit te voeren.terraform fmt terraform validateMaak een Terraform-uitvoeringsplan door de opdracht uit te
terraform planvoeren. Met deze opdracht ziet u de resources die Terraform maakt of wijzigt in uw Azure-abonnement.terraform planPas het Terraform-uitvoeringsplan toe door de opdracht uit te
terraform applyvoeren. Met deze opdracht worden de resources gemaakt die zijn gedefinieerd in uwmain.tfbestand in uw Azure-abonnement.terraform apply
Verbinding maken met het AKS-cluster met behulp van Terraform
Installeer het kubernetes-opdrachtregelprogramma door de
az aks install-cliopdracht uit te voeren en controleer de installatie.az aks install-cli kubectl version --clientConfigureer
kubectldeze om verbinding te maken met uw cluster door deaz aks get-credentialsopdracht 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-exampleControleer of het cluster actief is door de opdracht
kubectl get nodesuit 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.
Maak een naamruimte met de naam
demoom de voorbeeldpods uit te voeren met behulp van dekubectl create namespaceopdracht.kubectl create namespace demoMaak een pod met de naam
serverdie op TCP-poort 80 luistert door de opdrachtkubectl runuit 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"Maak een pod met de naam
clientom Bash uit te voeren met de opdrachtkubectl run.kubectl run -it client \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --command -- bashHaal in een afzonderlijk venster het IP-adres van de
serverpod op met behulp van dekubectl get podopdracht.kubectl get pod --output=wide -n demoGebruik het IP-adres van de
serverpod wanneer u de connectiviteit vanuit declientshell 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.
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: 80Pas het netwerkbeleid toe met behulp van de
kubectl applyopdracht.kubectl apply -f network-policy.yamlTest de verbinding met de server in de
clientshell met behulp van de volgende/agnhostopdracht:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpDe 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:TIMEOUTLabel de
clienten controleer de verbinding met de server met behulp van dekubectl labelopdracht.kubectl label pod client -n demo app=clientTest de verbinding met de server opnieuw in de
clientshell met behulp van dezelfde/agnhostopdracht:/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcpAls de verbinding is geslaagd, is er geen uitvoer.
Controleer het netwerkbeleid met behulp van de
kubectl get networkpolicyenkubectl describe networkpolicyopdrachten.kubectl get networkpolicy -n demo kubectl describe networkpolicy demo-policy -n demoDe uitvoer laat zien dat pods
app=serverzijn geselecteerd, inkomend verkeer is toegestaan op TCP-poort 80 en alleen pods die zijn gelabeldapp=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