NGINX

この項では、Oracle SOA Suiteドメイン・クラスタをロード・バランシングするように、イングレスベースのNGINXロード・バランサをインストールおよび構成する方法について説明します。アプリケーションURLの非SSL、SSL終端およびエンドツーエンドSSLアクセス用にNGINXを構成できます。ただし、セキュア・ドメインの場合、エンドツーエンドSSL構成のみが適用可能です。

次のステップに従って、NGINXをKubernetesクラスタ内のOracle SOA Suiteドメインのロード・バランサとして設定します:

  1. 前提条件は、公式のインストール・ドキュメントを参照してください。

  2. 非SSLおよびSSL終端構成用のNGINXロード・バランサのインストール

  3. SSLアクセス用のシークレットの生成

  4. エンドツーエンドSSL構成用のNGINXロード・バランサのインストール

  5. イングレスを管理するためのNGINXの構成

  6. ドメイン・アプリケーションURLアクセスの検証

  7. NGINXイングレスのアンインストール

  8. NGINXのアンインストール

リポジトリ情報を取得するには、次のHelmコマンドを入力します:

$ helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
  $ helm repo update

非SSLおよびSSL終端構成用のNGINXロード・バランサのインストール

ドメイン・ネームスペースでHelmを使用して、ingress-nginxコントローラをデプロイします:

 $ helm install nginx-ingress -n soans \
        --set controller.service.type=NodePort \
        --set controller.admissionWebhooks.enabled=false \
        ingress-nginx/ingress-nginx

出力の例を次に示します:

NAME: nginx-ingress
  LAST DEPLOYED: Thu May  5 13:27:30 2022
  NAMESPACE: soans
  STATUS: deployed
  REVISION: 1
  TEST SUITE: None
  NOTES:
  The ingress-nginx controller has been installed.
  Get the application URL by running these commands:
  export HTTP_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath="{.spec.ports[0].nodePort}" nginx-ingress-ingress-nginx-controller)
  export HTTPS_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath="{.spec.ports[1].nodePort}" nginx-ingress-ingress-nginx-controller)
  export NODE_IP=$(kubectl --namespace soans get nodes -o jsonpath="{.items[0].status.addresses[1].address}")

  echo "Visit http://$NODE_IP:$HTTP_NODE_PORT to access your application via HTTP."
  echo "Visit https://$NODE_IP:$HTTPS_NODE_PORT to access your application via HTTPS."

  An example ingress that makes use of the controller:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: example
      namespace: foo
    spec:
      ingressClassName: nginx
      rules:
      - host: www.example.com
        http:
        paths:
          - pathType: Prefix
            backend:
              service:
                name: exampleService
                port:
                  number: 80
          path: /
   # This section is only required if TLS is to be enabled for the ingress
   tls:
    - hosts:
        - www.example.com
      secretName: example-tls

   If TLS is enabled for the ingress, a secret containing the certificate and key must also be provided:

  apiVersion: v1
  kind: Secret
  metadata:
    name: example-tls
    namespace: foo
  data:
   tls.crt: <base64 encoded cert>
   tls.key: <base64 encoded key>
  type: kubernetes.io/tls

SSLアクセス用のシークレットの生成

Oracle SOA Suiteアプリケーションへのセキュア・アクセス(SSLおよびE2ESSL)の場合は、証明書を作成し、シークレットを生成します:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls1.key -out /tmp/tls1.crt -subj "/CN=domain1.org"
$ kubectl -n soans create secret tls soainfra-tls-cert --key /tmp/tls1.key --cert /tmp/tls1.crt

ノート:

CNの値は、このイングレスをデプロイするホストであり、シークレット名は<domainUID>-tls-certである必要があります。

エンドツーエンドSSL構成用のNGINXロード・バランサのインストール

  1. ドメイン・ネームスペースでHelmを使用して、ingress-nginxコントローラをデプロイします:
     $ helm install nginx-ingress -n soans \
           --set controller.extraArgs.default-ssl-certificate=soans/soainfra-tls-cert \
           --set controller.service.type=NodePort \
           --set controller.admissionWebhooks.enabled=false \
           --set controller.extraArgs.enable-ssl-passthrough=true  \
            ingress-nginx/ingress-nginx
    

    サンプル出力:

        NAME: nginx-ingress
        LAST DEPLOYED: Thu May  5 12:21:50 2022
        NAMESPACE: soans
        STATUS: deployed
        REVISION: 1
        TEST SUITE: None
        NOTES:
        The ingress-nginx controller has been installed.
        Get the application URL by running these commands:
        export HTTP_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath="{.spec.ports[0].nodePort}" nginx-ingress-ingress-nginx-controller)
        export HTTPS_NODE_PORT=$(kubectl --namespace soans get services -o jsonpath="{.spec.ports[1].nodePort}" nginx-ingress-ingress-nginx-controller)
        export NODE_IP=$(kubectl --namespace soans get nodes -o jsonpath="{.items[0].status.addresses[1].address}")
    
        echo "Visit http://$NODE_IP:$HTTP_NODE_PORT to access your application via HTTP."
        echo "Visit https://$NODE_IP:$HTTPS_NODE_PORT to access your application via HTTPS."
    
        An example Ingress that makes use of the controller:
    
          apiVersion: networking.k8s.io/v1
          kind: Ingress
          metadata:
            name: example
            namespace: foo
          spec:
            ingressClassName: nginx
            rules:
            - host: www.example.com
              http:
              paths:
                - pathType: Prefix
                  backend:
                    service:
                      name: exampleService
                      port:
                        number: 80
                path: /
         # This section is only required if TLS is to be enabled for the Ingress
         tls:
          - hosts:
              - www.example.com
            secretName: example-tls
    
         If TLS is enabled for the Ingress, a Secret containing the certificate and key must also be provided:
        apiVersion: v1
        kind: Secret
        metadata:
          name: example-tls
          namespace: foo
        data:
         tls.crt: <base64 encoded cert>
         tls.key: <base64 encoded key>
        type: kubernetes.io/tls
    
  2. デプロイされたイングレス・コントローラのステータスを確認します:
    kubectl --namespace soans get services | grep ingress-nginx-controller
    

    サンプル出力:

     nginx-ingress-ingress-nginx-controller   NodePort    10.106.186.235   <none>        80:32125/TCP,443:31376/TCP   19m
    

イングレスを管理するためのNGINXの構成

  1. Oracle SOA Suiteドメイン・アプリケーションURLにアクセスするための適切なLOADBALANCER_HOSTNAMEを選択します。

    export LOADBALANCER_HOSTNAME=<LOADBALANCER_HOSTNAME>
    

    たとえば、マスター・ホスト名がLOADBALANCER_HOSTNAMEのマスター・ノード端末からコマンドを実行する場合:

    export LOADBALANCER_HOSTNAME=$(hostname -f)
    
  2. サンプルのHelmチャートを使用して、ドメイン・ネームスペースにドメインのイングレスを作成します。パスベースのルーティングがイングレスに使用されます。デフォルト構成のサンプル値は、ファイル${WORKDIR}/charts/ingress-per-domain/values.yamlに示されています。デフォルトでは、typeはTRAEFIK、sslTypeはNONSSL、wlsDomain.secureEnabledはfalse、domainTypeはsoaです。これらの値をオーバーライドするには、コマンドラインを介して値を渡すか、サンプル・ファイルvalues.yamlで編集します。必要に応じて、イングレスYAMLファイルを更新して、アクセスする必要があるドメイン・アプリケーションURLに基づいて(spec.rules.host.http.pathsセクションに)より多くのパス・ルールを定義できます。${WORKDIR}/charts/ingress-per-domain/templates/nginx-ingress.yamlにあるNGINXロード・バランサ用のテンプレートYAMLファイルを更新します。

    ノート:

    すべての構成パラメータについては、ここを参照してください。
     $ cd ${WORKDIR}
     $ helm install soa-nginx-ingress  charts/ingress-per-domain \
         --namespace soans \
         --values charts/ingress-per-domain/values.yaml \
         --set "nginx.hostname=${LOADBALANCER_HOSTNAME}" \
         --set type=NGINX
    

    サンプル出力:

    NAME: soa-nginx-ingress
    LAST DEPLOYED: Fri Jul 24 09:34:03 2020
    NAMESPACE: soans
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    
  3. SSL終端構成にHelmを使用してingress-per-domainをインストールします:
     $ cd ${WORKDIR}
     $ helm install soa-nginx-ingress  charts/ingress-per-domain \
         --namespace soans \
         --values charts/ingress-per-domain/values.yaml \
         --set "nginx.hostname=${LOADBALANCER_HOSTNAME}" \
         --set type=NGINX --set sslType=SSL
    
  4. 非セキュア・ドメインのE2ESSL構成にHelmを使用してingress-per-domainをインストールします。

    ノート:

    E2ESSL構成を使用するには、sslEnabledtrueに設定されたOracle SOA Suiteドメインを作成しておく必要があります。Oracle SOA Suiteドメインの作成を参照してください。
     $ cd ${WORKDIR}
     $ helm install soa-nginx-ingress  charts/ingress-per-domain \
         --namespace soans \
         --values charts/ingress-per-domain/values.yaml \
         --set type=NGINX --set sslType=E2ESSL
    

    サンプル出力:

     NAME: soa-nginx-ingress
     LAST DEPLOYED: Fri Jul 24 09:34:03 2020
     NAMESPACE: soans
     STATUS: deployed
     REVISION: 1
     TEST SUITE: None
    
  5. セキュア・ドメインのE2ESSL構成にHelmを使用してingress-per-domainをインストールします。

    ノート:

    セキュア・ドメインにE2ESSL構成を使用するには、sslEnabledがtrueに設定され、secureEnabledがtrueに設定されたOracle SOA Suiteドメインを作成しておく必要があります。Oracle SOA Suiteドメインの作成を参照してください。
    $ cd ${WORKDIR}    $ helm install soa-nginx-ingress  charts/ingress-per-domain \
                    --namespace soans \
                    --values charts/ingress-per-domain/values.yaml \
                    --set type=NGINX --set sslType=E2ESSL --set
              wlsDomain.secureEnabled=true
  6. Oracle SOA SuiteアプリケーションへのNONSSLアクセスの場合は、イングレスによってサービスの詳細を取得します:
    kubectl describe ingress soainfra-nginx -n soans
    

    前述のデプロイ済イングレスでサポートされるサービスのサンプル出力:

    Name:             soainfra-nginx
    Namespace:        soans
    Address:          100.111.150.225
    Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
    Rules:
    Host                                                   Path  Backends
    ----                                                   ----  --------
    domain1.org
                                                         
                                                         /em                        soainfra-adminserver:7001 (10.244.0.45:7001)
                                                         /weblogic/ready            soainfra-adminserver:7001 (10.244.0.45:7001)
                                                         /                          soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
                                                         /soa-infra                 soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
                                                         /soa/composer              soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
                                                         /integration/worklistapp   soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
    Annotations:                                             <none>
    Events:
    Type    Reason  Age    From                      Message
    ----    ------  ----   ----                      -------
    Normal  CREATE  2m32s  nginx-ingress-controller  Ingress soans/soainfra-nginx
    Normal  UPDATE  94s    nginx-ingress-controller  Ingress soans/soainfra-nginx
    
  7. Oracle SOA SuiteアプリケーションへのSSLアクセスの場合は、前述のデプロイ済イングレスによってサービスの詳細を取得します:
     $ kubectl describe ingress soainfra-nginx -n soans
    

    前述のデプロイ済イングレスでサポートされるサービスのサンプル出力:

     Name:             soainfra-nginx
     Namespace:        soans
     Address:          100.111.150.225
     Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
     TLS:
       soainfra-tls-cert terminates domain1.org
     Rules:
        Host                                                   Path  Backends
        ----                                                   ----  --------
         domain1.org
                                                          
                                                          /em                        soainfra-adminserver:7001 (10.244.0.45:7001)
                                                          /weblogic/ready            soainfra-adminserver:7001 (10.244.0.45:7001)
                                                          /                          soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
                                                          /soa-infra                 soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
                                                          /soa/composer              soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
                                                          /integration/worklistapp   soainfra-cluster-soa-cluster:7003 (10.244.0.46:8011,10.244.0.47:7003)
     Annotations:                                             kubernetes.io/ingress.class: nginx
                                                              nginx.ingress.kubernetes.io/configuration-snippet:
                                                              more_set_input_headers "X-Forwarded-Proto: https";
                                                              more_set_input_headers "WL-Proxy-SSL: true";
                                                              nginx.ingress.kubernetes.io/ingress.allow-http: false
     Events:
       Type    Reason  Age    From                      Message
       ----    ------  ----   ----                      -------
       Normal  CREATE  3m47s  nginx-ingress-controller  Ingress soans/soainfra-nginx
       Normal  UPDATE  3m25s  nginx-ingress-controller  Ingress soans/soainfra-nginx
    
  8. Oracle SOA SuiteアプリケーションへのE2ESSLアクセスの場合は、前述のデプロイ済イングレスによってサービスの詳細を取得します:
     $  kubectl describe ingress  soainfra-nginx-e2essl -n soans
    

    前述のデプロイ済イングレスでサポートされるサービスのサンプル出力:

     Name:             soainfra-nginx-e2essl-admin
     Namespace:        soans
     Address:
     Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
     TLS:
      soainfra-tls-cert terminates admin.org
     Rules:
       Host        Path  Backends
       ----        ----  --------
       admin.org
                           soainfra-adminserver-nginx-ssl:7002 (10.244.0.247:7002)
      Annotations:  kubernetes.io/ingress.class: nginx
                    meta.helm.sh/release-name: soa-nginx-ingress
                    meta.helm.sh/release-namespace: soans
                    nginx.ingress.kubernetes.io/ssl-passthrough: true
     Events:
     Type    Reason  Age   From                      Message
     ----    ------  ----  ----                      -------
     Normal  Sync    4s    nginx-ingress-controller  Scheduled for sync
    
     Name:             soainfra-nginx-e2essl-soa
     Namespace:        soans
     Address:
     Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
     TLS:
      soainfra-tls-cert terminates soa.org
     Rules:
      Host        Path  Backends
      ----        ----  --------
      soa.org
                     /   soainfra-cluster-soa-cluster:7004 (10.244.0.249:7004)
     Annotations:  kubernetes.io/ingress.class: nginx
                   meta.helm.sh/release-name: soa-nginx-ingress
                   meta.helm.sh/release-namespace: soans
                   nginx.ingress.kubernetes.io/ssl-passthrough: true
    Events:
       Type    Reason  Age   From                      Message
      ----    ------  ----  ----                      -------
     Normal  Sync    4s    nginx-ingress-controller  Scheduled for sync
    

ドメイン・アプリケーションURLアクセスの検証

NONSSL構成

  1. コマンドを使用して、NGINXのLOADBALANCER_NON_SSLPORT NodePortを取得します:

    LOADBALANCER_NON_SSLPORT=$(kubectl --namespace soans  get services -o jsonpath="{.spec.ports[0].nodePort}" nginx-ingress-ingress-nginx-controller)
    echo ${LOADBALANCER_NON_SSLPORT}
    
  2. Oracle SOA Suiteドメイン・アプリケーションのURLがLOADBALANCER_NON_SSLPORTを介してアクセス可能であることを確認します:
    http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_NON_SSLPORT}/weblogic/ready
    http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_NON_SSLPORT}/em
    http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_NON_SSLPORT}/soa-infra
    http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_NON_SSLPORT}/soa/composer
    http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_NON_SSLPORT}/integration/worklistapp
    

SSL構成

  1. コマンドを使用して、NGINXのLOADBALANCER_SSLPORT NodePortを取得します:

    LOADBALANCER_SSLPORT=$(kubectl --namespace soans  get services -o jsonpath="{.spec.ports[1].nodePort}" nginx-ingress-ingress-nginx-controller)
    echo ${LOADBALANCER_SSLPORT}
    
  2. Oracle SOA Suiteドメイン・アプリケーションのURLがLOADBALANCER_SSLPORTを介してアクセス可能であることを確認します:

    https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_SSLPORT}/weblogic/ready
    https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_SSLPORT}/em
    https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_SSLPORT}/soa-infra
    https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_SSLPORT}/soa/composer
    https://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_SSLPORT}/integration/worklistapp
    

E2ESSL構成

  1. リモート・ブラウザからSOA Suiteドメイン・アプリケーションURLにアクセスするには、ブラウザ・ホスト構成ファイル/etc/hosts (Windowsの場合、C:\Windows\System32\Drivers\etc\hosts)を、次のエントリを使用して、イングレスがデプロイされているホストのIPアドレスで更新します:
    X.X.X.X  admin.org
    X.X.X.X  soa.org
    X.X.X.X  osb.org
    

    ノート:

    • X.X.X.X値は、このイングレスがデプロイされているホストIPアドレスです。
    • 企業プロキシの背後にある場合は、ブラウザ・プロキシ設定を適切に更新して、更新されたホスト名/etc/hostsファイルにアクセスしてください。
  2. コマンドを使用して、NGINXのLOADBALANCER_SSLPORT NodePortを取得します:
    LOADBALANCER_SSLPORT=$(kubectl --namespace soans  get services -o jsonpath="{.spec.ports[1].nodePort}" nginx-ingress-ingress-nginx-controller)
    echo ${LOADBALANCER_SSLPORT}
    
  3. Oracle SOA Suiteドメイン・アプリケーションURLがLOADBALANCER_SSLPORTを介してアクセス可能であることを確認します:
    https://admin.org:${LOADBALANCER_SSLPORT}/weblogic/ready
    https://admin.org:${LOADBALANCER_SSLPORT}/em
    https://soa.org:${LOADBALANCER_SSLPORT}/soa-infra
    https://soa.org:${LOADBALANCER_SSLPORT}/soa/composer
    https://soa.org:${LOADBALANCER_SSLPORT}/integration/worklistapp
    
    

    ノート:

    これはデフォルトのホスト名です。values.yamlでホスト名を更新した場合は、更新された値を使用します。

NGINXイングレスのアンインストール

ingress-nginxデプロイメントをアンインストールして削除します:

helm delete soa-nginx-ingress  -n soans

NGINXのアンインストール

helm delete nginx-ingress -n soans