以前の職場でEKSを検証する機会があったのですが、このIaC管理って何を使うのが良いんだろうかと話題になったことがあります。
当時は結論にまで至っていなかったのですが、最近実際に触ってみた感想としてはeksctlコマンド + kubectlコマンドでリソースを管理して、それぞれマニフェストファイルで設定を管理するのが良さそうだなと思いました。
ということで今回はEKS用のロードバランサーをkubectlで管理するための方法をメモがてら記事にします。
今回はLoad Balancer Controllerを利用しています。
Load Balancer Controllerとは
「AWS Load Balancer Controller」とはEKSクラスターのロードバランサーを管理するためのコントローラーです。
Application Load Balancerをプロビジョニングすることでk8sのIngress要件を満たすことができ、Network Load Balancerをプロビジョニングすることでk8sのService要件を満たすことができます。
昔は「AWS ALB Ingress Controller」という名称でした。
Load Balancer Controllerがあればyaml形式でIngressの設定を記載してapplyするだけで簡単にロードバランサーが適切な設定で作成されます。
事前準備と目的
Load Balancer Controllerを利用するためにはALBを操作するための権限が必要です。
NodeGroupに必要なIAMポリシーがアタッチされていることを確認してください。
今回は検証用のクラスターと、そのクラスター上で動作するApacheのpodを用意しています。
ALBを作成して、ALB経由で対象のpodにアクセスできるようにすることが目的になります。
Load Balancer Controllerのデプロイ
$ kubectl apply --validate=false -f \ https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
今回はNodeGroupとしてEC2インスタンスでホストするため、cert-managerをデプロイする必要があります。
なおFargateを使う場合はcert-managerに依存しないため上記の設定は不要です。
$ wget https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/v2.3.0/v2_3_0_full.yaml
その後、Load Balancer Controllerをデプロイするためのyamlファイルを取得してください。
$ kubectl apply -f v2_3_0_full.yaml
このyamlファイルをkubectlコマンドでapplyすることでコントローラーのデプロイが完了となります。
コントローラーのpodが起動していることが確認できればOKです。
ALBの作成
今回はIngress用に上記のyamlファイルを用意しました。
$ kubectl create ingress httpd --dry-run -o yaml --rule="/*"=httpd:80
Ingressのyamlファイルをイチから作成する場合は、上記コマンドで雛形が出力できます。
するとALBが自動的に生成されていることがわかります。
このALBnにはyamlファイルに記載したルールに応じて適切なリスナールールが割り当てられます。
ALBのDNSにブラウザからアクセスするとApacheのデフォルト画面であるIt Works!が確認できました。
おわりに
Load Balancer Controllerを利用してWebサーバーをプロビジョニングするpodへアクセスするためのIngressを作成しました。
EKSを利用する場合のAWSリソース管理については、CloudFormationやTerraform、awscli、eksctlなど様々な選択肢がありますが、結論としてはeksctlでAWS側のリソースを作成してkubectlでk8sのリソースを作成する形が最もシンプルで良いと思います。
eksctlコマンドでAWSリソースを作成すれば、利用者はk8sのみに集中して開発できるようになるのでメリットは大きいです。
一方でeksctlで作成したNodeGroupなどはAWSコンソールから確認ができないなど不便な点もあるので、要件に応じて開発手段を選べると良いですね。
コメントを残す