# 【参考】Nginx Ingress Controllerの導入

外部のHULFTから、HULFTの独自プロトコルでTCP通信ができるようにするには、通信ポートを変換するロードバランサーが必要です。

ここでは、導入するロードバランサーとして、Nginx Ingress Controllerを導入する手順を説明します。

= 備考 =

本手順は導入例です。

導入するロードバランサーは、お客様の運用に合わせて選択してください。

- ロードバランサーは、HULFT10 for Container Platformの1環境ごとに1台必要です。

- Nginx Ingress Controllerの場合は、1つのプロジェクトに1台のみ導入できます。（2025年2月15日現在）

本手順は、Nginx Ingress Controllerを、HULFT10 for Container Platformとは別のプロジェクトに導入する例です。

Nginx Ingress Controllerを導入する場合の詳細な手順については、Nginxのヘルプを参照してください。

注意

HULFT10 for Container PlatformおよびHULFT10 for Container Services以外の、OS上で動作するHULFTには、以下の制限があります。

- 詳細ホスト情報の「ホスト名」に設定できる文字列の長さは、68バイト以内

このため、Nginx Ingress Controllerに紐づくロードバランサーで、「ホスト名」を68バイト以内に名前解決するように設定が必要です。

### Nginx Ingress Operatorのインストール

Nginx Ingress Controllerを使用するためには、Nginx Ingress Operatorのインストールが必要です。

Nginx Ingress Operatorのインストール手順については、以下のNginx公式ドキュメントを参照してください。

「OLM を使用した OpenShift クラスターへのインストール」（2025年3月1日現在）

Nginx Ingress Operatorをインストールしたら、Nginx Ingress Operatorを起動するために必要なSecurityContextConstraintsリソースを作成する必要があります。

以下のコマンドを実行すると、クラスター上にSecurityContextConstraintsリソースが作成されます。

    oc apply -f https://raw.githubusercontent.com/nginxinc/nginx-ingress-helm-operator/main/resources/scc.yaml

このコマンドでは、以下のNginx公式ドキュメントにあるscc.yamlを使用しています。

「nginx-ingress-helm-operator 」（2025年3月1日現在）

### Nginx Ingress Controllerの作成

Nginx Ingress Controllerを設定するためのyamlファイルにGlobalConfigurationの設定値があります。

このGlobalConfigurationを設定することによって、外部からの通信を受け付けることができるようになります。

以下の手順でGlobalConfigurationを設定します。

1. Nginx Ingress Controllerを導入するプロジェクトに移動します。

   Red Hat OpenShift CLIで、Nginx Ingress Controllerを導入するプロジェクトに移動するには以下のコマンドを実行します。

       oc project <Nginx Ingress Controllerを導入するプロジェクト名>

   設定例

       oc project nginx-ingress

2. ローカルに以下のNginx Ingress Controllerのマニフェストファイルを作成します。

   nginx-ingress-controller.yaml

       apiVersion: charts.nginx.org/v1alpha1
       kind: NginxIngress
       metadata:
         name:  <Nginx Ingress Controllerの任意の名前>
         namespace: <Nginx Ingress Controllerを導入するプロジェクト>
       spec:
         controller:
           globalConfiguration:
             create: true
             spec:
               listeners:
                 - name: <集信ポート用のlistenerの任意の名前>
                   port: 30000
                   protocol: TCP
                 - name: <要求受付ポート用のlistenerの任意の名前>
                   port: 31000
                   protocol: TCP
           service:
             customPorts:
               - name: <集信ポート用のserviceの任意の名前>
                 port: 30000
                 protocol: TCP
               - name: <要求受付ポート用のserviceの任意の名前>
                 port: 31000
                 protocol: TCP
           ingressClass:
             create: true
             name: <IngressClassの任意の名前>
             setAsDefaultIngress: false

   設定例

       apiVersion: charts.nginx.org/v1alpha1
       kind: NginxIngress
       metadata:
         name: nginxingress-sample
         namespace: nginx-ingress
       spec:
         controller:
           globalConfiguration:
             create: true
             spec:
               listeners:
                 - name: hulft-receive-listener-port
                   port: 30000
                   protocol: TCP
                 - name: hulft-observe-listener-port
                   port: 31000
                   protocol: TCP
           service:
             customPorts:
               - name: hulft-receive-service
                 port: 30000
                 protocol: TCP
               - name: hulft-observe-service
                 port: 31000
                 protocol: TCP
           ingressClass:
             create: true
             name: ingressclass-sample
             setAsDefaultIngress: false

3. NginxIngressリソースを作成するには、以下のコマンドを実行します。

       oc apply -f nginx-ingress-controller.yaml

4. NginxIngressリソースでGlobalConfigurationが作成されたことを確認するには、以下のコマンドを実行します。

       oc get GlobalConfiguration <作成したNginx Ingress Controllerの名前>-nginx-ingress-controller

   設定例

       oc get GlobalConfiguration nginxingress-sample-nginx-ingress-controller

   NginxIngressリソースが作成されていると、以下が表示されます。

       NAME                                           AGE
       nginxingress-sample-nginx-ingress-controller   32s

5. Nginx Ingress Controllerが作成されたことを確認するには、以下のコマンドを実行します。

       oc get NginxIngress <作成したNginx Ingress Controllerの名前>

   設定例

       oc get NginxIngress nginxingress-sample

   Nginx Ingress Controllerが作成されていると、以下が表示されます。

       NAME                  AGE
       nginxingress-sample   79s

### TransportServerの作成

以下の手順で、TCP接続された場合の振り分け方法を設定するTransportServerを作成します。

1. HULFT10 for Container Platformを導入したプロジェクトに移動します。

   Red Hat OpenShift CLIで、HULFT10 for Container Platformを導入したプロジェクトに移動するには以下のコマンドを実行します。

       oc project <HULFTを導入するプロジェクトの名前>

   設定例

       oc project hulft-project

2. ローカルに以下のポートを設定するTransportServerのマニフェストファイルを作成します。

   - 集信ポートを設定するTransportServer

   - 要求受付ポートを設定するTransportserver

   集信ポートを設定するTransportServerのマニフェストファイル

   hulft-receive-transport-server.yaml

       apiVersion: k8s.nginx.org/v1
       kind: TransportServer
       metadata:
         name: <集信ポートを設定するTransportServerの任意の名前>
         namespace: <HULFTを導入するプロジェクト>
       spec:
         action:
           pass: <集信ポート用のupstreamの任意の名前>
         listener:
           name: <globalConfigurationに設定した集信ポート用のlistenerの名前>
           protocol: TCP
         upstreams:
           - name: <集信ポート用のupstreamの任意の名前>
             port: 30000
             service: hulft-<Hulftリソースに指定したspec.resourceIdentifier>-transfer

   設定例

       apiVersion: k8s.nginx.org/v1
       kind: TransportServer
       metadata:
         name: hulft-receive-transport-server-sample
         namespace: hulft-project
       spec:
         action:
           pass: hulft-receive-upstream
         listener:
           name: hulft-receive-listener-port
           protocol: TCP
         upstreams:
           - name: hulft-receive-upstream
             port: 30000
             service: hulft-abc-transfer

   要求受付ポートを設定するTransportserverのマニフェストファイル

   hulft-observe-transport-server.yaml

       apiVersion: k8s.nginx.org/v1
       kind: TransportServer
       metadata:
         name: <要求受付ポートを設定するTransportserverの任意の名前>
         namespace: <HULFTを導入するプロジェクト>
       spec:
         action:
           pass: <要求受付ポート用のupstreamの任意の名前>
         listener:
           name: <globalConfigurationに設定した要求受付ポート用のlistenerの名前>
           protocol: TCP
         upstreams:
           - name: <要求受付ポート用のupstreamの任意の名前>
             port: 31000
             service: hulft-<Hulftリソースに指定したspec.resourceIdentifier>-transfer

   設定例

       apiVersion: k8s.nginx.org/v1
       kind: TransportServer
       metadata:
         name: hulft-observe-transport-server-sample
         namespace: hulft-project
       spec:
         action:
           pass: hulft-observe-upstream
         listener:
           name: hulft-observe-listener-port
           protocol: TCP
         upstreams:
           - name: hulft-observe-upstream
             port: 31000
             service: hulft-abc-transfer

3. 各リソースを作成するには、以下のコマンドを実行します。

   集信ポートを設定するTransportServerのリソースを作成

       oc apply -f hulft-receive-transport-server.yaml

   要求受付ポートを設定するTransportserverのリソースを作成

       oc apply -f hulft-observe-transport-server.yaml

4. 各リソースでTransportServerが作成されたことを確認するには、以下のコマンドを実行します。

   集信ポートを設定するTransportServerの確認

       oc get TransportServer <集信ポートを設定するTransportserverの名前>

   設定例

       oc get TransportServer hulft-receive-transport-server-sample

   TransportServerが作成されていると、以下が表示されます。

       NAME                                    STATE   REASON           AGE
       hulft-receive-transport-server-sample   Valid   AddedOrUpdated   24h

   要求受付ポートを設定するTransportServerの確認

       oc get TransportServer <要求受付ポートを設定するTransportserverの名前>

   設定例

       oc get TransportServer hulft-observe-transport-server-sample

   TransportServerが作成されていると、以下が表示されます。

       NAME                                    STATE   REASON           AGE
       hulft-observe-transport-server-sample   Valid   AddedOrUpdated   24h

以上で、Nginx Ingress Controllerを導入できました。

## ロードバランサーの名称（Nginx Ingress Controllerの名称）の確認

HULFTの独自プロトコルでTCP通信をする場合、相手側HULFTの詳細ホスト情報に、ロードバランサーの名称（Nginx Ingress Controllerの名称）を登録する必要があります。

ロードバランサーの名称（Nginx Ingress Controllerの名称）は、OpenShiftコンソール画面にて以下の手順で確認ができます。（2025年2月15日現在）

1. Red Hat OpenShiftを開きます。

2. Red Hat OpenShiftの表示を開発者に切り替えます。

3. プロジェクトをクリックし、Nginx Ingress Controllerを作成したプロジェクト名をクリックします。

   プロジェクト名は、「Nginx Ingress Controllerの作成」の手順1.で指定した値を含む<Nginx Ingress Controllerを導入するプロジェクト名>-nginx-ingress-controllerが該当します。

   Nginx Ingress Controllerを作成したプロジェクトの画面が表示されます。

4. 画面の左側にあるメニューのトポロジーをクリックします。

   作成したNginx Ingress Controllerのアイコンをクリックします。

   アイコンは、「Nginx Ingress Controllerの作成」の手順2.で指定した<Nginx Ingress Controllerの任意の名前>が該当します。

   Nginx Ingress Controllerの詳細内容（Deployment画面）が表示されます。

5. 詳細内容（Deployment画面）のリソースタブをクリックします。

6. リソースタブ内のService内のNginx Ingress Controllerの名称をクリックします。

   Nginx Ingress Controllerの名称は、「Nginx Ingress Controllerの作成」の手順2.で指定した値を含む<Nginx Ingress Controllerの任意の名前>-nginx-ingress-controllerが該当します。

   Serviceの詳細内容が表示されます。

7. Detailsタブ内のService routing>Service address>Locationに表示されている名称が、Nginx Ingress Controllerの名称です。

確認したロードバランサーの名称（Nginx Ingress Controllerの名称）をHULFTではホスト名として使用します。

68バイトを超える場合、68バイト以内に名前解決済みのロードバランサーの名称を使用してください。