ubuntu・CentOS・Amazon Linux2でkubernetesクラスターを構築した記事は多くありますが、Amazon Linux2023(FedoraベースOS)では少ない気がしたので、kubernetesクラスターの仕組み理解と共にnode準備編、mater-node編とworker-node編の全3回に分けて構築してみたいと思います。
構成図
環境
- vpc CIDR: 10.0.0.0/21
- os: Amazon Linux2023
- インスタンスタイプ
- master-node: t3.small
- worker-node: t3.medium
- ECSボリューム(master node):
- master node: 10GB
- worker node: 20GB
- kubernetes version: v1.27
- コンテナランタイム: containerd (v1.7.11)
作業内容
- セキュリティグループを2つ作成する
- master-node用のセキュリティグループを作成する
- worker-node用のセキュリティグループを作成する
- master-node用のセキュリティグループにwoker-nodeのネットワークインターフェイスを追加する
- master-nodeを作成する
- worker-nodeを作成する
- 各Nodeのhostを変更する(option)
1. セキュリティグループを2つ作成する
master-nodeとworker-nodeのセキュリティグループは使い回しでも検証なら問題ないのですが、今回はmaster-nodeとworker-nodeでそれぞれで解放すべきPortを理解する為に別々に作成します。
公式ドキュメントには以下のような表があります。
今回は必要最低限なPortのみを解放する方針で以下のように設定します。
- master-node
- 6443 (woker-nodeがkubernetes APIと通信する為に解放します)
- 10250 (woker-nodeにmetrics-serverをdeployした場合などにkubelet APIと通信する為に解放します)
- worker-node
- 10250 (master-nodeがwoker-nodeのkubelet APIと通信する為に解放します)
- 30000-32767 (nodePortとして解放します、ターゲットグループのPortとかになります)
他の表に記載されているポートはmaster-node内での通信となるので特にPortは解放しませんが、インストールするPluginに合して適時解放して下さい。
1-1. master-node用のセキュリティグループを作成する
- kubernetesクラスターを構築するのにSSHをしないといけないので22ポートを解放して下さい。ソースは
0.0.0.0
でもいいですし、接続元が自宅からのみなら自宅のGIPでも問題ないです。
1-2. worker-node用のセキュリティグループを作成する
ここで作成したセキュリティグループはwoker-node共通で使う想定です。
- 1-1で作成したセキュリティグループidをコピーする
- 30000-32767ポートをソースをvpc CIDRにし解放する
- 10250ポートをソースを1-1で作成したセキュリティグループidにし解放する
- 22ポートをソースを1-1で作成したセキュリティグループidにし解放する
※ ソースをセキュリティグループidに設定しているのはセキュリティグループに関連付けられたネットワークインターフェイス単位でトラフィック許可を管理しworker-nodeが増えた場合にも増えたwoker-nodeのipを随時セキュリティグループに追加する手間を省く為になります。
1-3. master-node用のセキュリティグループにwoker-nodeのネットワークインターフェイスを追加する
- 2-1で作成したセキュリティグループidをコピーする
- 10250ポートをソースを2-1で作成したセキュリティグループidにし解放する
- 6443ポートをソースを2-1で作成したセキュリティグループidにし解放する
2. master-nodeを作成する
- 名前とタグ: 任意の名前
- Application and OS Images: Amazon Linux 2023 AMI
- アーキテクチャ: 64ビット(x86)
- インスタンスタイプ: t3.small
- キーペア: 任意のキーペア
- ネットワーク
- VPC: 任意のVPC
- サブネット: 任意のpublic subnet
- パブリック IP の自動割り当て: 有効化
- ファイアウォール (セキュリティグループ): ファイアウォール (セキュリティグループ)を選択し、1-1で作成したセキュリティグループを選択する
- ストレージを設定: 10GB
3. worker-nodeを作成する
アプリケーションを稼働させる想定で、インスタンスタイプとストレージを設定をmaster-nodeより少し上げます。
- 名前とタグ: 任意の名前
- Application and OS Images: Amazon Linux 2023 AMI
- アーキテクチャ: 64ビット(x86)
- インスタンスタイプ: t3.medium
- キーペア: 任意のキーペア
- ネットワーク
- VPC: 任意のVPC
- サブネット: 任意のprivate subnet
- パブリック IP の自動割り当て: 無効化
- ファイアウォール (セキュリティグループ): ファイアウォール (セキュリティグループ)を選択し、2-1で作成したセキュリティグループを選択する
- ストレージを設定: 20GB
4. 各Nodeのhostを変更する(option)
EC2の場合hostnameはip-xxx-xxx-xxx-xxx.ap-northeast-1.compute.internal
みたいになっており、kubernetesクラスター作成要件のユニークなhostnameは満たしていますが、変更したい方向けに変更方法も記載します。※ 変更しなくても問題はありません
- hostnameの変更
$ hostnamectl set-hostname master-node
- hostsへ自ホストを追加
$ vim /etc/hosts
#vim editerが開いたら
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
#以下追加
<private_ip> master-node
- os再起動
※ コンソールからでも大丈夫です。
$ shutdown -r now
※ woker-nodeのhostnameを変更したら忘れずにmster-nodeの/etc/hosts
に追加をして下さい。
$ vim /etc/hosts
#vim editerが開いたら
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost6 localhost6.localdomain6
#以下追加
<worker_node_private_ip> <worker_node_hostname>
まとめ
今回はnode準備編として、master-nodeとworker-nodeのインスタンスを構築しました。
本番運用も想定しセキュリティー的に必要最低限のポートを判断する過程でコンポーネント間の通信理解が深まりました。
次回から今回構築したnodeにkubernetesクラスターを構築していきたいと思います。