LoginSignup
5
0

falcoのConnection closed errorの対応

Last updated at Posted at 2023-12-05

問題

FalcoのPodが以下のerrorログをはいていることを確認しました。

% k logs falco-daemonset-2fcxr -n kube-support |grep error
k8s_handler (k8s_replicationcontroller_handler_state::collect_data()[https://172.20.0.1] an error occurred while receiving data from k8s_replicationcontroller_handler_state, m_blocking_socket=1, m_watching=0, SSL Socket handler (k8s_replicationcontroller_handler_state): Connection closed.
k8s_handler (k8s_service_handler_state::collect_data()[https://172.20.0.1] an error occurred while receiving data from k8s_service_handler_state, m_blocking_socket=1, m_watching=0, SSL Socket handler (k8s_service_handler_state): Connection closed.
k8s_handler (k8s_replicaset_handler_state::collect_data()[https://172.20.0.1] an error occurred while receiving data from k8s_replicaset_handler_state, m_blocking_socket=1, m_watching=0, SSL Socket handler (k8s_replicaset_handler_state): Connection closed.
k8s_handler (k8s_deployment_handler_state::collect_data()[https://172.20.0.1] an error occurred while receiving data from k8s_deployment_handler_state, m_blocking_socket=1, m_watching=0, SSL Socket handler (k8s_deployment_handler_state): Connection closed.

このerrorログは大規模環境だとパフォーマンスの問題で発生してしまうfalcoの既知の問題のようです。

昨日の記事のEKS Upgrade作業中にたまたま発見しました。

ワークアラウンド

Helmを使用している場合

GitHubのissueで同様の事象が報告されており、ワークアラウンドも紹介されていました。

A workaround is to disable the k8s metadata collection and only rely on fields available from the container runtimes.

metadataのcollectionをdisableすることでいったんは、エラーがでなくなるようです。
しかしながら、具体的な方法がわからなかったので、質問してみたところHelmを使っている場合の回答が返ってきました。

Falco_crash_after_few_minutes_on_GKE_1_24_·Issue__2694·_falcosecurity_falco_🔊.png

Helmを使用していない場合

ZOZOの場合は、Helmを使用せず、GitHub上で公開されているテンプレートファイルをもとにyamlファイルを記述し、リソースを作成しています。

上記の回答よると、Helmの場合はkubernetes.enabledをfalseにするそうです。このkubernetes.enabledの値はここのif文で使用されていて、trueの場合は -K をつけるようです。

charts_falco_templates_pod-template_tpl_at_falco-3_7_1_·_falcosecurity_charts_🔊.png

ただし、注意するべき点として、falseにするとID, name, namespace, labelsしか取得できなくなるとのことです。我々はfalco_rules.yamlにて k8s.pod.name と k8s.ns.name しか使用していないため問題ありませんでした。
ちなみに、Filed Classの一覧は以下です。
https://falco.org/docs/reference/rules/supported-fields/#field-class-k8s

また、ここの記載的に、 -k でも -K でもどちらでもよいらしいので、どちらも削除しました。

When using Falco with Kubernetes, you can enable this functionality by using the -k or -K command-line flag.

最終的にやったこと

今回は /usr/bin/falco のargsの -K-k を削除しました。

falcoのConnection_closed_errorの解消_by_gold-kou_·Pull_Request__14969·_st-tech_zozo-platform-infra_🔊.png

根本解決

以下のIssueで対応中とのことです。
https://github.com/falcosecurity/libs/issues/987

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0