始めに
低コストで使い勝手の良いLightsailですが、設定の簡単さゆえKubernetesの構造にはそぐわない所が幾つかありました。今の記事ではLightsailでKubernetesクラスターを構成する時に躓いた所を整理していきます。
基本設定
インスタンスの選択
おすすめ
Master Node: 20 USD/月 (4GB メモリ, 2コアプロセッサ, 80GB SSD ディスク)
Worker Node: 10 USD/月 (2GB メモリ, 1コアプロセッサ, 60GB SSD ディスク)
公式的にマスターノードは二つ以上のコアを使うように言われているため、20 USD/月のVMをお勧めします。ワーカーノードは理論上1GBのメモリでも行けますが、実際にPODを回すにはメモリが足りないですので月10 USDのVMを使うべきかと思います。
Network
CalicoのIPv4ファイアウォール
ファイアウォールのルール設定に制限があります。従ってCNIでCalicoを使う場合、TCPポート以外にIPIPプロトコルを許可するためにアプリケーション=すべてのプロトコルを解放する必要があリます。ソースIPアドレスに制限をかける事は可能なのでセキュリティのために各ノードのプライベートIPを指定するべきでしょう。
設計および運用上の考慮点
80ポートおよび443ポートでサービスを公開する
使用できない方法
Service Type: Loadbalancer
Lightsailでは対応してないみたいです。
Lightsailのロードバランサー
Lightsailのロードバランサーは80(HTTP)と443(HTTPS)だけをサポートしています。また、ポートフォワーディング機能は使えません。ホストネットワークを使わない限りLightsailのロードバランサーを使ってKubernetesのサービスを80および443ポートで公開することはできません。
使用できる方法
ELBのロードバランサー
ELBのロードバランサーはフォワーディング先のポートを設定することができます1。すなわち、80と443から受けたリクエストをNodePortが提供する30000-32767のサービスに連結できます。VPC Peeringを使えばELBのロードバランサーをLightsailへ繋ぐことができます2。
ソフトウェア型のロードバランサー
NGINX3やHAProxy4などL4及びL7のソフトウェア型のロードバランサーを使う方法です。注意すべきはこのソフトウェア型のロードバランサーをKubernetes上で配布してはいけないということです。おすすめはDockerを使うことです。Dockerでソフトウェアロードバランサーを管理するとLightsailコンテナなど、可用性の高いAWSサービスに簡単に移植できます。
-
Application Load Balancer のターゲットグループ, https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#target-group-routing-configuration ↩
-
[AWS] ALBのIPターゲットをLightsailインスタンスで活用する, https://dev.classmethod.jp/articles/lightsail-with-alb-ip-target ↩
-
HTTP Load Balancing, https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/ ↩
-
【VPS1台でインフラ勉強】HAProxyでロードバランサーを構築, https://blog.mosuke.tech/entry/2014/11/09/171436/ ↩