NGINX Ingress ControllerとAWS Application Load Balancerを静的なポート(NodePort)で連携する

目的

今回の目的は、NGINX Ingress Controllerの上にAWS Application Load Balancerを設置したいが、Ingress Controllerに付属している設定がClassic Load Balancerを対象としているため、NodePortで公開しApplication Load Balancerと連携することである。

前提

・kubernetesが作成済みであること
・kubectlコマンドが実行可能であること
・別記事「NGINX Ingress Controllerのインストール」に従いControllerのイントールが完了していること
NGINX Ingress Controllerのインストール

NGINXサービスのノードポートを固定する

デフォルトだと再作成する度にノードポートが変更されてしまうので、固定しておく。

gitから取得した設定ファイルの場所に移動

1cd kubernetes-ingress/deployments/service/

サービス設定ファイルを編集

1vi nodeport.yaml

13行目にポート指定を追記する

apiVersion: v1
kind: Service
metadata:
 name: nginx-ingress
 namespace: nginx-ingress
spec:
 type: NodePort
 ports:
 - port: 80
   targetPort: 80
   protocol: TCP
   name: http
   nodePort: 30987 # ★ここを追加する
  - port: 443
   targetPort: 443
   protocol: TCP
   name: https
  selector:
   app: nginx-ingress

 

変更内容を反映

1kubectl apply -f nodeport.yaml

変更内容を確認

1kubectl get svc -n nginx-ingress

AWSコンソールからApplication Load Balancer(以下ALB)を作成する

【1】ALB用のターゲットグループを作成する

ターゲットグループ名:dev-nginx-ingress

VPCに任意の値を設定し、以外はデフォルト

kubernetesのノードサーバーをターゲットに追加し作成する。

【2】ALB用のセキュリティグループを作成する

セキュリティグループ名:dev-nginx-ingress

インバウンドルール:

 タイプ:HTTP

 ソース:Anywhere-IPv4

VPCに任意の値を設定し、以外はデフォルト

【3】ALBを作成する

Application Load Balancerの「Create」ボタンを選択

ALB名:dev-nginx-ingress

Network mappingに任意のVPCとパブリックサブネットを指定

セキュリティグループに【2】で作成した「dev-nginx-ingress」を設定

Listeners and routingに【1】で作成したターゲットグループを指定する

作成が完了したらAWSのコンソールに表示されているALBのドメインを確認する

今回の場合「dev-nginx-ingress-879757639.ap-northeast-1.elb.amazonaws.com」

ここまででALBの作成は完了

Ingress設定ファイルをALBホストを設定する

編集ファイル:ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: micro-ingress
 namespace: default
 annotations:
  kubernetes.io/ingress.class: nginx
spec:
 rules:
  - host: dev-nginx-ingress-879757639.ap-northeast-1.elb.amazonaws.com
   http:
    paths:
    - path: /
     pathType: Prefix
     backend:
      service:
       name: apache-svc
       port:
        number: 80

 

Ingress設定ファイルをデプロイ

1kubectl apply -f ingress.yaml

ブラウザからALBにアクセスする

http://dev-nginx-ingress-879757639.ap-northeast-1.elb.amazonaws.com

「It works!」が表示されれば成功です。

以ぜひ参考にしてみてください!

Smallitのサービス