Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du konfigurerar filtrering av containernätverksmått för Azure Kubernetes Service (AKS) med Cilium för att optimera datainsamling, minska lagringskostnaderna och fokusera på de mått som är mest relevanta för dina övervakningsbehov.
Konfigurera filtrering av containernätverksmått möjliggör dynamisk hantering av Hubble-måttens kardinalitet via Kubernetes anpassade resursdefinitioner (CRD). Med den här funktionen kan du dynamiskt kontrollera kardinalitet, dimensioner och mål för Hubble-mått utan att starta om Cilium-agenter eller Prometheus-servrar.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Om du inte har ett konto kan du skapa ett kostnadsfritt konto innan du börjar.
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Kom igång med Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör på Windows eller macOS, överväg att köra Azure CLI i en Docker-container. För mer information, se Hur man kör Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. För att avsluta autentiseringsprocessen, följ stegen som visas i din terminal. Andra inloggningsalternativ finns i Autentisera till Azure med Azure CLI.
När du blir uppmanad, installera Azure CLI-tillägget vid första användning. Mer information om tillägg finns i Använda och hantera tillägg med Azure CLI.
Kör az version för att ta reda på versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
Den lägsta versionen av Azure CLI som krävs för att slutföra stegen i den här artikeln är 2.73.0. Du hittar din version genom att köra
az --versioni Azure CLI. Information om hur du installerar eller uppgraderar finns i Installera Azure CLI.Ett AKS-kluster med Cilium-dataplanet och Advanced Container Networking Services aktiverat.
Kubernetes version 1.32 eller senare.
Filtrering av containernätverksmått fungerar specifikt med Cilium-dataplan.
Den lägsta versionen av
aks-previewAzure CLI-tillägget för att slutföra stegen i den här artikeln är18.0.0b2.
Installera Azure CLI-tillägget aks-preview
Installera eller uppdatera Azure CLI-förhandsgranskningstillägget genom att använda kommandot az extension add eller 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
Registrera funktionsflaggan AdvancedNetworkingDynamicMetricsPreview
- Registrera först funktionsflaggan AdvancedNetworkingDynamicMetricsPreview med hjälp
az feature registerav kommandot :
az feature register --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingDynamicMetricsPreview"
- Verifiera lyckad registrering med hjälp
az feature showav kommandot . Det tar några minuter innan registreringen har slutförts.
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingDynamicMetricsPreview"
- När funktionen visar Registrerad uppdaterar du registreringen av
Microsoft.ContainerServiceresursleverantören med hjälp avaz provider registerkommandot.
az provider register --namespace Microsoft.ContainerService
Skapa ett nytt AKS-kluster med Cilium
Om du redan har ett befintligt kluster kan du hoppa över det här steget.
az aks create Använd kommandot med --enable-acns flaggan för att skapa ett nytt AKS-kluster som har alla avancerade funktioner för containernätverkstjänster. Dessa funktioner omfattar bland annat:
Observerbarhet för containernätverk: Ger insikt i din nätverkstrafik. Mer information finns i Container Network Observability (Observerbarhet för containernätverk).
Säkerhet för containernätverk: Erbjuder säkerhetsfunktioner som FQDN-filtrering. Mer information finns i Säkerhet för containernätverk.
# Set environment variables
export RESOURCE_GROUP="cnm-testing-rg"
export CLUSTER_NAME="cnm-cilium-cluster"
export LOCATION="eastus2euap" # Use canary region for preview features
# Create resource group
az group create --name $RESOURCE_GROUP --location $LOCATION
# Create AKS cluster with Cilium and ACNS enabled
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--location $LOCATION \
--network-plugin azure \
--network-dataplane cilium \
--enable-acns \
--enable-managed-identity \
--generate-ssh-keys \
--kubernetes-version 1.32
Hämta klusterautentiseringsuppgifter
Hämta dina autentiseringsuppgifter för az aks get-credentials klustret med hjälp av kommandot:
az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --overwrite-existing
Konfigurera anpassade resurser för måttfiltrering
Filtrering av containernätverksmått använder ContainerNetworkMetric CRD (Custom Resource Definition) för att definiera filtreringsregler. Endast en CRD kan finnas per kluster och det tar cirka 30 sekunder att stämma av ändringarna. Om CRD:en inte tillämpas samlas alla mått in.
apiVersion: acn.azure.com/v1alpha1
kind: ContainerNetworkMetric
metadata:
name: : container-network-metric # Cluster scoped
spec:
filters:
- metric: flow
includeFilters: # List of include filters
- name: sample-filter # Filter name
from:
namespacedPod: # List of source namespace/pods. Prepend namespace with /
- sample-namespace/sample-pod
labelSelector: # Standard k8s label selector
matchLabels:
app: frontend
k8s.io/namespace: sample-namespace
matchExpressions:
- key: environment
operator: In
values:
- production
- staging
ip: # List of source IPs; can be CIDR
- "192.168.1.10"
- "10.0.0.1"
to:
namespacedPod:
- sample-namespace2/sample-pod2
labelSelector:
matchLabels:
app: backend
k8s.io/namespace: sample-namespace2
matchExpressions:
- key: tier
operator: NotIn
values:
- dev
ip:
- "192.168.1.20"
- "10.0.1.1"
protocol: # List of protocols; can be tcp, udp, dns
- tcp
- udp
- dns
verdict: # List of verdicts; can be forwarded, dropped
- forwarded
- dropped
metric: dns
excludeFilters: # List of exclude filters
- name: sample-filter # Filter name
from:
namespacedPod: # List of source namespace/pods. Prepend namespace with /
- sample-namespace/sample-pod
labelSelector: # Standard k8s label selector
matchLabels:
app: frontend
k8s.io/namespace: sample-namespace
I följande tabell beskrivs fälten i den anpassade resursdefinitionen:
| Fält | Typ | Description | Krävs |
|---|---|---|---|
filters.metric |
String | Namnet på det mått som du vill använda filtret på. Detta är obligatoriskt. De värden som stöds är dns, flow, tcp, drop |
Mandatory |
includeFilters eller excludeFilters |
[]filter | En lista över filter som definierar nätverksflöden som ska inkluderas. Varje filter anger källa, mål, protokoll och andra matchande kriterier. Du måste ha minst ett inkludera eller exkludera filter. | Mandatory |
filters.name |
String | Namnet på filtret. | Valfritt |
filters.protocol |
[]sträng | De protokoll som ska matchas för det här filtret. Giltiga värden är tcp, udpoch dns. Eftersom det är en valfri parameter, om den inte har angetts, inkluderas loggar med alla protokoll. |
Valfritt |
filters.verdict |
[]sträng | Domen över flödet som ska matchas. Giltiga värden är forwarded och dropped. Eftersom det är en valfri parameter, om den inte anges, inkluderas loggar med alla omdömen. |
Valfritt |
filters.from |
Endpoint | Anger källan för nätverksflödet. Kan innehålla IP-adresser, etikettväljare och namnområde/poddpar. | Valfritt |
Endpoint.ip |
[]sträng | Det kan vara en enskild IP-adress eller en CIDR. | Valfritt |
Endpoint.labelSelector |
Object | En etikettväljare är en mekanism för att filtrera och fråga efter resurser baserat på etiketter, så att du kan identifiera specifika delmängder av resurser. En etikettväljare kan innehålla två komponenter: matchLabels och matchExpressions. Använd matchLabels för enkel matchning genom att ange ett nyckel/värde-par (till exempel {"app": "frontend"}). För mer avancerade kriterier använder matchExpressionsdu , där du definierar en etikettnyckel, en operator (till exempel In, NotIn, Existseller DoesNotExist) och en valfri lista med värden. Se till att villkoren i båda matchLabels och matchExpressions är uppfyllda, eftersom de kombineras logiskt av AND. Om inga villkor anges matchar väljaren alla resurser. Om du vill matcha ingen lämnar du väljaren null. Definiera etikettväljaren noggrant för att rikta in dig på rätt uppsättning resurser. |
Valfritt |
Endpoint.namespacedPod |
[]sträng | En lista över namnrymds- och poddpar (formaterade som namespace/pod) för matchning av källan.
name ska matcha RegEx-mönstret ^.+$. |
Valfritt |
filters.to |
Endpoint | Anger målet för nätverksflödet. Kan innehålla IP-adresser, etikettväljare eller namnområde/poddpar. | Valfritt |
Endpoint.ip |
[]sträng | Det kan vara en enskild IP-adress eller en CIDR. | Valfritt |
Endpoint.labelSelector |
Object | En etikettväljare som matchar resurser baserat på deras etiketter. | Valfritt |
Endpoint.namespacedPod |
[]sträng | En lista över namnrymd och pod-par (formaterade som namespace/pod) som matchar målet. |
Valfritt |
Använd den anpassade resursen ContainerNetworkMetric för att aktivera logginsamling i klustret:
kubectl apply -f <crd.yaml>
Rensa och återställa
Så här rensar du filtreringskonfigurationen:
# Delete the CRD
kubectl delete ContainerNetworkMetric container-network-metric
Exempel på filtreringskonfiguration
- Skapa en grundläggande filtreringskonfiguration som fokuserar på DNS-mått:
# basic-dns-filter.yaml
apiVersion: acn.azure.com/v1alpha1
kind: ContainerNetworkMetric
metadata:
name: container-network-metric
spec:
filters:
- metric: dns # Supported: dns, flow, tcp, drop
excludeFilters:
- from:
namespacedPod: ["kube-system/coredns"]
- Konfigurera filtrering för TCP-mått med inkludera och exkludera filter:
# tcp-metrics-filter.yaml
apiVersion: acn.azure.com/v1alpha1
kind: ContainerNetworkMetric
metadata:
name: container-network-metric
spec:
filters:
- metric: tcp
includeFilters:
- from:
labelSelector:
matchLabels:
tier: "frontend"
excludeFilters:
- to:
namespacedPod: ["kube-system/metrics-server"]
- Konfigurera filtrering för nätverksflödesmått:
# flow-metrics-filter.yaml
apiVersion: acn.azure.com/v1alpha1
kind: ContainerNetworkMetric
metadata:
name: container-network-metric
spec:
filters:
- metric: flow
includeFilters:
- from:
labelSelector:
matchLabels:
tier: "frontend"
- to:
labelSelector:
matchLabels:
tier: "backend"
excludeFilters:
- from:
namespacedPod: ["default/test"]
- Konfigurera filtrering för borttagna paketmått:
# drop-metrics-filter.yaml
apiVersion: acn.azure.com/v1alpha1
kind: ContainerNetworkMetric
metadata:
name: container-network-metric
spec:
filters:
- metric: drop
excludeFilters:
- from:
namespacedPod: ["kube-system/"]
- Konfigurera filtrering för flera måtttyper i en enda CRD:
# multi-metrics-filter.yaml
apiVersion: acn.azure.com/v1alpha1
kind: ContainerNetworkMetric
metadata:
name: container-network-metric
spec:
filters:
- metric: dns
includeFilters:
- protocol: ["dns"]
excludeFilters:
- from:
namespacedPod: ["kube-system/*"]
- metric: tcp
includeFilters:
- protocol: ["tcp"]
- from:
labelSelector:
matchLabels:
environment: "production"
- metric: flow
excludeFilters:
- from:
namespacedPod: ["default/debug-*"]
- metric: drop
includeFilters:
- reason: ["Policy denied", "Invalid"]
Metodtips
Se till att du inte har motstridiga filter för att inkludera och exkludera på CRD.
Använd Kubernetes-etikettväljare för flexibel filtrering.
Verifiera alltid filtreringskonfigurationer under utveckling eller mellanlagring
Granska regelbundet filtrerade mått för att säkerställa att viktiga data inte går förlorade.
Kom ihåg att endast en CRD kan finnas per kluster.
Felsökning
Vanliga problem
Problem: CRD-konfigurationen tillämpas inte
Lösning: Kontrollera att funktionsflaggan är registrerad och att endast en CRD finns:
# Verify feature registration
az feature show --namespace "Microsoft.ContainerService" --name "AdvancedNetworkingDynamicMetricsPreview"
# Check existing CRDs
kubectl get ContainerNetworkMetric
Problem: Mätdata visas fortfarande när excludeFilters har tillämpats
Lösning: Kom ihåg att befintliga mått finns kvar i Prometheus. Du kan behöva vänta tills nya mått har genererats för att se filtreringseffekterna.
Begränsningar
- Den här funktionen är särskilt utformad endast för Cilium-dataplan
- Endast en
ContainerNetworkMetricCRD kan finnas per kluster - Befintliga mått finns kvar i Prometheus; nya filtreringsregler gäller för nyligen genererade mått
- Kräver Kubernetes version 1.32 eller senare
Relaterat innehåll
- Mer information om funktioner för nätverksmått för containrar finns i Översikt över nätverksmått för containrar.
- Information om hur du skapar ett AKS-kluster med Advanced Container Networking Services finns i Konfigurera containernätverksobservabilitet för AKS.
- Få mer information om Advanced Container Networking Services för AKS.