AKS-netwerkproblemen met Advanced Container Networking Services vaststellen en oplossen

Deze handleiding begeleidt u bij het vaststellen en oplossen van echte netwerkproblemen in Azure Kubernetes Service (AKS) met behulp van Advanced Container Networking Services (ACNS). Elk playbook begint met een symptoom (DNS-fouten, pakketuitval, verkeersonbalans, L7-fouten), geeft aan welk signaal u eerst moet controleren en geeft aan wanneer u inzoomt op logboeken.

De handleiding is georganiseerd rond taken, niet functies. Lees het mentale model eenmaal en ga dan rechtstreeks naar het draaiboek dat overeenkomt met uw symptoom.

Wat deze handleiding u helpt oplossen

  • DNS-omzettingsfouten in pods (NXDOMAIN, SERVFAILontbrekende antwoorden).
  • Pakketuitval veroorzaakt door onjuist geconfigureerd netwerkbeleid, het bijhouden van verbindingen of het verminderen van de connectiviteit.
  • Verkeersonbalans tussen pods of naamruimten (hete pods, ongelijke verdeling van belasting).
  • L7-toepassingsfouten (HTTP 4xx/5xx, gRPC-fouten, Kafka-druppels).
  • Clusterbrede netwerkstatusbewaking en capaciteitsplanning.
  • Kostenbeheer voor waarneembaarheid via gerichte metrische gegevens en logboekverzameling.

Mentaal model: hoe metrische gegevens, logboeken en filteren bij elkaar passen

ACNS geeft u drie signalen. Elke vraag beantwoordt een andere vraag.

Signaal Antwoorden Ideaal voor Waar het leeft
Metrische gegevens van containernetwerk Wat gebeurt er op welke schaal? Anomaliedetectie, dashboards, waarschuwingen, capaciteitsplanning Azure Beheerde Prometheus + Grafana
Containernetwerklogboeken (alleen opgeslagen)(alleen Cilium) Waarom is het gebeurd? Welke pods, wat is de uitspraak? Hoofdoorzaakanalyse, historische trends, naleving Log Analytics werkruimte (ContainerNetworkLogs tabel), Azure portaldashboards of een OpenTelemetry-compatibele collector (Splunk, Datadog, enzovoort)
Containernetwerklogboeken (op aanvraag)(alleen Cilium) Wat gebeurt er nu? Live foutopsporing tijdens een actief incident Hubble CLI, Hubble UI
Filteren van metrische gegevens(alleen Cilium) Welke signalen heb ik eigenlijk nodig? Scopebepaling van verzamelingen voor kritieke workloads, kostenefficiëntie ContainerNetworkMetric CRD
Logboekfilters en -aggregatie(alleen Cilium) Welke stromen heb ik eigenlijk nodig? Het begrenzen van logboekregistratie tot kritisch verkeer, kostcontrole ContainerNetworkLog CRD
Container Network Insights-agent(Preview) Waar begin ik? AI-gestuurde RCA voor metrische gegevens, Hubble-stromen, Cilium-beleid, CoreDNS en NIC-/kerneltellers op hostniveau Web-app in het cluster, geopend via de browser

Opmerking

Containernetwerklogboeken (opgeslagen en op aanvraag), crd ContainerNetworkLog , logboekfiltering en stroomlogboekaggregatie vereisen allemaal het Cilium-gegevensvlak. Gebruik voor niet-Cilium-clusters metrische gegevens van het containernetwerk voor het classificeren en vertrouwen op netwerktelemetrie op clusterniveau voor dieper onderzoek.

Zie De metrische gegevens van het containernetwerk, containernetwerklogboeken en het filteren van metrische gegevens configureren voor een uitgebreidere functie.

Standaardstroom voor probleemoplossing

Gebruik deze lus voor elk netwerkincident:

  1. Begin in de dashboards voor metrieken. Bevestig de anomalie: een piek in dalingen, fouten, TCP-resets of DNS-fouten. Identificeer het betreffende knooppunt, de naamruimte of de workload.
  2. Schakel over naar opgeslagen logboeken. Filter de ContainerNetworkLogs tabel op de naamruimte en het tijdvenster uit stap 1. Logboeken vertellen u het oordeel, de reden, de bron-/doelworkloads en de L7-statuscodes die metrische gegevens niet bevatten.
  3. Reproduceer live met logboeken op aanvraag. Als het probleem intermitterend is of al is opgelost in de opgeslagen gegevens, gebruik dan de Hubble CLI of Hubble UI om livestromen voor die workload te captureren.
  4. Valideer de oplossing. Controleer hetzelfde deelvenster met metrische gegevens opnieuw en voer dezelfde KQL-query opnieuw uit. De anomalie moet weg zijn.
  5. Muziekverzameling Als u tijdens het incident te veel hebt verzameld, beperkt u uw ContainerNetworkLog CRD of past u een ContainerNetworkMetric filter toe, zodat u alleen vastlegt wat u nodig hebt.

Tip

Geeft u er de voorkeur aan het probleem liever te omschrijven in plaats van door dashboards heen te navigeren? Container Network Insights Agent (preview) automatiseert stap 1-3 door uw probleem te classificeren, bewijs te verzamelen via kubectl, Cilium, Hubble, CoreDNS en netwerkstatistieken op hostniveau, en een gestructureerde RCA met herstelopdrachten te retourneren. Het vormt een aanvulling op deze handleiding in plaats van deze te vervangen: de agent biedt u een snelle eerste stap; hier kunt u met de playbooks valideren of dieper in de materie duiken. De agent heeft het kenmerk Alleen-lezen; U past de oplossing nog steeds zelf toe.

Opmerking

ACNS-metrische gegevens meten latentie niet. Gebruik Azure Monitor metrische gegevens over de prestaties van toepassingen of uw service-mesh-telemetrie voor latentieanalyse. ACNS toont het verkeersvolume, het aantal drops, de redenen voor drops, TCP-statetoestanden, TCP-resetten, DNS-query/antwoord-aantallen en -codes, en L4/L7-flowuitspraken.

Ingebouwde dashboards in één oogopslag

Stel dit één keer in met Container Network Observability instellen. U verwijst ernaar in de playbooks.

Dashboard Gebruik dit wanneer u nodig hebt...
Clusters Krijg een vlootbrede weergave van bytes/pakketten die per knooppunt zijn doorgestuurd en verwijderd.
DNS (cluster) DNS-problemen in het hele cluster opsporen.
DNS (workload) Inzoomen op DNS-gedrag voor één implementatie/DaemonSet (bijvoorbeeld CoreDNS).
Dalingen (Werkbelasting) Bekijk het uitvalpercentage, de uitvalreden en de richting voor een specifieke workload.
Pod Flows (Namespace) Zoek welke pods in een naamruimte het meeste verkeer verzenden of ontvangen, of het meest verlies hebben.
Podstromen (werkbelasting) Inzoomen op L4/L7-stromen voor één workload, inclusief TCP-resets.
L7-stromen (naamruimte/werkbelasting) Inspecteer HTTP-, gRPC- en Kafka-stromen. Alleen Cilium-gegevensvlak vereist een L7-beleid.
Stroomlogboeken/stroomlogboeken (extern verkeer) Visualiseer opgeslagen containernetwerklogboeken in Azure portal of Grafana.

Playbook 1: DNS-omzettingsfouten vaststellen

Symptoom. Pods loggen fouten zoals DNS_PROBE_FINISHED_NXDOMAIN, SERVFAIL, of dat ze vastlopen tijdens het oplossen van servicenamen.

Doel. Bepaal of de fout zich voordoet bij de upstream (CoreDNS of externe resolver), door het beleid (FQDN blokkeren), of workloadspecifiek is.

Stap 1: De anomalie in dns-metrische gegevens bevestigen

Open het DNS-dashboard (cluster). Zoek naar plotselinge wijzigingen in het aanvraagvolume, het antwoordvolume of aanvragen die geen antwoord hebben %. In de samenvattingsvensters worden de meest voorkomende query's, de meest voorkomende antwoordcodes en de knooppunten weergegeven die de meeste fouten genereren.

Schermopname van het DNS-clusterdashboard met een samenvatting van aanvragen, antwoorden, belangrijkste fouten en lawaaierige knooppunten.

Waar moet u naar zoeken: Een aanhoudende toename van foutreacties, een daling van geslaagde antwoorden of een enkel knooppunt dat het aantal fouten overneemt. Noteer de tijdstempel van de anomalie.

Stap 2: De pods met de meeste geluidsoverlast identificeren

Schuif omlaag op hetzelfde dashboard naar het deelvenster dat pods rangschikt op DNS-fouten in alle naamruimten. De bovenste vermeldingen zijn uw vermoedelijke verdachten.

Schermopname van het deelvenster met de bovenste pods die DNS-fouten genereren in alle naamruimten.

Beslissingspunt.

  • Als er fouten zijn geconcentreerd in CoreDNS-pods, gaat u naar het DNS (Werkload)-dashboard met kube-system / coredns geselecteerd: CoreDNS zelf of zijn upstream-resolver is het probleem.
  • Als fouten zijn geconcentreerd in een applicatieworkload, genereert die workload foute query's of wordt door een FQDN-beleid geweigerd.

Stap 3: De betrokken workload nader onderzoeken

Open het DNS-dashboard (Workload) voor de werkbelasting die u hebt geïdentificeerd.

  • DNS-aanvragen/DNS-antwoordenpanels. Een hoog ontbrekende responsen % van aanvragen duidt op upstream time-outs of overbelasting van query's.

    Schermopname van DNS-aanvraag- en reactietrends op workloadniveau met een zichtbare piek rond de tijd van het incident.

  • DNS-fouten per type. Koppel de piek aan een code:

    • NXDOMAIN — onjuiste of verouderde domeinnaam in app-configuratie.
    • SERVFAIL — upstream-oplossingsprobleem.
    • Query geweigerd : FQDN-beleid of DNS-configuratie komt niet overeen.

    Schermopname van DNS-fouten opgesplitst per type, met een piek in fouten die door query's zijn geweigerd.

  • DNS-antwoord-IP-adressen geretourneerd. Bevestigt een geslaagde oplossingsfrequentie. Een daling betekent meestal dat CoreDNS de upstream niet kan bereiken; een plotselinge piek kan duiden op een query-storm.

  • DNS-antwoordtabel. Gebruik dit om patronen te herkennen, zoals 'A records mislukken, maar AAAA-records slagen', wat meestal verwijst naar een stack die onjuist is geconfigureerd voor IPv4-omgevingen.

    Schermopname van de DNS-antwoordtabel onderverdeeld op querytype en retourcode.

Stap 4: Bevestigen met opgeslagen logboeken

Voer deze KQL-query uit in uw Log Analytics werkruimte om DNS-foutpatronen weer te geven. Samengevoegde rijen behouden Verdict, naamruimten, workloads en Layer7.dns.rcode, zodat deze query werkt op basis van de standaardtabel (geaggregeerd ContainerNetworkLogs ):

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| extend L4 = parse_json(Layer4), L7 = parse_json(Layer7)
| where L4.UDP.destination_port == 53
| where Reply == true
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name),
         DnsRcode    = tostring(L7.dns.rcode)
| where DnsRcode != "NOERROR"
| summarize ResponseCount = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SourceNamespace, SrcWorkload, DestinationNamespace, DstWorkload, DnsRcode, Verdict
| order by ResponseCount desc

Vervang <start-time> en <end-time> door tijdstempels in de notatie 2026-04-30T15:00:00Z.

Wat u moet controleren in de resultaten:

  • Oordeel. DROPPED betekent dat een FQDN- of netwerkbeleid de query blokkeert. FORWARDED met een niet-NOERRORDnsRcode, bijvoorbeeld NXDOMAIN of SERVFAIL, betekent dat de upstream-resolver een fout heeft geretourneerd.
  • Bron- en doelwerkbelastingen. Controleer of verkeer naar de verwachte CoreDNS-workload gaat.
  • DnsRcode. De DNS-antwoordcode identificeert in één oogopslag de foutmodus.

Opmerking

Het werkelijke opgevraagde domein (Layer7.dns.query) en afzonderlijke pod-IP's maken geen deel uit van de aggregatiesleutel, dus ze worden verwijderd uit geaggregeerde rijen. Als u ze wilt herstellen, schakelt u over naar logboeken op aanvraag (zie stap 5).

U kunt dezelfde stromen ook visualiseren in de Azure-portal onder AKS-cluster>Insights>Networking>Stroomlogboeken.

Schermopname van de dashboardweergave voor stroomlogboeken gefilterd op DNS-fouten.

Stap 5: Reproduceer live als het probleem af en toe optreedt

Als de piek al voorbij is en u deze niet kunt vastleggen in opgeslagen logboeken, gebruik dan de Hubble CLI op aanvraag.

hubble observe --namespace <ns> --port 53 --type l7 --follow

Schermopname van de Hubble CLI die live DNS-stromen streamt.

Stap 6: De oplossing valideren

Nadat u het FQDN-beleid hebt bijgewerkt, moet u het DNS-dashboard (Workload) opnieuw openen om de configuratie van de toepassing te herstellen of CoreDNS te schalen. De foutsnelheid moet binnen een paar minuten dalen. Voer de KQL-query opnieuw uit voor hetzelfde tijdvenster om te bevestigen dat de mislukte query's zijn verdwenen.

Opmerking

Dns-metrische gegevens op Cilium-clusters vereisen een Cilium FQDN-netwerkbeleid. Zie Een FQDN-beleid configureren. Op niet-Cilium-gegevensvlakken worden standaard DNS-metrische gegevens verzameld.


Playbook 2: Pakketverlies onderzoeken

Symptoom. Services kunnen elkaar niet bereiken. Tests mislukken. Verbindingen verlopen. Drop counters stijgen in dashboards.

Doel. Bepaal of dalingen worden veroorzaakt door netwerkbeleid, uitputting van verbindingen of problemen met upstream-connectiviteit, en welke werkbelasting verantwoordelijk is.

Stap 1: Zoek de dalingen op het niveau van de naamruimte

Open Pod Flows (Namespace). De heatmaps laten namespaces en pods zien met de hoogste uitgaande en binnenkomende pakkettenverliespercentages.

Schermopname van het dashboard Pod Flows (Naamruimte) waarin naamruimten worden samengevat met de hoogste dalingspercentages.

Helderdere cellen geven hogere dalingspercentages aan. Noteer de naamruimte en het tijdvenster.

Stap 2: Inzoomen op de betrokken workload

Open Drops (werkbelasting) en selecteer de werkbelasting die u hebt geïdentificeerd.

  • Momentopname van workload toont maximale/minimale uitgaande pakketverliezen per seconde. Gebruik het om de ernst te meten.

    Schermopname van het deelvenster Momentopname van werkbelasting met maximale en minimale uitgaande dalingspercentages.

  • Verwijderd verkeer per reden is het belangrijkste deelvenster. De reden geeft aan wat u moet oplossen:

    • Beleid geweigerd : een NetworkPolicy of CiliumNetworkPolicy blokkeert het verkeer.
    • CT: Kaartinvoeging is mislukt — de verbindingstraceringstabel is vol; knooppunt schalen of het verbindingsomzet verminderen.
    • Niet-ondersteund L3-protocol / Ongeldig pakket — toepassing of proxy verzendt onjuist verkeer.

    Schermopname van verwijderd verkeer opgesplitst op basis van reden, met beleid geweigerd als de dominante oorzaak.

  • Heatmap van binnenkomende/uitgaande dalingen. Hiermee wordt aangegeven welke specifieke podparen verkeer verliezen.

    Schermopname van een heatmap van binnenkomende druppels boven aan doelpods.

  • Gestapeld totaal aantal druppels per bronpod. Rangschikt de daders zodat u weet welke replica u eerst moet bekijken.

    Schermopname van het gestapelde totaal van uitgaande druppels gegroepeerd op bronpod.

Stap 3: Bevestig de vervallen verkeersstromen in de opgeslagen logboeken

Zoek de exacte bron- en doelworkloads van het verwijderde verkeer. Verdict, DropReason, naamruimten en workloads bevinden zich allemaal in de aggregatiesleutel, dus deze query werkt op geaggregeerde gegevens:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| where Verdict == "DROPPED"
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| summarize DropCount = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SourceNamespace, SrcWorkload, DestinationNamespace, DstWorkload, DropReason, bin(TimeGenerated, 5m)
| order by TimeGenerated desc, DropCount desc

Vermalen tot één naamruimte nadat u deze hebt geïdentificeerd:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| where Verdict == "DROPPED"
| where SourceNamespace == "<namespace-name>"
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| summarize DropCount = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SrcWorkload, DestinationNamespace, DstWorkload, DropReason, TrafficDirection
| order by DropCount desc

In het dashboard Stroomlogboeken in de Azure-portal worden dezelfde gegevens visueel weergegeven, inclusief een grafiek voor serviceafhankelijkheid waarin geblokkeerde paden worden gemarkeerd.

Schermopname van het dashboard stroomlogboeken en foutenlogboeken met een duidelijke scheiding tussen doorgestuurde en verwijderde stromen.

Stap 4: Verifiëren met beleidsrichtlijnen

Zodra u de bronpod en doelpod kent:

kubectl get netpol,cnp -A
kubectl describe cnp -n <namespace> <policy-name>

De mislukte stroom vergelijken met regels voor inkomend/uitgaand verkeer. De meest voorkomende oorzaak is een standaard-ontkenningsbeleid dat is toegevoegd zonder een toestemmingsregel voor een legitiem pad.

Stap 5: De oplossing valideren

Nadat u het beleid hebt aangepast, moet de Dropped Traffic by Reason grafiek plat zijn voor beleid geweigerd. Voer de KQL-query opnieuw uit — DROPPED er moeten geen resultaten meer worden weergegeven voor dat bron/doelpaar.

Tip

Als u een actief incident onderzoekt en opgeslagen logboeken niet zijn ingeschakeld, kunt u met hubble observe --verdict DROPPED --namespace <ns> zonder wijziging van een clusterconfiguratie live streamen.


Playbook 3: Verkeersonbalansen en hot pods zoeken

Symptoom. Een paar pods van een Deployment zijn het CPU of netwerk aan het verzadigen terwijl anderen inactief zijn. TCP herstelt klim. Latentierapporten zijn afkomstig van gebruikers (latentie zelf is niet zichtbaar in metrische ACNS-gegevens, zie de opmerking in het mentale model).

Doel. Bepaal welke pods onevenredig verkeer dragen en of resets duiden op overbelasting of onjuist geconfigureerde taakverdeling.

Stap 1: Verkeer op podniveau vergelijken

Podstromen (Workload) openen. De momentopname van de workload bevat een overzicht van uitgaand/binnenkomend verkeer en dalingen.

Schermopname van de momentopname van de workload met het totale uitgaande en binnenkomende verkeer voor een workload.

In het venster 'Verkeer per traceringstype' wordt de verkeersvorm in de loop van de tijd weergegeven. Een brede kloof tussen uitgaand en binnenkomend volume verwijst vaak naar een downstreamknelpunt.

Schermopname van uitgaand verkeer opgesplitst per traceringstype in de loop van de tijd.

Stap 2: Identificeer warme pods met warmtekaarten

De heatmaps op podniveau maken onbalans duidelijk. Als één pod (bijvoorbeeld default/tcp-client-0) wordt weergegeven in zowel de uitgaande als binnenkomende heatmaps met veel donkerdere cellen dan de replica's, is het verkeer daar geconcentreerd.

Schermopname van heatmaps naast elkaar van uitgaand en binnenkomend verkeer met één pod die het grootste deel van het verkeer verwerkt.

Veelvoorkomende oorzaken:

  • Service sessionAffinity: ClientIP die clients aan één pod bindt.
  • Headless service met permanente DNS-resolutie.
  • Externe load balancer-hashing op een veld met lage kardinaliteit.

Stap 3: TCP-resets gebruiken als een verzadigingssignaal

Open de TCP-resetstatistiekenpanelen.

Schermopname van samenvattingspanelen met TCP-resetmetriek.

  • Heatmap van uitgaande TCP RST per bronpod. Een dynamische bronpod die ook RST's genereert, wordt overbelast. De toepassing sluit verbindingen agressief.

    Schermopname van een heatmap van uitgaande TCP-resets die geconcentreerd zijn in één bron-pod.

  • Heatmap van binnenkomende TCP RST per doelpod. Een pod die RST's van veel bronnen ontvangt, betekent meestal dat nieuwe verbindingen niet snel genoeg kunnen worden geaccepteerd (achterstand vol, listener traag).

    Schermopname van een heatmap van binnenkomende TCP-resets bij de belangrijkste bestemmingspods.

  • Gestapeld totaal RST per bron/doel. Trends in de loop van de tijd geven aan of resets een incident of een nieuwe stabiele status zijn.

Stap 4: Bevestigen met logboeken

Identificeer de drukste werklasten door het totale stroomvolume. Gebruik de kolommen met het samengevoegde aantal stromen in plaats count()van , waarmee alleen geaggregeerde rijen worden geteld, niet de onderliggende stromen:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| extend SrcWorkload = tostring(SourceWorkloads[0].name)
| summarize TotalFlows = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SourceNamespace, SrcWorkload
| top 10 by TotalFlows desc

Opmerking

TCP-vlaggen per pakket (zoals RST) maken geen deel uit van de aggregatiesleutel, dus ze worden verwijderd uit geaggregeerde rijen in ContainerNetworkLogs. Als u TCP-resets op stroomniveau wilt onderzoeken, gebruikt u de bovenstaande TCP-resetdashboards plus het pad naar logboeken op aanvraag: live RST-stromen streamen methubble observe --type trace --verdict FORWARDED --tcp-flags RST.

Stap 5: De oplossing valideren

Na het schalen van de workload, het opnieuw verdelen van de service of het herstellen van affiniteitsregels, moet de heatmap gelijkmatig over meer pods worden verlicht en moet de TCP RST-snelheid dalen.


Playbook 4: Netwerkstatus voor het hele cluster bewaken

Gebruik dit wanneer u een vlootweergave nodig hebt: capaciteitsplanning, dashboards aanroepen of een snelle statuscontrole in veel clusters.

Open Kubernetes/Netwerken/Clusters.

Schermopname van de vlootweergave van het clusterdashboard met bytes en pakketten die zijn doorgestuurd op alle knooppunten.

Signalen om te kijken en wat ze betekenen:

Panel Let op Waarschijnlijke oorzaak
Bytes/pakketten doorgestuurd Plotselinge uitschieters of pieken Knelpunt of opnieuw opstarten van werklast
Bytes/pakketten verwijderd (cluster) Aanhoudende klim Regressie van beleid of verzadigingskoppeling
Bytes/pakketten verwijderd op reden Nieuwe reden wordt weergegeven Nieuw probleem met onjuiste configuratie of kernelniveau
Bytes/pakketten verwijderd per knooppunt Eén knooppunt overheersen Hardware op knooppuntniveau, onjuiste configuratie of storende buur
TCP-verbindingsstatusdistributie Overschot SYN_SENT of TIME_WAIT Verbindingsfouten of socketverloop van kortstondige verbindingen

Schermopname van bytes en pakketten op clusterniveau die na verloop van tijd zijn verwijderd.

Schermopname van verwijderde bytes gegroepeerd op drop reason.

Schermopname van de distributie van TCP-verbindingsstatussen in het cluster.

Als er iets op dit dashboard verkeerd uitziet, gaat u naar het overeenkomende playbook (Playbook 1 voor DNS, Playbook 2 voor druppels, Playbook 3 voor hot pods).


Playbook 5: Fouten in de toepassingslaag (L7) vaststellen

Symptoom. HTTP 4xx/5xx foutpercentages stijgen. gRPC-aanroepen mislukken. Kafka-consumentenachterstand. Beschikbaar voor Cilium-clusters waarvoor het afdwingen van L7-beleid is ingeschakeld en die CiliumNetworkPolicy L7-regels bevat . Zie Een laag 7-beleid configureren.

Doel. Bepaal of L7-fouten afkomstig zijn van onjuist geconfigureerde clients, fouten aan de serverzijde of geweigerde stromen.

Opmerking

Voor de handhaving van L7 moet het cluster worden aangemaakt of bijgewerkt met --acns-advanced-networkpolicies L7. De L7 instelling schakelt ook FQDN-filtering in. L7-regels worden niet ondersteund in CiliumClusterwideNetworkPolicy (CCNP) en L7-verkeer stroomt via een Envoy-proxy die latentie kan toevoegen boven ~3000 aanvragen per seconde per knooppunt. Zie overwegingen voor L7-beleid.

Stap 1: Het L7-dashboard openen

Gebruik Kubernetes/Netwerken/L7 (workload) voor één service of L7 (naamruimte) voor een hele tenant.

Schermopname van het L7-verkeersdashboard met een samenvatting van doorgestuurde en verwijderde HTTP-, gRPC- en Kafka-stromen.

Stap 2: Verworpen versus doorgestuurd HTTP-verkeer onderscheiden

In het verdictvenster wordt HTTP-verkeer gesplitst in doorgestuurde en verwijderde stromen. Een piek in verwijderde HTTP betekent meestal dat een CiliumNetworkPolicy de aanvraag op L7 weigert (bijvoorbeeld een pad of methode blokkeren).

Schermopname van uitgaand HTTP-verkeer gesplitst per oordeel.

Stap 3: Statuscodes bijhouden in de loop van de tijd

In het deelvenster statuscode wordt aangegeven of fouten client- of serverzijde zijn. Een piek in 4xx verwijst naar ongeldige invoer, verlopen tokens of geweigerde paden. Een piek in 5xx punten bij back-endfouten.

Schermopname van uitgaande HTTP-aanvragen per methode en statuscode in de loop van de tijd.

Stap 4: De probleemgevend/ storende pods zoeken

In de heatmap 4xx ziet u welke bronpods de meest mislukte aanvragen genereren. Een enkele pod die helder gloeit, betekent meestal een vastgelopen lus voor opnieuw proberen van de client of een onjuist geconfigureerde replica.

Schermopname van een heatmap met HTTP-aanvragen die 4xx-fouten retourneren, gegroepeerd op bronpod.

Schermopname van de belangrijkste bronpods per HTTP-aanvraagvolume naast een heatmap voor verwijderde aanvragen.

Stap 5: Bevestigen met KQL

HTTP-verkeer ophalen en uitsplitsen per statuscode. Layer7.http.code maakt deel uit van de aggregatiesleutel, dus dit werkt op basis van geaggregeerde rijen:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| extend L7 = parse_json(Layer7)
| where isnotnull(L7.http)
| extend StatusCode  = tostring(L7.http.code),
         SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| where StatusCode startswith "4" or StatusCode startswith "5"
| summarize ErrorFlows = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount),
            UniqueCodes = dcount(StatusCode)
    by SrcWorkload, DstWorkload, StatusCode
| order by ErrorFlows desc

Voor gRPC en Kafka wordt de protocolspecifieke lading Layer7 meegestuurd, alleen http.code en dns.rcode zijn aggregatiesleutels. Filter op Verdict en de workloadidentiteit en gebruik logboeken op aanvraag wanneer u de gRPC-methode of het Kafka-onderwerp nodig hebt:

ContainerNetworkLogs
| where TimeGenerated between (datetime(<start-time>) .. datetime(<end-time>))
| where FlowType == "L7"
| extend SrcWorkload = tostring(SourceWorkloads[0].name),
         DstWorkload = tostring(DestinationWorkloads[0].name)
| where Verdict == "DROPPED"
| summarize DroppedFlows = sum(IngressFlowCount + EgressFlowCount + UnknownDirectionFlowCount)
    by SrcWorkload, DstWorkload
| order by DroppedFlows desc

Opmerking

Fijnmazige L7-kenmerken (HTTP-URL's, gRPC-methoden, Kafka-onderwerpen, DNS-querynamen) bevinden zich niet in de aggregatiesleutel en worden verwijderd uit geaggregeerde rijen. Gebruik Hubble-stromen op aanvraag voor dat detailniveau.

Waar moet u zich op richten tijdens L7 RCA

  • Verkeersvolume en -vorm. Gebruik heatmaps om onevenwichtigheid te vinden; in één dynamische replica wordt vaak de foutfrequentie uitgelegd.
  • Trend van statuscode. 4xx versus 5xx beperkt het onderzoek naar de client- of serverzijde.
  • Oordeel.Afgewezen L7-stromen betekenen dat een L7-beleid de aanvraag weigert. Lees het beleid en bevestig de bedoeling ervan.

Diepgaande functieverkenning (wanneer te gebruiken)

Gebruik dit gedeelte als snelle referentie zodra u de playbooks kent.

Metrische gegevens van containernetwerk

  • Gebruik voor: anomaliedetectie, dashboards, waarschuwingen, capaciteitsplanning.
  • Overslaan voor: oorzaak die identificatie nodig heeft (welke pod, welk pad, welk besluit).
  • Granulariteit: knooppuntniveau op alle gegevensvlakken; pod-niveau op Linux.
  • Kostengevoelige workloads: pas filters voor metrische gegevens toe op Cilium-clusters om alleen de naamruimten, labels en metrische gegevenstypen te behouden die u belangrijk vindt. Filteren vindt plaats voor scrape, dus ongewenste reeksen bereiken Nooit Prometheus.

Containernetwerklogboeken (opgeslagen)

  • Gebruik voor: hoofdoorzaakanalyse, historische trends, naleving/controle.

  • Alleen gegevensvlak:Cilium. Opgeslagen logboeken zijn niet beschikbaar op niet-Cilium-clusters.

  • Verplichte stap: definieer een ContainerNetworkLog CRD die het gewenste verkeer selecteert. Zonder dit worden er geen logboeken verzameld. Zie Netwerklogboeken voor containers instellen.

  • Waar logboeken terechtkomen: Cilium schrijft standaard stroomrecords naar /var/log/acns/hubble/events.log elk knooppunt (50 MB roterende buffer). Van daaruit hebt u twee opslagpaden:

    • nl-NL: Azure Log Analytics (beheerd, aanbevolen): Container Insights verzendt logboeken naar de ContainerNetworkLogs-tabel voor KQL-query's en geïntegreerde Azure portaldashboards.
    • Bring your own collector — wijs een met OpenTelemetry compatibele agent (Splunk, Datadog, Elastic, elke OTel-collector) aan op het hostlogboekpad om stromen door te sturen naar uw bestaande waarneembaarheidsstack in plaats van of naast Log Analytics.
  • Kostenbeheer: met aggregatie van stroomlogboeken worden vergelijkbare stromen samengevouwen in een venster van 30 seconden, waarbij patronen behouden blijven terwijl het volume wordt geknipt. Combineer met smal includeFilters voor de beste resultaten.

  • Visualization: kunt u de Flow Logs - Analytics Tier of Flow Logs - Basic Tier dashboards gebruiken onder Azure>Insights>Containers>Networking.

    Schermopname van het samenvattingsvenster voor stroomlogboekstatistieken en de afhankelijkheidsgrafiek van de service.

    Schermopname van het deelvenster filters voor stroomlogboeken voor het beperken per protocol, naamruimte of oordeel.

Containernetwerklogboeken (op aanvraag)

  • Gebruik voor: live-incidenten, onregelmatige problemen, ad-hoc onderzoek zonder de configuratie van de verzameling te wijzigen.

  • Gegevensvlak:alleen Cilium.

  • Tools: Hubble CLI voor terminalfiltering; Hubble UI voor visuele service-naar-service-kaarten.

  • Geen permanente opslag, geen extra kosten, geen installatie buiten het inschakelen van ACNS.

    Schermopname van de Hubble-gebruikersinterface met visualisatie van service-naar-servicestroom.

Filteren van metrische gegevens (Ciliumclusters)

Pas een ContainerNetworkMetric CRD toe om te bepalen welke Hubble-metrische gegevens per knooppunt worden geëxporteerd. Dit is handig wanneer u brede waarneembaarheid nodig hebt voor een paar kritieke naamruimten, maar niet wilt betalen voor reeksen met hoge kardinaliteitsstromen in al deze.

Algemene patronen:

  • Dns behouden en metrische gegevens over het hele cluster verwijderen; metrische stroomgegevens beperken tot productienaamruimten.
  • Sluit systeemnaamruimten met een hoog volume uit, zoals kube-system van metrische stroomgegevens.
  • Beperk tenant-naamruimtes tot hun eigen filterblokken.

Zie voor volledige CRD-voorbeelden Configureer het filteren van metrische gegevens voor het containernetwerk.


Beste praktijken

  • Begin breed en werk dan naar detail. Schakel een paar dagen brede logboeken/metrische gegevens in, bekijk wat u daadwerkelijk gebruikt, en verscherp vervolgens ContainerNetworkLog en ContainerNetworkMetric filters.
  • Houd de tijdvensters voor metrische gegevens en logboeken uitgelijnd. Wanneer u een incident onderzoekt, gebruikt u dezelfde begin- en eindtijd in het dashboard en de KQL-query, zodat signalen op een schone manier correleren.
  • Geef de voorkeur aan de vooraf gebouwde dashboards. Ze hebben betrekking op de meest voorkomende vragen. Aangepaste panelen zijn meestal alleen nodig zodra u de eerste sortering hebt verstreken.
  • Rangschikken ContainerNetworkLogs op basis van behoefte. Overschakelen naar de Basic-laag voor kostengevoelige workloads; gebruik het overeenkomende dashboard voor de Basic-laag. Zie Log Analytics tabellen.
  • Behandel geaggregeerde logboeken en logboeken op aanvraag als aanvullingen. Geaggregeerde logboeken zijn ideaal voor trend- en patroondetectie, maar sla details per stroom over. Gebruik on demand (Hubble) voor fijnmazige inspectie.
  • Valideer oplossingen met hetzelfde paneel dat het probleem heeft gemeld. Als hetzelfde paneel vlak is na uw wijziging, hebt u een echte oplossing.

Veelvoorkomende valkuilen

  • Vergeet de ContainerNetworkLog CRD. Het inschakelen van containernetwerklogboeken in het cluster verzamelt niets totdat u ten minste één CRD toepast die verkeer selecteert.
  • Probeert opgeslagen logboeken te gebruiken voor live-incidenten die al voorbij zijn. Als logboeken niet zijn ingeschakeld vóór het incident of buiten het vastgelegde filter vallen, schakelt u over naar Hubble-stromen op aanvraag voor het volgende exemplaar.
  • L7-dashboards leeg op een Cilium-cluster. L7-metrische gegevens vereisen zowel --acns-advanced-networkpolicies L7 op het cluster als een CiliumNetworkPolicy met L7-regels. CCNP biedt geen ondersteuning voor L7-regels. Zie L7-beleid toepassen.
  • DNS-metrieken leeg op Cilium. Voor DNS-zichtbaarheid is een CiliumNetworkPolicy met een dns-regel vereist (meestal naast toFQDNs). FQDN/ DNS-proxy is niet compatibel met knooppunt-lokale DNS of AKS Lokale DNS. Het uitvoeren van een van beide schakelt DNS-proxying en de resulterende metrische gegevens uit. Zie beperkingen voor FQDN-filtering.
  • matchPattern: "*" blokkeert alle DNS. Een bare wildcard wordt niet ondersteund. Gebruik een wildcard-patroon met voorloopteken zoals *.example.com of app*.example.com. Zie FQDN-filterbeleid toepassen.

Netwerkobserveerbaarheid opgenomen in Azure Monitoring

Wanneer u de beheerde Azure Monitor-service voor Prometheus inschakelt op een AKS-cluster, worden de metrische gegevens voor basisknooppuntnetwerkbewaking standaard verzameld via het networkobservabilityRetina doel. Dit biedt:

  • Metrische netwerkgegevens op basisniveau op knooppuntniveau: Essentiële zichtbaarheid van netwerkverkeer op knooppuntniveau
  • Standaard Prometheus-doelen: metrische gegevens voor netwerkobservabiliteit worden automatisch gesroot door Azure Monitor
  • Azure Monitor-integratie: naadloze integratie met Azure Monitor; metrische gegevens worden automatisch verzameld en kunnen worden gevisualiseerd in Grafana
  • Er is geen extra installatie vereist: automatisch ingeschakeld wanneer Azure Monitor beheerde Prometheus is geconfigureerd
  • Microsoft-ondersteuning: ondersteund als onderdeel van Azure Monitor en AKS

Opmerking: Hiervoor moet de beheerde Azure Monitor-service voor Prometheus zijn ingeschakeld op uw AKS-cluster, waarvoor mogelijk kosten zijn verbonden.

Aan de slag: Schakel de beheerde Azure Monitor-service in voor Prometheus op uw AKS-cluster via Azure Portal of CLI. Metrische gegevens over netwerkobserveerbaarheid worden automatisch verzameld en beschikbaar voor visualisatie in Azure Managed Grafana.

Netwerkobserveerbaarheid met Retina OSS

Hoewel Advanced Container Networking Services (ACNS) een betaald aanbod is dat uitgebreide mogelijkheden voor netwerkobservabiliteit biedt, biedt Microsoft ook ondersteuning voor netwerkobserveerbaarheid met Retina OSS, een opensource-platform voor waarneembaarheid van netwerken dat essentiële mogelijkheden voor netwerkbewaking biedt.

Retina OSS is het opensource-waarneembaarheidsplatform dat beschikbaar is op retina.sh en GitHub. Het biedt:

  • Op eBPF gebaseerde netwerkobserveerbaarheid: maakt gebruik van eBPF-technologieën om inzichten te verzamelen met minimale overhead
  • Uitgebreide verkeersanalyse met Kubernetes-context: Uitgebreide opname en analyse van netwerkverkeersstromen met volledige Kubernetes-integratie
  • Geavanceerde verzameling metrische gegevens: Metrische gegevens van laag 4, DNS-metrische gegevens en mogelijkheden voor gedistribueerde pakketopname
  • Uitbreidbaarheid op basis van invoegtoepassingen: functionaliteit aanpassen en uitbreiden via een invoegtoepassingsarchitectuur
  • Met Prometheus compatibele metrische gegevens: uitgebreide netwerkmetrieken exporteren in Prometheus-indeling met configureerbare metrische modi
  • Gedistribueerde pakketopname: pakketopnamen op aanvraag op meerdere knooppunten voor uitgebreide probleemoplossing
  • Platform- en CNI-agnostisch: werkt met elk Kubernetes-cluster (AKS, arc, on-premises), elk besturingssysteem (Linux/Windows) en eventuele CNI's
  • Communityondersteuning: Opensource met communitygestuurde ondersteuning en bijdragen
  • Zelfbeheerd: Volledige controle over implementatie en configuratie
  • Hubble-integratie: integreert met hubble van Cilium voor aanvullende netwerkinzichten

Aan de slag: Implementeer Retina OSS met Helm-grafieken of Kubernetes-manifesten vanuit de officiële Retina-opslagplaats. Stel Prometheus en Grafana in om metrische gegevens te visualiseren, configureer deep traffic analysis met Kubernetes-context, schakel gedistribueerde pakketopname in voor geavanceerde probleemoplossing en pas functionaliteit aan met behulp van de architectuur op basis van de invoegtoepassing voor specifieke use cases.

Vergelijking van netwerkobserveerbaarheidsaanbiedingen

Offering Support Kosten Beheer Uitrol Gebruiksvoorbeelden
Advanced Container Networking Services (ACNS) Microsoft Enterprise-ondersteuning Betaalde Azure-dienst Volledig beheerd door Microsoft Azure-integratie met één klik Waarneembaarheid van beheerde ondernemingen: netwerkstromen op podniveau, metrische gegevens op podniveau, DNS-metrische gegevens, permanente opgeslagen logboeken, laag 7-verkeersanalyse, afdwinging van netwerkbeveiligingsbeleid, nalevingsrapportage, geavanceerde Grafana-dashboards, ai-inzichten
Netwerkobserveerbaarheid (Azure Monitor) Microsoft-ondersteuning als onderdeel van Azure Monitor Opgenomen in azure Monitor beheerde Prometheus (Azure Monitor-kosten zijn van toepassing) Volledig beheerd door Microsoft Automatisch wanneer door Azure Monitor beheerde Prometheus is ingeschakeld Netwerkbewaking van knooppunten: alleen metrische netwerkgegevens op cluster- en knooppuntniveau, geen zichtbaarheid op podniveau, geen opgeslagen logboeken, geen DNS-analyse - geschikt voor basisinfrastructuurbewaking en gebruikers die minimale waarneembaarheid van het netwerk willen zonder extra configuratie
Retina OSS Communityondersteuning Gratis en open-source Zelfbeheerd Handmatig instellen via Helm/manifesten in een Kubernetes-cluster Onbeheerde geavanceerde waarneembaarheid: realtime pakketopnamen, aangepaste verzameling met metrische gegevens, uitgebreide netwerkanalyse op basis van eBPF, Hubble-integratie, implementaties met meerdere clouds, aangepaste waarneembaarheidspijplijnen, geavanceerde foutopsporing met tcpdump/Wireshark-integratie en ontwikkel-/testomgevingen

Meer informatie

Advanced Container Networking Services (ACNS)

Diagnostische gegevens op basis van AI

Container Network Security (Cilium)

Gegevensvlak en -platform

Opensource-hulpprogramma's