なになれ

IT系のことを記録していきます

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を使う必要があります。

以下のEKSクラスタ作成用のyamlを用意しました。

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

Ingressyamlファイルを作成する

Ingressyamlファイルを作成します。
AWS Load Balancer ControllerがIngressのリソースを参照して、その内容に合わせて、ロードバランサーを作成します。

作成するyamlファイルは下記です。

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の画面が表示されるはずです。

f:id:hi1280:20210529180952p:plain

お手軽にGetting Startedできたのではないかと思います。

余談

AWS Load Balancer Controllerのv2.2.0において、必要なIAMポリシーが変更されたようなのですが、 1日前くらいにリリースされたeksctlのv0.52.0にその対応が含まれていて助かりました。
github.com OSSにコミットするITエンジニアによって、こういう仕組みが支えられていることを実感しました。
本当にありがたいです。