AKS & Container Networking参照資料確認: 2026-09-11

AKS Network Troubleshooting

AKS network障害をpod/socket→DNS→Service/EndpointSlice→Cilium/NetworkPolicy→node→VNet/UDR/NSG→ingress/egressの順で切り分ける。

この記事の目次

AKS Network Troubleshootingを理解するための前提

AKS networkingは変化が速いため、旧方式とcurrent recommendationを区別して記載しています。実装直前には下記Microsoft Learnのcurrent constraints / region / version supportを再確認してください。

最初に症状をDNS、connect timeout、connection refused、TLS/L7 error、policy drop、intermittent/packet lossへ分類すると調査branchが大きく減る。 Service障害ではService objectだけでなくEndpointSliceとpod readinessを確認する。backendが無ければAzure routeを調べても直らない。

same-pod/same-node/cross-node/externalの比較で、application、node dataplane、overlay/VNet、egress deviceのfailure domainを切り分ける。 Azure CNI Overlayではpod CIDR外のsourceがnode IPへSNATされるため、external firewall logでpod IPを探し続けない。

NetworkPolicy/ACNS securityを使う環境ではdeny event/flow logsをAzure NSG/Firewall logと同時刻で比較し、blocking layerを特定する。 private clusterのkubectl failureはworkload dataplane障害とは別。API FQDN DNS/management route/control-plane reachabilityを独立runbookで確認する。

通信経路と責任境界

調査原則: Kubernetes objectが正しいことはAzure data pathの正常性を保証せず、Azure resourceがHealthyであることもpod-to-pod/pod-to-serviceの成功を保証しません。source・destination・protocol・port・時刻を固定して両layerを照合します。

アドレスと識別情報の考え方

Address / identityWhere it lives運用上の意味
Observed sourcepod/node/NAT/edgeのどれかnetwork modeとSNAT stageごとにlog上のsourceが変わる。
Observed destinationService VIP/Endpoint/external IP/FQDN同じ「接続先」でも調査layerでaddressが変わる。
Flow identity5-tuple + timestamp複数logを結ぶ最小キー。曖昧な「つながらない」を排除。
Kubernetes identitynamespace/pod/service/labelsephemeral IPをworkloadへ戻してpolicy/backend selectionを確認。
重要: IPアドレスそのものとworkload/service identityを混同しません。autoscale・reschedule・SNAT・load balancingでaddressは変化するため、Kubernetes metadataとAzure resource identityを合わせて記録します。

設計判断

判断軸確認する問い設計として固定すること
DNSかIPかIP直接で成功するかDNS branchとtransport branchを分離。
Serviceかpodかpod IP直アクセスとService経由を比較Service routing/selector問題を分離。
same-node/cross-node同一nodeだけ成功するかinter-node/overlay/NSG問題を分離。
internal/externalcluster/VNet内は成功するかegress/ingress/NAT/Firewallへ範囲を絞る。
policy on/offpolicy対象だけ失敗するかselector/deny evidenceを確認し、安易に全policy削除しない。

実装・移行の順序

  1. source pod、destination、protocol/port、timestamp、expected resultを固定する。
  2. kubectlでpod IP/node/readiness、Service、EndpointSlice、NetworkPolicyをsnapshotする。
  3. DNSならresolver→CoreDNS/NodeLocal DNS→upstreamの順でquery pathを確認する。
  4. pod IP直/Service、same-node/cross-nodeでfailure domainを狭める。
  5. az aks showでCNI/IPAM/dataplane/outboundTypeを確認し、そのmodelに沿ってAzure route/NSG/LB/NAT/Firewallを調べる。
  6. ACNS/Hubble/Firewall/NSG等のflow evidenceを時刻で突き合わせ、fix後に同じjourneyを再試験する。

運用で残しておく情報

観点残すべき運用証拠
Snapshotkubectl get/describe結果をincident時刻付きで保存。
ModelnetworkProfileを取得しOverlay/flat/Cilium/outboundTypeを誤認しない。
Evidencedrop/flow/backend health/DNS metricを同じtime windowで収集。
Retest修正後にoriginal 5-tupleとnegative controlを両方再実行。

変更前に確認する

Control state

AKS networkProfile、Kubernetes object、Azure associationをread-onlyで採取し、desired configurationを固定する。

Data plane

同じ5-tupleで実通信し、forward path・return path・source translation・policy decisionを証明する。

Observability

DNS/TCP/flow/drop/backend health等、障害点に対応するsignalを同一時刻で収集する。

Negative test

allowだけでなく、禁止すべき通信が明示的に失敗することもsecurity acceptanceへ含める。

Read-only / discovery commands
az aks show -g <rg> -n <cluster> --query networkProfile -o jsonc
kubectl get pods -A -o wide
kubectl get svc,endpointslices -A -o wide
kubectl get networkpolicy -A
kubectl get events -A --sort-by=.lastTimestamp

Common failure modes

症状疑うboundary確認・是正
timeoutroute/NSG/Firewall/policy/dropSYNの行き先とreturn pathをflow evidenceで追う。
connection refuseddestination到達済みだがlistener/backendなしpod process/listening port/Service targetPortを確認。
DNS SERVFAIL/timeoutCoreDNS/upstream/policyresolver pathとDNS metrics/logsへ。
intermittent一部backend/nodeだけ異常EndpointSliceとpod/node別成功率を比較。
TLS/L7network到達後のSNI/cert/host/path/backend protocolL3/L4成功を確認してからingress configへ。

Change safety / rollback

一括変更を避ける: 障害対応でNetworkPolicy/NSG/UDRを全解除するとcause evidenceとsecurity postureを同時に失う。read-only snapshot→最小canary change→同一journey再試験の順を守る。

Official sources