Traefix
この項では、Oracle SOA Suiteドメイン・クラスタをロード・バランシングするように、イングレスベースのTraefikロード・バランサ(本番デプロイメントではバージョン2.2.1以上)をインストールおよび構成する方法について説明します。アプリケーションURLの非SSL、SSL終端およびエンドツーエンドSSLアクセスに対してTraefikを構成できます。ただし、セキュア・ドメインの場合、エンドツーエンドSSL構成のみが適用可能です。
次のステップに従って、TraefikをKubernetesクラスタ内のOracle SOA Suiteドメインのロード・バランサとして設定します:
Traefik (イングレスベース)ロード・バランサのインストール
- Helmを使用して、Traefik (イングレスベース)ロード・バランサをインストールします。サンプルではvalues.yamlファイルを使用しますが、特にkubernetes.namespacesを設定します。
$ cd ${WORKDIR} $ kubectl create namespace traefik $ helm repo add traefik https://helm.traefik.io/traefik --force-update
サンプル出力:
"traefik" has been added to your repositories
- Traefixをインストールします。
$ helm install traefik traefik/traefik \ --namespace traefik \ --values charts/traefik/values.yaml \ --set "kubernetes.namespaces={traefik}" \ --set "service.type=NodePort" --wait
サンプル出力:
LAST DEPLOYED: Sun Sep 13 21:32:00 2020 NAMESPACE: traefik STATUS: deployed REVISION: 1 TEST SUITE: None
Traefikのデプロイメント用のサンプルvalues.yaml:
image: pullPolicy: IfNotPresent ingressRoute: dashboard: enabled: true # Additional ingressRoute annotations (e.g. for kubernetes.io/ingress.class) annotations: {} # Additional ingressRoute labels (e.g. for filtering IngressRoute by custom labels) labels: {} providers: kubernetesCRD: enabled: true kubernetesIngress: enabled: true # IP used for Kubernetes Ingress endpoints ports: traefik: port: 9000 expose: true # The exposed port for this service exposedPort: 9000 # The port protocol (TCP/UDP) protocol: TCP web: port: 8000 # hostPort: 8000 expose: true exposedPort: 30305 nodePort: 30305 # The port protocol (TCP/UDP) protocol: TCP # Use nodeport if set. This is useful if you have configured Traefik in a # LoadBalancer # nodePort: 32080 # Port Redirections # Added in 2.2, you can make permanent redirects via entrypoints. # https://docs.traefik.io/routing/entrypoints/#redirection # redirectTo: websecure websecure: port: 8443 # # hostPort: 8443 expose: true exposedPort: 30443 # The port protocol (TCP/UDP) protocol: TCP nodePort: 30443
- Traefikステータスを確認し、SSLおよび非SSLサービスのポート番号を見つけます:
$ kubectl get all -n traefik
サンプル出力:
NAME READY STATUS RESTARTS AGE pod/traefik-5fc4947cf9-fbl9r 1/1 Running 5 7d17h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/traefik NodePort 10.100.195.70 <none> 9000:31288/TCP,30305:30305/TCP,30443:30443/TCP 7d17h NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/traefik 1/1 1 1 7d17h NAME DESIRED CURRENT READY AGE replicaset.apps/traefik-5fc4947cf9 1 1 1 7d17h
- HTTPホストtraefik.example.comを使用してURL http://<MASTERNODE-HOSTNAME>:31288を介してTraefikダッシュボードにアクセスします:
$ curl -H "host: <MASTERNODE-HOSTNAME>" http://<MASTERNODE-HOSTNAME>:31288/dashboard/
ノート:
<MASTERNODE-HOSTNAME>には完全修飾ノード名を指定してください - Traefikを構成して、このネームスペースで作成されたイングレスを管理します。ここで、traefikはTraefikネームスペースで、soansはドメインのネームスペースです:
$ helm upgrade traefik traefik/traefik --namespace traefik --reuse-values \ --set "kubernetes.namespaces={traefik,soans}"
サンプル出力:
Release "traefik" has been upgraded. Happy Helming! NAME: traefik LAST DEPLOYED: Sun Sep 13 21:32:12 2020 NAMESPACE: traefik STATUS: deployed REVISION: 2 TEST SUITE: None
ドメインのイングレスの作成
サンプルのHelmチャートを使用して、ドメイン・ネームスペースにドメインのイングレスを作成します。ここでは、パスベースのルーティングがイングレスに使用されます。デフォルト構成のサンプル値は、ファイル${WORKDIR}/charts/ingress-per-domain/values.yamlに示されています。デフォルトでは、typeはTRAEFIK、sslTypeはNONSSL、wlsDomain.secureEnabledはfalse、domainTypeはsoaです。これらの値は、コマンドラインで値を渡してオーバーライドするか、構成のタイプ(NONSSL、SSLおよびE2ESSL)に基づいてサンプル・ファイルvalues.yamlで編集できます。必要に応じて、イングレスYAMLファイルを更新して、アクセスする必要があるドメイン・アプリケーションURLに基づいて(spec.rules.host.http.pathsセクションに)より多くのパス・ルールを定義できます。Traefik(イングレスベース)ロード・バランサのテンプレートYAMLファイルは${WORKDIR}/charts/ingress-per-domain/templates/traefik-ingress.yamlにあります。
ノート:
ここをクリックして、すべての構成パラメータを表示します。-
Oracle SOA Suiteドメイン・アプリケーションURLにアクセスするための適切なLOADBALANCER_HOSTNAMEを選択します。
$ export LOADBALANCER_HOSTNAME=<LOADBALANCER_HOSTNAME>
たとえば、マスター・ホスト名がLOADBALANCER_HOSTNAMEのマスター・ノード端末からコマンドを実行する場合:
$ export LOADBALANCER_HOSTNAME=$(hostname -f)
-
NONSSL構成にHelmを使用してingress-per-domainをインストールします:
$ cd ${WORKDIR} $ helm install soa-traefik-ingress \ charts/ingress-per-domain \ --namespace soans \ --values charts/ingress-per-domain/values.yaml \ --set "traefik.hostname=${LOADBALANCER_HOSTNAME}"
-
Oracle SOA Suiteアプリケーションへのセキュア・アクセス(SSL終端およびE2ESSL)の場合は、証明書を作成し、Kubernetesシークレットを生成します:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/tls1.key -out /tmp/tls1.crt -subj "/CN=*" $ kubectl -n soans create secret tls soainfra-tls-cert --key /tmp/tls1.key --cert /tmp/tls1.crt
-
Traefik TLSStoreカスタム・リソースを作成します。
SSL終端の場合は、ユーザー定義のSSL証明書を使用するようにTraefikを構成する必要があります。ユーザー定義のSSL証明書が構成されていない場合、TraefikはデフォルトのSSL証明書を作成します。Traefikのユーザー定義のSSL証明書を構成するには、TLSStoreカスタム・リソースを使用します。SSL証明書を使用して作成されたKubernetesシークレットは、TLSStoreオブジェクトで参照される必要があります。次のコマンドを実行して、TLSStoreを作成します:
$ cat <<EOF | kubectl apply -f - apiVersion: traefik.containo.us/v1alpha1 kind: TLSStore metadata: name: default namespace: soans spec: defaultCertificate: secretName: soainfra-tls-cert EOF
-
SSL構成にHelmを使用してingress-per-domainをインストールします。Kubernetesシークレット名は、テンプレート・ファイルで更新する必要があります。テンプレート・ファイルには、次の注釈も含まれています:
traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.tls: "true" traefik.ingress.kubernetes.io/router.middlewares: soans-wls-proxy-ssl@kubernetescrd
SSL終端アクセスのエントリ・ポイントおよびミドルウェア名を注釈で更新する必要があります。ミドルウェア名は、<namespace>-<middleware name>@kubernetescrdという形式にする必要があります。
$ cd ${WORKDIR} $ helm install soa-traefik-ingress \ charts/ingress-per-domain \ --namespace soans \ --values charts/ingress-per-domain/values.yaml \ --set "traefik.hostname=${LOADBALANCER_HOSTNAME}" \ --set sslType=SSL
-
非セキュア・ドメインのE2ESSL構成にHelmを使用して、ingress-per-domainをインストールします。
E2ESSL構成を使用するには、sslEnabledがtrueに設定されたOracle SOA Suiteドメインを作成しておく必要があります。詳細は、Oracle SOA Suiteドメインの作成を参照してください。
$ cd ${WORKDIR}$ helm install soa-traefik-ingress \ charts/ingress-per-domain \ --namespace soans \ --values charts/ingress-per-domain/values.yaml \ --set sslType=E2ESSL --set wlsDomain.secureEnabled=true
サンプル出力:
NAME: soa-traefik-ingress LAST DEPLOYED: Fri Apr 9 09:47:27 2021 NAMESPACE: soans STATUS: deployed REVISION: 1 TEST SUITE: None
-
Oracle SOA SuiteアプリケーションへのNONSSLアクセスの場合は、イングレスによってサービスの詳細を取得します:
$ kubectl describe ingress soainfra-traefik -n soans
前述のデプロイ済イングレスでサポートされているすべてのサービスを確認してください:
Name: soainfra-traefik Namespace: soans Address: Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>) Rules: Host Path Backends ---- ---- -------- www.example.com /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: traefik Events: <none>
-
Oracle SOA SuiteアプリケーションへのSSLアクセスの場合は、前述のデプロイ済イングレスによってサービスの詳細を取得します:
$ kubectl describe ingress soainfra-traefik -n soans
前述のデプロイ済イングレスでサポートされているすべてのサービスを確認してください:
``` Name: soainfra-traefik Namespace: soans Address: Default backend: default-http-backend:80 (<error: endpoints "default-http-backend" not found>) TLS: soainfra-tls-cert terminates www.example.com Rules: Host Path Backends ---- ---- -------- www.example.com /em soainfra-adminserver:7001 () /weblogic/ready soainfra-adminserver:7001 () soainfra-cluster-soa-cluster:7003 () /soa-infra soainfra-cluster-soa-cluster:7003 () /soa/composer soainfra-cluster-soa-cluster:7003 () /integration/worklistapp soainfra-cluster-soa-cluster:7003 () Annotations: kubernetes.io/ingress.class: traefik meta.helm.sh/release-name: soa-traefik-ingress meta.helm.sh/release-namespace: soans traefik.ingress.kubernetes.io/router.entrypoints: websecure traefik.ingress.kubernetes.io/router.middlewares: soans-wls-proxy-ssl@kubernetescrd traefik.ingress.kubernetes.io/router.tls: true Events: <none> ```
-
Oracle SOA SuiteアプリケーションへのE2ESSLアクセスの場合は、前述のデプロイ済イングレスによってサービスの詳細を取得します:
$ kubectl describe IngressRouteTCP soainfra-traefik -n soans
前述のデプロイ済イングレスでサポートされているすべてのサービスを確認してください:
``` Name: soa-cluster-routetcp Namespace: soans Labels: app.kubernetes.io/managed-by=Helm Annotations: meta.helm.sh/release-name: soa-traefik-ingress meta.helm.sh/release-namespace: soans API Version: traefik.containo.us/v1alpha1 Kind: IngressRouteTCP Metadata: Creation Timestamp: 2021-04-09T09:47:27Z Generation: 1 Managed Fields: API Version: traefik.containo.us/v1alpha1 Fields Type: FieldsV1 fieldsV1: f:metadata: f:annotations: .: f:meta.helm.sh/release-name: f:meta.helm.sh/release-namespace: f:labels: .: f:app.kubernetes.io/managed-by: f:spec: .: f:entryPoints: f:routes: f:tls: .: f:passthrough: Manager: Go-http-client Operation: Update Time: 2021-04-09T09:47:27Z Resource Version: 548305 Self Link: /apis/traefik.containo.us/v1alpha1/namespaces/soans/ingressroutetcps/soa-cluster-routetcp UID: 933e524c-b773-474b-a87f-560d69f08d4b Spec: Entry Points: websecure Routes: Match: HostSNI(`HostName`) Services: Termination Delay: 400 Name: soainfra-adminserver Port: 7002 Weight: 3 Tls: Passthrough: true Events: <none> ```
-
ロード・バランサが新しいイングレスを認識し、ドメイン・サーバー・ポッドへのルーティングに成功したことを確認するには、次のようにHTTP 200ステータス・コードを返すWebLogic ReadyAppフレームワークのURLにリクエストを送信します:
$ curl -v http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_PORT}/weblogic/ready * Trying 149.87.129.203... > GET http://${LOADBALANCER_HOSTNAME}:${LOADBALANCER_PORT}/weblogic/ready HTTP/1.1 > User-Agent: curl/7.29.0 > Accept: */* > Proxy-Connection: Keep-Alive > host: ${LOADBALANCER_HOSTNAME} > < HTTP/1.1 200 OK < Date: Sat, 14 Mar 2020 08:35:03 GMT < Vary: Accept-Encoding < Content-Length: 0 < Proxy-Connection: Keep-Alive < * Connection #0 to host localhost left intact
ドメイン・アプリケーションURLアクセスの検証
NONSSL構成の場合
Traefik(イングレスベース)ロード・バランサを設定した後、HTTPアクセス用の非SSLロード・バランサ・ポート30305を介してドメイン・アプリケーションURLにアクセスできることを検証します。soaタイプのOracle SOA SuiteドメインのサンプルURLは次のとおりです:
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構成の場合
Traefik(イングレスベース)ロード・バランサを設定した後、ドメイン・アプリケーションがHTTPSアクセス用のSSLロード・バランサ・ポート30443を介してアクセスすることを確認します。soaタイプのOracle SOA SuiteドメインのサンプルURLは次のとおりです:
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
Traefikイングレスのアンインストール
イングレス・デプロイメントをアンインストールして削除します:
$ helm delete soa-traefik-ingress -n soans
Traefikのアンインストール
$ helm delete traefik -n traefik