CNIにtigera-operatorを使って複数のCNIを持つKubernetes環境を構築しようとした際に、
kubeadm init が、pods tigera-operatorがエラーで終了し、
namespace:calico-systemのpodsが立ち上がらない現象が発生し、
なかなか他の似たような記事が見当たらなく、数日はまったので誰かの役にたてればと思い、残します。。
時間がない人は、一番↓に結論書いてあります。
kubeadm initまでは、下記記事参考
https://docs.projectcalico.org/getting-started/kubernetes/quickstart。
また、このエラーは恐らくOSやバージョンには非依存です。
が、念のため筆者の環境をのせておきます。
$ uname -a
Linux core5-ub-dk02 5.4.0-52-generic #57~18.04.1-Ubuntu SMP Thu Oct 15 14:04:49 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
kube init後
podsが起動するのを待ってると...
$ kubectl get pods -A
NAMESPACE NAME READY
--------
snip
--------
tigera-operator tigera-operator-cdc4b6478-rlrlz 0/1 CrashLoopBackOff 2 1m
CrashLoopBackOff?とはなんぞ。
失敗して、何度か再起動を繰り返している様子。
podsのログをのぞいてみる。
$ kubectl logs tigera-operator-cdc4b6478-rlrlz -n tigera-operator
....snip....
Dial tcp 10.96 0.1 443: getsockopt: no route to host
ほう。。
これは、何のIPアドレスだっけと思い調べると、
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 24h
えええ
ここは、うまいことNATやらルーティングやらでつながるようにしてくれてるでしょ普通ー。
と思ったので、NATが上手くいってないのかと思い、もう一度作り直した。
以下、色々リセットするためのコマンド。公式には、上から3つぐらいしか書かれていない
sudo kubeadm reset
sudo rm $HOME/.kube/config
sudo rm -rf /etc/cni/net.d/*
sudo sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
sudo systemctl stop kubelet
sudo systemctl stop docker
sudo iptables --flush
sudo iptables -tnat --flush
sudo systemctl start kubelet
sudo systemctl start docker
sudo iptables -P FORWARD ACCEPT
しかし、その後構築し直すも同じく失敗。
んー、なんかホストのネットワーク関連っぽいな。
試しにインターネット直接繋がる環境でやってみると、すんなり完了。
色々さ分見ながら切り分けすと、
# ip a
# ip r
上記コマンドで差分をみてみると、なんと、
Kubernetesホスト上のルーティングテーブルに、デフォルトゲートウェイが設定されていなかったのが問題だった。。
弊社のイントラネット内だと、デフォルトゲートウェイの設定とかいらないので、(外にでたい場合はHTTP-Proxyを指定する)デフォゲ設定してなかったのだ。。
こんなので数日はまるとは。。。
Docker関連の外にでれない環境内での構築ははまりますなあ。