問題
なんかMySQL構築して、サービスリソース作ってCulsterIP振ってもアクセスできない問題が発生した
設定何も間違ってないんだが???と思ってふとnodeのイベントログ見てると「CIDRNotAvailable」の文字が沢山。。。
❯ kubectl get events LAST SEEN TYPE REASON OBJECT MESSAGE 71s Normal CIDRNotAvailable node/ubuntu01 Node ubuntu01 status is now: CIDRNotAvailable 3m17s Normal CIDRNotAvailable node/ubuntu02 Node ubuntu02 status is now: CIDRNotAvailable 3m3s Normal CIDRNotAvailable node/ubuntu03 Node ubuntu03 status is now: CIDRNotAvailable
ServiceのIP範囲とPodのIP範囲は重複してはいけない
これが原因
まずはクラスタのIP範囲を確認
❯ kubectl cluster-info dump | grep -m 1 service-cluster-ip-range "--service-cluster-ip-range=10.96.0.0/12"
そしてpodのIP範囲を確認。イキってデフォルトの設定変えたのが良くなかった。。。
❯ kubectl cluster-info dump | grep -m 1 cluster-cidr "--cluster-cidr=10.100.0.0/16",
対応
最初はマスターノードの /etc/kubernetes/manifests/kube-apiserver.yaml のargs弄ってCIDR範囲被らないようにしたんだけど 結果的にクラスタが壊れてしまった。。。ので再インストールしてしまった
デフォルトのIP範囲は?
これが面倒くさいことに公式ドキュメントで明記されていない
goのパッケージのドキュメントに記載されてた。ここをソースと言っていいと思う
v1beta3 package - k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3 - Go Packages
それを見ると、
networking: serviceSubnet: "10.96.0.0/16" podSubnet: "10.244.0.0/24" dnsDomain: "cluster.local"
てかプリフライトの段階でエラーになってくれよkubeadmさん