◾️はじめに
k8s のコンポーネントの一つであるkube-proxyに関して 徐々にメモってしていく
目次
【1】kube-proxy 【2】立ち位置 1)DaemonSet 【3】プロキシモード 【4】iptablesプロキシモード 1)使用上の注意 2)補足:readinessProbe 【5】kube-proxyに関わるコマンド 1)コマンド例 【6】kube-proxyコマンドのオプション 1)--nodeport-addresses strings 【7】AWS EKSのkube-proxy
【1】kube-proxy
* Pod への通信を可能にするためにワーカーノード内のネットワーク設定を担う Kubernetes のコンポーネントの1つ
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/
【2】立ち位置
* Worker Nodeで動作 * 以下の公式ドキュメントの図の「k-proxy」で各ノードで1つずつ Pod として動作
https://kubernetes.io/ja/docs/concepts/overview/components/
* DaemonSet としてデプロイされている
コマンド
kubectl get daemonset -n kube-system kubectl describe daemonset kube-proxy -n kube-system
1)DaemonSet
* ノードログ収集などのクラスターに存在するバックグラウンドプログラムを デプロイするために使用 => そのようにして、全て(またはいくつか)のNodeが単一のPodのコピーを稼働させることを保証
https://kubernetes.io/ja/docs/concepts/workloads/controllers/daemonset/
https://kubernetes.io/ja/docs/tasks/manage-daemon/create-daemon-set/
参考文献
https://cstoku.dev/posts/2018/k8sdojo-13/
【3】プロキシモード
* kube-proxyにも種類がある => 日本語サイトだとちょっと古い(nftables の記述がない)
https://kubernetes.io/docs/reference/networking/virtual-ips/#proxy-modes
日本語版
https://kubernetes.io/ja/docs/concepts/services-networking/service/
Proxy mode | Explanations | Memo |
---|---|---|
iptables | iptablesルールを使用してトラフィックをPodにルーティング | Default |
ipvs | Linux の netfilter サブシステムをベースに実装 | Kubernetes 1.8 で導入。Kubernetes 1.11 で GA |
nftables | nftablesベースに実装 | 1.30 時点でアルファ機能 |
kernelspace | Windows 限定 | |
userspace | Kubernetes 1.26 で削除済 |
【4】iptablesプロキシモード
* iptablesルールを使用してトラフィックをPodにルーティング
https://kubernetes.io/ja/docs/concepts/services-networking/service/#proxy-mode-iptables
より抜粋 ~~~~ デフォルトでは、iptablesモードにおけるkube-proxyは バックエンドPodをランダムで選択します。 ~~~~ => iptables に関しては、以下の関連記事を参照の事
iptablesコマンド
https://dk521123.hatenablog.com/entry/2025/03/18/003023
1)使用上の注意
https://kubernetes.io/ja/docs/concepts/services-networking/service/#proxy-mode-iptables
より抜粋 ~~~~ kube-proxyがiptablesモードで稼働し、最初に選択されたPodが応答しない場合、 そのコネクションは失敗します。 ... iptablesモードのkube-proxyが正常なバックエンドPodのみをリダイレクト対象とするために、 PodのReadinessProbeを使用してバックエンドPodが正常に動作しているか確認できます。 これは、ユーザーがkube-proxyを介して、コネクションに失敗したPodに対して トラフィックをリダイレクトするのを除外することを意味します。 ~~~~
2)補足:readinessProbe
詳細は、以下の関連記事を参照
Kubernetes ~ Health check / Probe ~
https://dk521123.hatenablog.com/entry/2025/03/27/182147
とりあえず、公式ドキュメント
https://kubernetes.io/ja/docs/concepts/workloads/pods/pod-lifecycle/#types-of-probe
より抜粋 ~~~~ コンテナがリクエスト応答する準備ができているかを示します。 readinessProbeに失敗すると、エンドポイントコントローラーにより、 ServiceからそのPodのIPアドレスが削除されます。 initial delay前のデフォルトのreadinessProbeの初期値はFailureです。 コンテナにreadinessProbeが設定されていない場合、デフォルトの状態はSuccessです。 ~~~~
【5】kube-proxyに関わるコマンド
1)コマンド例
$ kubectl get pod -n kube-system -o wide $ kubectl describe pods kube-proxy-2n7b2 -n kube-system # mode: "" だったら、デフォルトの「iptables」 # kube-proxy設定を表示 $ kubectl exec -it demo_kube_proxy -n kube-system -- iptables -n -t nat -L > itables.txt
【6】kube-proxyコマンドのオプション
1)--nodeport-addresses strings
https://kubernetes.io/docs/reference/command-line-tools-reference/kube-proxy/
より抜粋 ~~~~ A list of CIDR ranges that contain valid node IPs, or alternatively, the single string 'primary'. If set to a list of CIDRs, connections to NodePort services will only be accepted on node IPs in one of the indicated ranges. If set to 'primary', NodePort services will only be accepted on the node's primary IP(s) according to the Node object. If unset, NodePort connections will be accepted on all local IPs. This parameter is ignored if a config file is specified by --config. ~~~~
[1] 設定されている場合
* NodePortサービスがNodeオブジェクトに従って、 NodeのPrimary IDでのみ受け入れられる
[2] 設定されていない場合
* NodePort接続は全てのローカルIPアドレスで受け入れられる => 以下の『「設定されていない」時のエラー内容』が表示されるかも、、、
「設定されていない」時のエラー内容
https://dk521123.hatenablog.com/entry/2025/03/15/231209
より抜粋 E0314 12:34:56.123456 1 server.go:234 "Kube-proxy configuration may be incomplete or incorrect" err="nodePortAddresses is unset; NodePort connections will be accepted on all local IPs. Consider using `--nodeport-addresses primary`" => nodePortAddresses が設定されていない場合に発生する
【7】AWS EKSのkube-proxy
* Amazon EKS では、kube-proxyをアドオンとしてクラスターに追加することを推奨
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/managing-kube-proxy.html
参考文献
https://qiita.com/nozmiz/items/9a74433258a79be26c36
https://zenn.dev/toversus/articles/dcb888d73f0615
関連記事
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2020/05/01/000000
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
Kubernetes ~ Health check / Probe ~
https://dk521123.hatenablog.com/entry/2025/03/27/182147
kubectlコマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/01/12/110555
デバッグに役立つkubectlコマンド ~ kubectl debug ~
https://dk521123.hatenablog.com/entry/2025/03/13/003015
デバッグに役立つkubectlコマンド ~ kubectl logs ~
https://dk521123.hatenablog.com/entry/2025/03/15/231209
Kubernetes ~ ConfigMap ~
https://dk521123.hatenablog.com/entry/2025/03/11/000418
Kubernetes ~ トラブルシュート方法 ~
https://dk521123.hatenablog.com/entry/2025/02/13/233043
screenコマンド
https://dk521123.hatenablog.com/entry/2024/01/03/015517
tmuxコマンド ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/11/13/020744
tmuxコマンド ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2024/01/08/171950
screenコマンド
https://dk521123.hatenablog.com/entry/2024/01/03/015517
watchコマンド
https://dk521123.hatenablog.com/entry/2024/03/24/232633
iptablesコマンド
https://dk521123.hatenablog.com/entry/2025/03/18/003023
tcpdumpコマンド 〜 パケットキャプチャ 〜
https://dk521123.hatenablog.com/entry/2017/07/03/233336
Wireshark ~パケットキャプチャ~
https://dk521123.hatenablog.com/entry/2013/04/18/234813
ネットワーク系コマンド ~ firewall編 ~
https://dk521123.hatenablog.com/entry/2025/03/17/005508