Traefix

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

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

  1. Traefik (イングレスベース)ロード・バランサのインストール

  2. ドメインのイングレスの作成

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

  4. Traefikイングレスのアンインストール

  5. Traefikのアンインストール

Traefik (イングレスベース)ロード・バランサのインストール

  1. 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
  2. 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
  3. 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
  4. HTTPホストtraefik.example.comを使用してURL http://<MASTERNODE-HOSTNAME>:31288を介してTraefikダッシュボードにアクセスします:
    $ curl -H "host: <MASTERNODE-HOSTNAME>" http://<MASTERNODE-HOSTNAME>:31288/dashboard/

    ノート:

    <MASTERNODE-HOSTNAME>には完全修飾ノード名を指定してください
  5. 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にあります。

ノート:

ここをクリックして、すべての構成パラメータを表示します。
  1. Oracle SOA Suiteドメイン・アプリケーションURLにアクセスするための適切なLOADBALANCER_HOSTNAMEを選択します。

    $ export LOADBALANCER_HOSTNAME=<LOADBALANCER_HOSTNAME>
    

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

    $ export LOADBALANCER_HOSTNAME=$(hostname -f)
  2. 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}"
    
  3. 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
    
  4. 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
  5. 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
  6. 非セキュア・ドメインの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
    
  7. 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>
    
  8. 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>
      ```
  9. 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>
      ```
  10. ロード・バランサが新しいイングレスを認識し、ドメイン・サーバー・ポッドへのルーティングに成功したことを確認するには、次のように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