Runtime Fabric での Red Hat OpenShift ルートの設定

Runtime Fabric では、Mule アプリケーションのイングレスエンドポイントを作成するための Red Hat OpenShift ルートを設定できます。

始める前に

Runtime Fabric でのルートの設定は、イングレスリソースの設定と密接に連携しています。ルートを作成する前に、以下を確認してください。

Red Hat OpenShift ルート用のイングレスリソーステンプレートの例

次の例では、networking.k8s.io/v1 API 用の Runtime Fabric イングレスリソーステンプレートを作成するために Kubernetes イングレス仕様を変更する方法を示しています。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: example-rtf-ingress
  namespace: rtf #(1)
  labels:
spec:
  ingressClassName: rtf-openshift #(2)
  tls: #(3)
  - hosts:
      - app-name.example.com
    secretName: example-tls
  rules:
    - host: app-name.example.com #(4)
      http:
        paths: #(5)
          - pathType: Prefix
            path: / #(6)
            backend: #(7)
               service:
                 name: service-name
                 port:
                  name: service-port

この例について、次の点に注意してください。

1 このテンプレートは ​rtf​ 名前空間に配置する必要があります。
2 ingressClassName​ は、​rtf-​ のプレフィックスを付けて、​rtf-openshift​ に設定する必要があります。

Runtime Fabric では ​rtf-​ プレフィックスを使用してオブジェクトをテンプレートとして認識します。​spec.ingressClassName​ 項目または ​kubernetes.io/ingress.class​ アノテーションの ​rtf-​ プレフィックスが付いたテンプレートは、Runtime Fabric エージェントのみにコンシュームされ、実際のイングレスコントローラーにはコンシュームされません。イングレスコントローラーでは、ベンダー固有の名前 (​openshift​ など) を使用する ​spec.ingressClassName​ 値が含まれるリソースのみを検出します。

3 TLS は省略可能です。テンプレートで指定した場合、​route.openshift.io/termination:​ アノテーションを設定しない限り、Runtime Fabric はデフォルトでエッジ終端のルートを作成します。
4 アプリケーションをデプロイすると、Runtime Fabric は ​app-name​ プレースホルダーのパラメーターを実際のアプリケーション名に置き換えます。これにより、サブドメインにワイルドカードが含まれない場合に各エンドポイント名を一意にすることができます。
5 テンプレートにはホストの複数のパスを含めることができますが、Runtime Manager にはホストの最初のパスルールのみが表示されます。
6 Runtime Fabric は、Mule アプリケーションのイングレスを設定するときに [Path (パス)] 項目に追加した値で ​path​ パラメーター値を置き換えます。​path​ はプレースホルダーではありません。
7 これらのプレースホルダー値は Kubernetes 検証に必須ですが、実際の値は Runtime Fabric によって使用されません。

省略可能なプレースホルダー値のリストは、​「テンプレートのプレースホルダー」​を参照してください。

Runtime Fabric でのルートの設定

ルートを設定するには、次のタスクを実行します。

  1. イングレスリソーステンプレートを作成してクラスターで適用します。

  2. Mule アプリケーションのイングレスを設定します。

イングレスリソーステンプレートを作成してクラスターで適用する

テンプレート例​を使用してルート用のイングレスリソースを作成します。

  1. テンプレート例を新しいファイルにコピーして、コメントに変更します。

  2. ファイル名に ​.yaml​ 拡張子を含めます。

  3. イングレステンプレートを適用するには、次のコマンドを実行します。

    kubectl apply -f <TEMPLATE_FILENAME.yaml>

テンプレートに問題がある場合、Kubernetes ​api-server​ によってエラーが返され、コマンドは失敗します。

テンプレートを正常に適用したら、次のコマンドを使用して表示できます。

kubectl describe ingress [Ingress Name] -n rtf

Mule アプリケーションのイングレスを設定する

Runtime Manager を使用して Runtime Fabric にデプロイするときに、アプリケーションのイングレスを設定します。アプリケーションに使用可能なホストおよびパスは、Runtime Fabric システム管理者が設定したイングレスリソーステンプレートから取得されます。

この手順を使用してテストアプリケーションをデプロイし、イングレスリソーステンプレートを検証することもできます。

次に、アプリケーションのイングレスを設定する方法の概要を示します。 完全なデプロイメント手順については、​「Runtime Fabric に Mule アプリケーションをデプロイする」​を参照してください。 Mule Maven プラグインを使用してアプリケーションを Runtime Fabric にデプロイする場合、ブロック ​http​ のデプロイメント設定パラメーター ​publicUrl​ で複数のエンドポイントのカンマ区切り文字列を受け入れることができます。 詳細は、​「deploymentSettings パラメーターリファレンス」​を参照してください。

  1. [Runtime Manager] に移動し、ドキュメントに従ってアプリケーションを Runtime Fabric にデプロイします。

  2. [Ingress (イングレス)]​ を選択します。

  3. [Host (ホスト)]​ ドロップダウンリストからアプリケーションのホストを選択します。

  4. ホスト名にワイルドカードが使用されている場合、​[Subdomain (サブドメイン)]​ 項目でサブドメインを追加します。

    [Subdomain (サブドメイン)]​ 項目はホスト名にワイルドカードが使用されている場合のみ使用できます。

  5. [Path (パス)]​ 項目で、アプリケーションのエンドポイントに URL パスを追加します。

    エンドポイントのホスト項目とパス項目が入力されます
  6. エンドポイントをプレビューするには、生成されたプレビューリンクをクリックします。

  7. 別のエンドポイントを追加するには、​[+ Add Endpoint (+ エンドポイントを追加)]​ をクリックします。

  8. 準備ができたら、​[Deploy application (アプリケーションをデプロイ)]​ をクリックします。

アプリケーションをデプロイすると Runtime Manager は、アプリケーションにトラフィックを転送するルートを、指定されたテンプレートに従って作成します。

パススルー TLS 終端を設定する

パススルー TLS 終端を含めるようにイングレスリソーステンプレートを設定できます。

パススルー TLS 終端を使用するパスの設定については、 Red Hat OpenShift ドキュメント​を参照してください。

イングレスリソーステンプレートを作成する手順は、次のとおりです。

  1. テンプレートで、次のアノテーションを追加します。

    route.openshift.io/termination: passthrough
  2. テンプレートで、次のパラメーター値を設定します。

    • path: ''​ (空の文字列)

    • pathType: ImplementationSpecific

  3. Runtime Manager で、Mule アプリケーション用のイングレスを設定するときに、​Path​ 項目に ​/​ を含めます。

アプリケーションエンドポイントに、パススルー TLS 終端の HTTPS が表示されます。

再暗号化の終了を設定する

route.openshift.io/termination:reencrypt​ アノテーションをテンプレートに追加することで、ingress リソーステンプレートに再暗号化の終了を含めるように設定できます。

再暗号化の終了を設定する手順は、次のとおりです。

  1. 対象 CA 証明書 (自己署名証明書またはチェーン) を保持するシークレットオブジェクトを作成します。
    次の mule-app.cert ファイルには、対象 Mule アプリケーションのキーストアで使用されるリーフ証明書を PEM エンコードした証明書 (チェーンまたは自己署名証明書) が含まれています。

    kubectl -nrtf create secret generic ah-destination-tls \
    --from-file=tls.crt=mule-app.cert
  2. シークレットに表示ラベルを追加して、Mule アプリケーションの名前空間に伝搬させます。

    kubectl -n rtf label secret ah-destination-tls "rtf.mulesoft.com/synchronized=true""
  3. route.openshift.io/destination-ca-certificate-secret:​ アノテーションを追加して、Runtime Fabric 名前空間にイングレステンプレートを作成するか、または一度削除して再作成します。

    > cat ingress-reencrypt.yaml
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        route.openshift.io/termination: "reencrypt"
        route.openshift.io/destination-ca-certificate-secret: "ah-destination-tls"
      name: rtf-ingress
      namespace: rtf
      labels:
    spec:
      ingressClassName: rtf-openshift
      tls:
      - hosts:
          - app-name.andrew.com
        secretName: ah-tls
      rules:
      - host: app-name.andrew.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: service-name
                port:
                  name: service-port
  4. [Runtime Manager] > [Application settings (アプリケーションの設定)]で、イングレスエンドポイントを選択します。同じ名前のイングレスエンドポイントがすでに存在する場合は、削除してから変更を適用し、新しいイングレスエンドポイントを選択して、再び変更を適用します。

  5. Mule アプリケーションの名前空間にイングレス、シークレット、ルートが存在することを確認します。これで要求は成功するはずです。

    kubectl -n <application_namespace> get ingress
    kubectl -n <application_namespace> get routes
    kubectl -n <application_namespace> get secret

例:

> kubectl -n 82e05f0d-21d7-4808-8088-2dd132095326 get ingress
NAME                   CLASS    HOSTS                 ADDRESS                                                       PORTS     AGE
ah-app-1-rtf-ingress   <none>   ah-app-1.andrew.com   router-default.apps.ah-rtf-rosa-1.9esk.p1.openshiftapps.com   80, 443   7m30s

> kubectl -n 82e05f0d-21d7-4808-8088-2dd132095326 get route
NAME                         HOST/PORT             PATH   SERVICES   PORT   TERMINATION          WILDCARD
ah-app-1-rtf-ingress-6vhpq   ah-app-1.andrew.com   /      ah-app-1   http   reencrypt/Redirect   None

> kubectl -n 82e05f0d-21d7-4808-8088-2dd132095326 get secret | grep -i tls
ah-destination-tls                         Opaque                                1      52m
ah-tls                                     kubernetes.io/tls                     2      131m