地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【k8s】dial tcp 10.96.0.1:443: i/o timeout

あるタイミングから「dial tcp 10.96.0.1:443: i/o timeout」がずっと出力され続けるようになった。意味としては特定のpodからapiサーバへの通信がタイムアウトするよ的な意味。

環境

(⎈ |kubernetes-admin@kubernetes:default) [root@k8s-master manifest]# kubectl get node -o wide
NAME           STATUS   ROLES                  AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION               CONTAINER-RUNTIME
k8s-master     Ready    control-plane,master   7h25m   v1.20.0   192.168.1.105   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64       docker://20.10.0
k8s-worker01   Ready    <none>                 7h24m   v1.20.0   192.168.1.85    <none>        CentOS Linux 7 (Core)   3.10.0-1160.6.1.el7.x86_64   docker://20.10.0

CentOS7.9でDockerが20.10のk8sは1.20.0と言う検証なので全て最新版を入れてる構成。バグ踏んだかな?とか思ってログでググってみると似たようなログが出てる人が多くいた。

それぞれ違うリポジトリに上がっているissueだが原因は同じみたいで「お前のクラスタのネットワークがなんかおかしいぞ」と行った感じ。解決方法としては私の場合は以下の手順でやったら上手く行った。

# systemctl stop kubelet
# systemctl stop docker
# iptables --flush
# iptables -tnat --flush
# systemctl start kubelet
# systemctl start docker

workerで適用されているiptablesの設定がおかしくなっていたのか根本的な原因は不明のまま。(クラスタ再構築して同じような操作をするも再現しない。)

永遠にモヤモヤしたままになりそう。