AWS Ingress Controllerのインストール

この記事を書いたチーム:chocochip

目的

Kubernetes(以下K8S)からAWSのApplication Load Balancerを利用するため
aws-load-balancer-controllerのアドオンをインストールします。

今回の記事は動作検証のため、EKSではなくEC2に構築したK8Sにインストールしています。
EKSにインストールする場合は、公式の手順をご確認願います。

検証目的のため、本番運用では参考にしないようにお願いします。

前提

・AWS上にK8Sが構築済みであること
・kubectlコマンドが実行可能であること

EC2ロールにポリシーを追加します。

以下はAWSコンソールにログインして作業を行います。

①EC2のロールにインラインポリシーを追加します。
EC2に設定されているロール:dev-k8s-role※ここは自分のEC2に割り当てられているロールに置き換えてください。

②権限をjsonで指定します。

※必要な権限は以下から参照できます。以下はv2.4.4の権限となっています。
https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.4/docs/install/iam_policy.json

 

③ポリシーを作成します。
ポリシー名:dev-aws-load-balancer-controller

※ELBの部分に警告が表示されますが、無視で問題ありません。
公式の引用

注記
AWS Management Console でポリシーを表示すると、ELB の警告が表示されることがあります。
一部のアクションは ELB v2 にのみ存在するため、これらの警告は無視してもかまいません。ELB v2 の警告は表示されません。

K8Sノードが動作しているVPCサブネットにタグを追加します。

aws-load-balancer-controllerがサブネットを取得するためにタグが必要となります。
最低2つのサブネットにタグをつけて下さい。

K8Sクラスタ名:dev-k8s-cluster※ここは自分のK8Sクラスタ名に置き換えてください。

・privateサブネットの場合
【1】
キー:kubernetes.io/cluster/dev-k8s-cluster※クラスタ名は各自置き換えてください。
値:shared
【2】
キー:kubernetes.io/role/internal-elb
値:1

・publicサブネットの場合
【1】
キー:kubernetes.io/cluster/dev-k8s-cluster※クラスタ名は各自置き換えてください。
値:shared
【2】
キー:kubernetes.io/role/elb
値:※値は空白で構いません

今回はpublicサブネットのみなので、以下を設定しています。

K8SノードのspecにproviderIDを追加します。

以下はkubectlコマンドが実行可能な端末で作業を行います。

①K8SノードのspecにproviderIDを追加します。

今回はEKSを使用していないため、この作業が必要となります。
※EKSを使用している場合は自動で設定されるため不要な作業です。

providerIDを登録するため、事前に以下の情報が必要になります。

【A】:ノード名
【B】:ノードEC2のアベイラビリティゾーン
【C】:ノードEC2のインスタンスID

今回の検証機では以下となります。※ここは各自自分の環境に置き換えてください。
【A】:ip-172-31-33-167.ap-northeast-1.compute.internal
【B】ap-northeast-1d
【C】:i-0d281edb49d6bf046

aws-load-balancer-controllerのインストール

以下はkubectlコマンドが実行可能な端末で作業を行います。
①certmanagerのインストール

certmanagerのyamlファイルをダウンロードします。

certmanagerをK8Sにインストールします。

②aws-load-balancer-controller用crdsのインストール

aws-load-balancer-controller-crds.yamlファイルをkustomizeして作成します。

aws-load-balancer-controller-crdsをK8Sにインストールします。

③aws-load-balancer-controllerのインストール

aws-load-balancer-controllerのyamlファイルをダウンロードします。

※731行目の「your-cluster-name」となっているところを自分のK8Sクラスタ名に変更します。
K8Sクラスタ名:dev-k8s-cluster※ここは自分のK8Sクラスタ名に置き換えてください。

ファイル変更内容:v2_4_4_full.yaml

aws-load-balancer-controllerのSTATUSが「Running」になれば正常です。

サンプルnginxをデプロイします。

①nginxのyamlファイルを作成します。

作成ファイル:nginx.yaml

 

②nginxをデプロイします。

③nginxのデプロイを確認します。

ingress設定のデプロイ

①ingress.yamlファイルを作成します。

annotationsのgroup.nameは複数のポッドを一つのALBに纏めるときに使用します。
纏める必要がない場合、削除しても構いません

作成ファイル:ingress.yaml

 

②ingress.yamlファイルをデプロイします。

ingress設定を確認します。

以下はAWSコンソールで確認します。
①Application Load Balancerが自動で作成されていることを確認します。

②Application Load Balancerのルールにnginxが設定されていることを確認します。

③target groupにK8SノードEC2が追加されていることを確認します。

④セキュリティグループにnginxのポートがアクセス許可されていることを確認します。

今回の場合ポート:31109が対象となります。

⑤ブラウザでApplication Load BalancerのDNSでアクセスします。

nginxのページが開けば正常です。

以上。

Smallitのサービス