KubernetesのLiveness Probeに使われているHTTP Getについて

kube-dnsがErrorを繰り返していたので、動作をまとめる。

問題はこのPod。

ubuntu@k8s-master:~$ kubectl get pod -o wide --all-namespaces
NAMESPACE     NAME                                 READY     STATUS    RESTARTS   AGE       IP              NODE
kube-system   kube-dns-f64d97d84-8lmhx             3/3       Running   0          44m       172.16.0.35     k8s-node3

describeしてみると、LivenessとReadinessにhttp-getを使っているんですよ。

    Liveness:   http-get http://:10054/healthcheck/kubedns delay=60s timeout=5s period=10s #success=1 #failure=5
    Readiness:  http-get http://:8081/readiness delay=3s timeout=5s period=10s #success=1 #failure=3

今回だとk8s-node3上で動作しているので、k8s-node3のホストネットワークからPodのIP宛にProbeしてるんですね。
Calicoとか使っているとip routeするとわかるのですが、Pod宛IPはコンテナインタフェースに向いてます。
そのため、この通信のためにノードからでることはない。図は以下の通り。

Caclico network

しかし、CNIによっては管理用ネットワークとPodネットワークが完全に分離されている場合がある。
その場合には、Probeが毎度管理用ネットワークからPodネットワークに対して通信が発生し、2つのネットワーク間でルーティングが必要になる。
図は以下の通り。
Cni network

ip tablesを使おうが、そもそも分離されたネットワークなのでProbeがノード外に出る必要がある。
その上、トップにあるルータに2つのネットワークでルーティングが必要。
ラボとかは問題ないけど、商用に使うときはセキュリティとかどうするんやろうか。

そもそもhttpを使わないという選択肢もあるんだろうけど、特定のPodだけ、ホストのポートにBindしてlocalhost宛にProbeできないんかな?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください