プロファイル適用性: レベル1
Kubeletにiptablesの管理を許可する。
Kubeletsは、ポッドのネットワークオプションの選択に基づいて、必要なiptablesの変更を自動的に管理できます。iptablesの変更はkubeletsに任せることをお勧めします。これにより、iptablesの設定がポッドのネットワーク設定と同期した状態を維持できます。動的なポッドネットワーク設定の変更に対して手動でiptablesを設定すると、ポッド/コンテナ間や外部との通信が妨げられる可能性があります。iptablesのルールが厳しすぎたり、緩すぎたりすることがあります。
注意デフォルト値についてはAmazon EKSのドキュメントを参照してください。
|
影響
Kubeletはシステム上のiptablesを管理し、同期を維持します。他のiptables管理ソリューションを使用している場合、競合が発生する可能性があります。
監査
監査方法1:
-
各ノードへのSSH。
-
各ノードで次のコマンドを実行してKubeletプロセスを見つけます:
ps -ef | grep kubelet
出力に引数--make-iptables-util-chainsが含まれている場合、それがtrueに設定されていることを確認してください。 -
--make-iptables-util-chains引数が存在せず、--configで指定されたKubelet設定ファイルがある場合、そのファイルでmakeIPTablesUtilChainsがfalseに設定されていないことを確認してください。
監査方法2:
api configzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して
"makeIPTablesUtilChains":trueのステータスを検索することを検討してください。ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を提供してください:
HOSTNAME_PORT="localhost-and-port-number" NODE_NAME="The-Name-Of-Node-To-Extract-Configuration"
from the output of "kubectl get nodes"kubectl proxy --port=8001 &
export HOSTNAME_PORT=localhost:8001 (example host and port number)
export NODE_NAME=ip-192.168.31.226.ec2.internal (example node name from
"kubectl get nodes")
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
修復
修復方法1:
Kubeletの設定ファイルを変更する場合、kubelet-config.jsonファイル
/etc/kubernetes/kubelet/kubelet-config.jsonを編集し、以下のパラメータをtrueに設定してください。"makeIPTablesUtilChains": true
/etc/systemd/system/kubelet.service.d/10-kubelet-args.confで--make-iptables-util-chains引数を設定しないようにしてください。これはKubeletの設定ファイルを上書きしてしまうためです。修復方法2:
実行可能な引数を使用する場合、各ワーカーノードのkubeletサービスファイル
/etc/systemd/system/kubelet.service.d/10-kubelet-args.confを編集し、KUBELET_ARGS変数文字列の末尾に以下のパラメータを追加してください。--make-iptables-util-chains:true
修復方法3:
api configzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して
"makeIPTablesUtilChains":trueのステータスを検索することを検討してください。詳細な手順を確認するには、ライブクラスターでノードのKubeletを再構成するを参照し、監査プロセスからcurlステートメントを再実行してkubelet構成の変更を確認してください。
kubectl proxy --port=8001 &
export HOSTNAME_PORT=localhost:8001 (example host and port number)
export NODE_NAME=ip-192.168.31.226.ec2.internal (example node name from
"kubectl get nodes")
curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
3つの修正すべてに対して: システムに基づいて、
kubeletサービスを再起動し、ステータスを確認してください。systemctl daemon-reload systemctl restart kubelet.service systemctl status kubelet -l
