ビュー:
プロファイル適用性: レベル1
Kubeletにiptablesの管理を許可する。
Kubeletは、ポッドのネットワークオプションの選択に基づいて、必要なiptablesの変更を自動的に管理できます。iptablesの変更はkubeletに任せることをお勧めします。これにより、iptablesの設定がポッドのネットワーク設定と同期した状態を保つことができます。動的なポッドネットワーク設定の変更に対してiptablesを手動で設定すると、ポッド/コンテナ間や外部との通信が妨げられる可能性があります。iptablesのルールが厳しすぎたり、緩すぎたりすることがあります。
注意
注意
Azure AKS のドキュメントでデフォルト値を確認してください。

影響

Kubeletはシステム上のiptablesを管理し、同期を保ちます。他のiptables管理ソリューションを使用している場合、競合が発生する可能性があります。

監査

Audit Method 1:
Kubelet設定ファイルを使用している場合、makeIPTablesUtilChainstrueに設定されているエントリがあることを確認してください。
  1. 関連するノードにSSHで接続し、各ノードで次のコマンドを実行して適切なKubelet設定ファイルを見つけてください。
    ps -ef | grep kubelet
    上記のコマンドの出力は、Kubeletの設定ファイルの場所である--config /etc/kubernetes/kubelet/kubelet-config.jsonに類似したものを返す必要があります。
  2. Kubeletの設定ファイルを開く:
    cat /etc/kubernetes/kubelet/kubelet-config.json
  3. makeIPTablesUtilChains引数が存在する場合、それがtrueに設定されていることを確認してください。
  4. --make-iptables-util-chains引数が存在せず、--configで指定されたKubelet設定ファイルがある場合、そのファイルがmakeIPTablesUtilChainsfalseに設定していないことを確認してください。
Audit Method 2:
APIのconfigzエンドポイントを使用する場合、Kubeletを実行しているノードからライブ構成を抽出して、authentication... "makeIPTablesUtilChains":trueのステータスを検索します。
  1. ローカルプロキシポートと以下の変数を設定し、プロキシポート番号とノード名を提供してください。
    • HOSTNAME_PORT="localhostとポート番号"
    • 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.aks.internal (example node name 
    from "kubectl get nodes") 
    
    curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"

修復

Remediation Method 1:
/etc/kubernetes/kubelet/kubelet-config.jsonを編集し、以下のパラメータをfalseに設定してください。
"makeIPTablesUtilChains": true
Remediation Method 2:
実行可能な引数を使用する場合は、各ワーカーノードのkubeletサービスファイル/etc/systemd/system/kubelet.service.d/10-kubelet-args.confを編集し、KUBELET_ARGS変数文字列の末尾に以下のパラメータを追加してください。
--make-iptables-util-chains=true
Remediation Method 3:
APIのconfigzエンドポイントを使用する場合、kubeletを実行しているノードからライブ構成を抽出して、"makeIPTablesUtilChains": trueのステータスを検索してください。
Kubernetesドキュメントで手順ごとのconfigmap手順を参照し、監査プロセスからcurlコマンドを再実行してkubeletの設定変更を確認してください。
     kubectl proxy --port=8001 &
     
     export HOSTNAME_PORT=localhost:8001 (example host and port number) 
     export NODE_NAME=ip-192.168.31.226.aks.internal (example node name from 
     "kubectl get nodes")
     
     curl -sSL "http://${HOSTNAME_PORT}/api/v1/nodes/${NODE_NAME}/proxy/configz"
    
For all three remediations:
kubeletサービスを再起動し、ステータスを確認してください。
     systemctl daemon-reload
     systemctl restart kubelet.service
     systemctl status kubelet -l