NGINX
この項では、Oracle SOA Suiteドメイン・クラスタをロード・バランシングするように、イングレスベースのNGINXロード・バランサをインストールおよび構成する方法について説明します。アプリケーションURLの非SSL、SSL終端およびエンドツーエンドSSLアクセス用にNGINXを構成できます。ただし、セキュア・ドメインの場合、エンドツーエンドSSL構成のみが適用可能です。
次のステップに従って、NGINXをKubernetesクラスタ内のOracle SOA Suiteドメインのロード・バランサとして設定します:
-
前提条件は、公式のインストール・ドキュメントを参照してください。
リポジトリ情報を取得するには、次の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アクセス用のシークレットの生成
$ 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ロード・バランサのインストール
- ドメイン・ネームスペースで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
- デプロイされたイングレス・コントローラのステータスを確認します:
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の構成
-
Oracle SOA Suiteドメイン・アプリケーションURLにアクセスするための適切な
LOADBALANCER_HOSTNAME
を選択します。export LOADBALANCER_HOSTNAME=<LOADBALANCER_HOSTNAME>
たとえば、マスター・ホスト名が
LOADBALANCER_HOSTNAME
のマスター・ノード端末からコマンドを実行する場合:export LOADBALANCER_HOSTNAME=$(hostname -f)
- サンプルの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
- 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
- 非セキュア・ドメインのE2ESSL構成にHelmを使用して
ingress-per-domain
をインストールします。ノート:
E2ESSL
構成を使用するには、sslEnabled
が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
サンプル出力:
NAME: soa-nginx-ingress LAST DEPLOYED: Fri Jul 24 09:34:03 2020 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None
- セキュア・ドメインの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
- 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
- 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
- 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構成
-
コマンドを使用して、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}
- 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構成
-
コマンドを使用して、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}
-
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構成
- リモート・ブラウザから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
ファイルにアクセスしてください。
- コマンドを使用して、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}
- 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