k8sリクエスト消失障害例

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を取得しようと思うと遭遇する可能性があります。

中馬崇尋
Chuma Takahiro