免責事項: これは英文の記事「Antrea cluster application not accessible when using NodePortLocal」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。
以下の条件下において、K8S Ingress にアクセスできなくなり、"Secure Connection failed" というエラーが出力されました。
1. Antrea CNI が使用されています。
2. NodePortLocal (NPL) Antrea 上で有効化されています。
3. 外部ロードバランサ(NSXやALBなど)は、Antrea エージェントによって公開された NPL ポートマッピングを利用します。
例としてAvi Web UI (Applications > Pools > Servers) 上で、対象プールは正常(緑色)と異常(赤色/オレンジ色)のPodが混在するヘルスステータスを示しています。
対象 Pod が稼働する Worker Node 上の antrea-agent pod のログには Pod の IP アドレスが見つからないというログが出力されます。
# kubectl -n kube-system logs antrea-agent-xxxxxx
I0408 hh:mm:ss.988650 1 npl_controller.go:405] IP address not set for Pod: <NAMESPACE>/<POD_NAME>
対象 Pod が稼働する Worker Node の iptables の出力には Pod のIPアドレスが消失した DNAT ルールエントリが存在します。
# iptables -t nat -S ANTREA-NODE-PORT-LOCAL
-A ANTREA-NODE-PORT-LOCAL -p tcp -m tcp --dport <port> -j DNAT --to-destination <MISSING POD IP>:<port>
Antrea Agent の起動後、NodePortLocal(NPL) ルールが Pod の IP アドレスを検出できなかったため、Worker Node でトラフィックがドロップされます。
この問題はVKR 1.33.6/1.32.10で修正され、VKR 1.31.14にもバックポートされました。
回避策としては、以下のいずれかが考えられます。
VKR 1.35では、NodePortLocal(NPL) FeatureGateが一般提供(GA)に移行し、ユーザーには公開されなくなったためご注意ください。