概要
プロキシ環境下でKubernetesクラスタを構築した際に、プロキシ関連で詰まったことがあったのでメモとして残しておきます。ただ、構築してから時間がたっているため発生したエラー等は残せていません。また、Kubernetesクラスタの構築についても詰まったところのみ記事にしています。構築してた当時は全然記事が無かったので解決に時間がかかりましたが、今はそこそこ記事があるのでトラブルシュートしやすいかもしれません。
環境
- 外部との通信でプロキシを経由する必要がある
- クラスタ構築にはkubeadm,kubelet、クラスタ内のノード間通信にはcalicoを使う
- マスター1台,ワーカー2台(全てプロキシ下に配置)
- Kubernetes以外のこと(apt,wget等)のプロキシ設定については既に済ませている
Kubernetesクラスタの構築
通常通りkubeadm,kubelet,kubectl,containerd等をインストールする。
(省略しますが後日追記か別に記事を書くかもしれません)
詰まったこと
- containerd のプロキシ設定
- ノード間の通信設定
最後の方に設定をまとめて書いてます。
containerd のプロキシ設定
dockerhubからコンテナイメージを取得できませんでした。エラーを確認したところプロキシっぽかったのでcontainerdにプロキシの設定を追加したところこのエラーは解決しました。
ノード間の通信設定
プロキシ環境下のコンピュータでは外部との通信のために環境変数等でプロキシを用いるように設定すると思います。通常は同じネットワーク下であればプロキシを使わずに通信を行いますが、Kubernetesクラスタでは10.96.0.0/12のようなIPアドレスで通信を行うためプロキシを経由して通信を行おうとします。そのため、ワーカーノードをクラスタへ追加することはできますがノード間通信に失敗するためpodが動きません。これは、containerdの設定でクラスタ内の通信にプロキシを使わないように設定すれば解決出来ました。
設定内容
設定ファイルは存在しないかったので作成したと記憶しています。
[Service]
Environment="NO_PROXY=10.96.0.0/12"
Environment="HTTP_PROXY={proxy}:{port}"
必要だったか不明の設定
いろいろ調べていた際に、calicoを使うためにはkubeletのcniオプションを有効にする必要があるらしいので有効にしました。
(kubeadm-flags.envに追記)
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock --pod-infra-container-image=k8s.gcr.io/pause:3.6 --network-plugin=cni"
参考URLとその他
- kubeadmを使ったKubernetesクラスタの構築
- ノード間の通信にプロキシを使用しない設定
- kubeletの設定
- トークンの有効期限が切れた場合
- もっとわかりやすそうな記事