📑
kube-proxy の iptables って node ごとに差が出るのか
iptables
に差が出るのか、見てみる。
今回は --enable-addons monitoring
option 付きの AKS なので余計なのがあるかもしれない。
kube-dns
が 10.0.0.10 で動いてて、これを追いかけてみる。
$ kubectl get svc kube-dns -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kube-dns ClusterIP 10.0.0.10 <none> 53/UDP,53/TCP 104m
coredns
は aks-nodepool1-10688416-vmss000001 と aks-nodepool1-10688416-vmss000002 で動いている。
aks-nodepool1-10688416-vmss000000 では動いてない。
$ kubectl get po -l k8s-app=kube-dns -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
coredns-69c47794-4kplx 1/1 Running 0 93m 10.244.1.3 aks-nodepool1-10688416-vmss000002 <none> <none>
coredns-69c47794-mgr58 1/1 Running 0 96m 10.244.2.6 aks-nodepool1-10688416-vmss000001 <none> <none>
kube-proxy
の node との関連付けはこちら。
$ kubectl get po -l component=kube-proxy -n kube-system -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-proxy-kngbq 1/1 Running 0 101m 10.224.0.6 aks-nodepool1-10688416-vmss000002 <none> <none>
kube-proxy-n4w2k 1/1 Running 0 101m 10.224.0.5 aks-nodepool1-10688416-vmss000001 <none> <none>
kube-proxy-pj49z 1/1 Running 0 101m 10.224.0.4 aks-nodepool1-10688416-vmss000000 <none> <none>
aks-nodepool1-10688416-vmss000001 と aks-nodepool1-10688416-vmss000002 で動いてるのが kube-proxy-n4w2k と kube-proxy-kngbq。
Cluter IP は iptables
の KUBE-SERVICES
chain で捌かれてるのでそれだけとりあえず。
$ kubectl exec kube-proxy-n4w2k -n kube-system -- iptables -nL KUBE-SERVICES -t nat --line-numbers
Chain KUBE-SERVICES (2 references)
num target prot opt source destination
1 KUBE-SVC-NPX46M4PTMTKRN6Y tcp -- 0.0.0.0/0 10.0.0.1 /* default/kubernetes:https cluster IP */ tcp dpt:443
2 KUBE-SVC-ERIFXISQEP7F7OF4 tcp -- 0.0.0.0/0 10.0.0.10 /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53
3 KUBE-SVC-TCOU7JCQXEZGVUNU udp -- 0.0.0.0/0 10.0.0.10 /* kube-system/kube-dns:dns cluster IP */ udp dpt:53
4 KUBE-SVC-QMWWTXBG7KFJQKLO tcp -- 0.0.0.0/0 10.0.60.35 /* kube-system/metrics-server cluster IP */ tcp dpt:443
5 KUBE-SVC-WT3SFWJ44Q74XUPR tcp -- 0.0.0.0/0 10.0.36.18 /* kube-system/healthmodel-replicaset-service cluster IP */ tcp dpt:25227
6 KUBE-NODEPORTS all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL
$ kubectl exec kube-proxy-kngbq -n kube-system -- iptables -nL KUBE-SERVICES -t nat --line-numbers
Chain KUBE-SERVICES (2 references)
num target prot opt source destination
1 KUBE-SVC-QMWWTXBG7KFJQKLO tcp -- 0.0.0.0/0 10.0.60.35 /* kube-system/metrics-server cluster IP */ tcp dpt:443
2 KUBE-SVC-WT3SFWJ44Q74XUPR tcp -- 0.0.0.0/0 10.0.36.18 /* kube-system/healthmodel-replicaset-service cluster IP */ tcp dpt:25227
3 KUBE-SVC-NPX46M4PTMTKRN6Y tcp -- 0.0.0.0/0 10.0.0.1 /* default/kubernetes:https cluster IP */ tcp dpt:443
4 KUBE-SVC-TCOU7JCQXEZGVUNU udp -- 0.0.0.0/0 10.0.0.10 /* kube-system/kube-dns:dns cluster IP */ udp dpt:53
5 KUBE-SVC-ERIFXISQEP7F7OF4 tcp -- 0.0.0.0/0 10.0.0.10 /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53
6 KUBE-NODEPORTS all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL
んで、aks-nodepool1-10688416-vmss000000 のが kube-proxy-pj49z。
$ kubectl exec kube-proxy-pj49z -n kube-system -- iptables -nL KUBE-SERVICES -t nat --line-numbers
Chain KUBE-SERVICES (2 references)
num target prot opt source destination
1 KUBE-SVC-ERIFXISQEP7F7OF4 tcp -- 0.0.0.0/0 10.0.0.10 /* kube-system/kube-dns:dns-tcp cluster IP */ tcp dpt:53
2 KUBE-SVC-QMWWTXBG7KFJQKLO tcp -- 0.0.0.0/0 10.0.60.35 /* kube-system/metrics-server cluster IP */ tcp dpt:443
3 KUBE-SVC-WT3SFWJ44Q74XUPR tcp -- 0.0.0.0/0 10.0.36.18 /* kube-system/healthmodel-replicaset-service cluster IP */ tcp dpt:25227
4 KUBE-SVC-NPX46M4PTMTKRN6Y tcp -- 0.0.0.0/0 10.0.0.1 /* default/kubernetes:https cluster IP */ tcp dpt:443
5 KUBE-SVC-TCOU7JCQXEZGVUNU udp -- 0.0.0.0/0 10.0.0.10 /* kube-system/kube-dns:dns cluster IP */ udp dpt:53
6 KUBE-NODEPORTS all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service nodeports; NOTE: this must be the last rule in this chain */ ADDRTYPE match dst-type LOCAL
微妙に順番が違うのが気になるけど大した差は生まないと思うのでまぁいいかなとは思う。
それから、そりゃそうか、って話なんだけど Cluster IP のがそれぞれの iptables
に登録されてるんだな、と。
もうちょっと効率よくできてもいいかなとは思うけど nodes / pods がいる subnet から IP アドレス使わずに実装しようと思うとこうなるか。
Discussion