NGINX Ingress Controllerのインストール

目的

Kubernetesにリリースされているアプリケーションが増えてくると
個別にアクセスポートを割り振るのは効率が悪くなる。

そのため、GINX Ingress Controllerをプロキシサーバーのように設定する。

※内容は以下のイントールガイドに沿ったものになります。
Installation with Manifests

前提

・kubernetesが作成済みであること
・kubectlコマンドが実行可能であること
・gitが使用可能であること

以下はkubectlコマンドが使用可能な端末で行う。

NGINX Ingress Controllerをイントールする

Gitから対象モジュールを取得する。
安定版はv2.1.1※2022/03/24時点

git clone https://github.com/nginxinc/kubernetes-ingress/
cd kubernetes-ingress/deployments
git checkout v2.1.1

 

 

RBACを構成する

Ingressコントローラーの名前空間とサービスアカウントを作成

1kubectl apply -f common/ns-and-sa.yaml

サービスアカウントのクラスターロールとクラスターロールバインディングを作成

1kubectl apply -f rbac/rbac.yaml

共通リソースを作成する

まず、TLS証明書とNGINXのデフォルトサーバーのキーを使用してシークレットを作成

1kubectl apply -f common/default-server-secret.yaml

次に、NGINX構成をカスタマイズするための構成マップを作成

1kubectl apply -f common/nginx-config.yaml

最後に、IngressClassリソースを作成

1kubectl apply -f common/ingress-class.yaml

カスタムリソースを作成する

VirtualServerおよびVirtualServerRoute、TransportServerおよびポリシーリソース のカスタムリソース定義を作成

kubectl apply -f common/crds/k8s.nginx.org_virtualservers.yaml
kubectl apply -f common/crds/k8s.nginx.org_virtualserverroutes.yaml
kubectl apply -f common/crds/k8s.nginx.org_transportservers.yaml
kubectl apply -f common/crds/k8s.nginx.org_policies.yaml

 

 

IngressControllerをデプロイする

NGINXの場合、次を実行する

1kubectl apply -f deployment/nginx-ingress.yaml

IngressControllerポッド用のサービスを作成

1kubectl apply -f service/nodeport.yaml

ここまででIngressControllerのイントールは完了。

動作確認用サンプルアプリを作成

apacheのデプロイ、サービスを作成する

作成ファイル:apache-app-svc.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
 name: apache-app
spec:
 replicas: 2
 selector:
  matchLabels:
   app: apache-app
 template:
  metadata:
   labels:
    app: apache-app
  spec:
   containers:
   - name: apache-app
    image: httpd:latest
    ports:
    - containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
 name: apache-svc
 labels:
spec:
 ports:
 - port: 80
  targetPort: 80
  protocol: TCP
 selector:
  app: apache-app

 

サンプルアプリのデプロイ

1kubectl apply -f apache-app-svc.yaml

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

サンプルアプリにアクセスできるようにIngress設定ファイルを作成する

作成ファイル:ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
 name: micro-ingress
 namespace: default
 annotations:
  kubernetes.io/ingress.class: nginx
spec:
 rules:
  - host: test-smallit.jp
   http:
    paths:
    - path: /
     pathType: Prefix
     backend:
      service:
       name: apache-svc
       port:
        number: 80

 

※host「test-smallit.jp」の部分は任意の値に変更する必要あり

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

1kubectl apply -f ingress.yaml

IngressControllerサービスのノードポートを確認する

1kubectl get svc -n nginx-ingress

※今回は「30987」がノードポートとなる。

サンプルアプリにアクセスする

ブラウザで以下のURLにアクセスする。
http://test-smallit.jp:30987/

「It works!」が表示されれば正常に動作しています。

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

Smallitのサービス