AWS Load Balancer Controllerの省力Getting Started
ALB Ingress ControllerからAWS Load Balancer Controllerに変わってから、Getting Startedしてなかったので、試してみました。
公式ドキュメントのExamplesを試すでも良かったのですが、手数が多そうだったので、自分なりに手順を作りました。
kubernetes-sigs.github.io
手順で考慮したこと
- Ingressのv1を使う
- Examplesはv1beta1だった
- ノードにIAMポリシーを付与する
- IAM Roles for Service Accountsを使わない
- 本番ユースではオススメしない
それでは、やっていきます。
EKSクラスタを作成する
eksctlを使って作成します。
eksctlのバージョンはv0.52.0を使う必要があります。
cluster.yaml
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: cluster-1 region: ap-northeast-1 nodeGroups: - name: ng-1 instanceType: t3.small desiredCapacity: 1 iam: withAddonPolicies: albIngress: true
iam.withAddonPolicies.albIngressでAWS Load Balancer Controllerを動かすためのIAMポリシーを設定できます。お手軽です。
EKSクラスタを作成します。
$ eksctl create cluster -f cluster.yaml
AWS Load Balancer Controllerをインストールする
このあたりは公式ドキュメントそのままです。
$ kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.0.2/cert-manager.yaml $ wget https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/v2_2_0_full.yaml $ sed -i "" "s/your-cluster-name/cluster-1/" v2_2_0_full.yaml $ kubectl apply -f v2_2_0_full.yaml
インストールするためのyamlファイルにクラスタ名を入力する必要があるので、sedコマンドで置換しています。
あとは、yamlファイルをapplyすれば、インストール完了です。お手軽です。
サービスをデプロイする
今回はnginxを対象のサービスとします。
以下のyamlファイルでnginxをデプロイします。
nginx.yaml
apiVersion: v1 kind: Pod metadata: name: nginx labels: app: nginx spec: containers: - image: nginx:latest name: nginx restartPolicy: Always --- apiVersion: v1 kind: Service metadata: name: nginx spec: ports: - name: 80-80 port: 80 protocol: TCP targetPort: 80 selector: app: nginx type: NodePort
yamlファイルをapplyします。
$ kubectl apply -f nginx.yaml
Ingressのyamlファイルを作成する
Ingressのyamlファイルを作成します。
AWS Load Balancer ControllerがIngressのリソースを参照して、その内容に合わせて、ロードバランサーを作成します。
作成するyamlファイルは下記です。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: nginx annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: nginx port: number: 80
nginxのserviceに向けて、向き先を設定しています。
annotationsの値にて、 AWS Load Balancer Controller向けの設定を行なっています。
ここでは、インターネットからの接続を許可する設定をしています。
yamlファイルをapplyします。
$ kubectl apply -f ingress.yaml
結果確認
しばらくすると、ロードバランサーが作られるはずです。
また、ロードバランサーのDNS名にブラウザからアクセスすると、nginxの画面が表示されるはずです。
お手軽にGetting Startedできたのではないかと思います。
余談
AWS Load Balancer Controllerのv2.2.0において、必要なIAMポリシーが変更されたようなのですが、
1日前くらいにリリースされたeksctlのv0.52.0にその対応が含まれていて助かりました。
github.com
OSSにコミットするITエンジニアによって、こういう仕組みが支えられていることを実感しました。
本当にありがたいです。