k8sでクライアントのグローバルIPを取得するため、LoadBalancerの設定にservice.beta.kubernetes.io/external-traffic: OnlyLocal
をアノテートする、という技があります。
これにより、一部のリクエストがタイムアウトするというネットワーク障害に遭遇しました(v1.6.4)。
どうやら、Podが動作していないノードにリクエストが送られてロストしているとのことです。
[k8s.io] ESIPP [Slow] should only target nodes with endpoints flaky #47745
Serviceのアノテーションの値をservice.beta.kubernetes.io/external-traffic: Global
に変更することで解消しました。(ただしクライアントのIPは取得できない)
47745の件は、v1.7ではパッチが入りCLOSEDとなっています。
この設定は、v1.4まではとくに問題なく動作しており、ハード故障をきっかけにv1.5以降のバージョンに更新したタイミングでヒットしました。
かなり狭い範囲の組み合わせで発症するケースですが、クライアントのIPを取得しようと思うと遭遇する可能性があります。
⁋ 2017/07/11↻ 2024/12/18
中馬崇尋
Chuma Takahiro
Chuma Takahiro