3.3. KServe を手動でインストールする


すでに Red Hat OpenShift Service Mesh Operator をインストールして ServiceMeshControlPlane リソースを作成している場合、または Red Hat OpenShift Serverless Operator をインストールして KNativeServing リソースを作成している場合は、Red Hat OpenShift AI Operator は KServe をインストールして、その依存関係を設定できません。この状況では、KServe を手動でインストールする必要があります。

重要

このセクションの手順は、KServe とその依存関係の 新規 インストールを実行する方法を示しており、完全なインストールと設定のリファレンスとして意図されています。すでに OpenShift Service Mesh または OpenShift Serverless をインストールして設定している場合は、すべての手順に従う必要はない場合があります。KServe を使用するために既存の設定にどの更新を適用すればよいかわからない場合は、Red Hat サポートにお問い合わせください。

3.3.1. KServe 依存関係のインストール

KServe をインストールする前に、いくつかの依存関係をインストールして設定する必要があります。具体的には、Red Hat OpenShift Service Mesh および Knative Serving インスタンスを作成し、Knative Serving 用にセキュアゲートウェイを設定する必要があります。

3.3.1.1. OpenShift Service Mesh インスタンスの作成

次の手順は、Red Hat OpenShift Service Mesh インスタンスを作成する方法を示しています。

前提条件

  • OpenShift クラスターのクラスター管理者権限を持っている。
  • クラスターには 4 つの CPU と 16 GB のメモリーを備えたノードがある。
  • OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
  • Red Hat OpenShift Service Mesh Operator と依存する Operator が インストール されている。

手順

  1. ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. Red Hat OpenShift Service Mesh に必要な namespace を作成します。

    $ oc create ns istio-system

    以下のような出力が表示されます。

    namespace/istio-system created
  3. smcp.yaml という名前の YAML ファイルに次の内容の ServiceMeshControlPlane オブジェクトを定義します。

    apiVersion: maistra.io/v2
    kind: ServiceMeshControlPlane
    metadata:
      name: minimal
      namespace: istio-system
    spec:
      tracing:
        type: None
      addons:
        grafana:
          enabled: false
        kiali:
          name: kiali
          enabled: false
        prometheus:
          enabled: false
        jaeger:
          name: jaeger
      security:
        dataPlane:
          mtls: true
        identity:
          type: ThirdParty
      techPreview:
        meshConfig:
          defaultConfig:
            terminationDrainDuration: 35s
      gateways:
        ingress:
          service:
            metadata:
              labels:
                knative: ingressgateway
      proxy:
        networking:
          trafficControl:
            inbound:
              excludedPorts:
                - 8444
                - 8022

    YAML ファイルの値の詳細は、Service Mesh コントロールプレーン設定リファレンス を参照してください。

  4. サービスメッシュコントロールプレーンを作成します。

    $ oc apply -f smcp.yaml

検証

  • 次のようにサービスメッシュインスタンスの作成を確認します。

    • OpenShift CLI で、次のコマンドを入力します。

      $ oc get pods -n istio-system

      前述のコマンドは、istio-system プロジェクト内で実行中の Pod 一覧を表示します。これは、OpenShift Service Mesh がインストールされるプロジェクトです。

    • サービスメッシュコントロールプレーン、Ingress ゲートウェイ、および Egress ゲートウェイの実行中の Pod があることを確認します。これらの Pod には次の命名パターンがあります。

      NAME                                          READY   STATUS   	  RESTARTS    AGE
      istio-egressgateway-7c46668687-fzsqj          1/1     Running     0           22h
      istio-ingressgateway-77f94d8f85-fhsp9         1/1     Running     0           22h
      istiod-data-science-smcp-cc8cfd9b8-2rkg4      1/1     Running     0           22h

3.3.1.2. Knative Serving インスタンスの作成

次の手順は、Knative Serving をインストールしてインスタンスを作成する方法を示しています。

前提条件

  • OpenShift クラスターのクラスター管理者権限を持っている。
  • クラスターには 4 つの CPU と 16 GB のメモリーを備えたノードがある。
  • OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
  • Red Hat OpenShift Service Mesh インスタンスが 作成 されている。
  • Red Hat OpenShift Serverless Operator が インストール されている。

手順

  1. ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
  2. Knative Serving に必要なプロジェクト (つまり namespace) がすでに存在するかどうかを確認します。

    $ oc get ns knative-serving

    プロジェクトが存在する場合は、次の例のような出力が表示されます。

    NAME              STATUS   AGE
    knative-serving   Active   4d20h
  3. knative-serving プロジェクトがまだ存在 しない 場合は、作成します。

    $ oc create ns knative-serving

    以下のような出力が表示されます。

    namespace/knative-serving created
  4. 以下の内容で、default-smm.yaml という YAML ファイルに ServiceMeshMember オブジェクトを定義します。

    apiVersion: maistra.io/v1
    kind: ServiceMeshMember
    metadata:
      name: default
      namespace: knative-serving
    spec:
      controlPlaneRef:
        namespace: istio-system
        name: minimal
  5. istio-system namespace に ServiceMeshMember オブジェクトを作成します。

    $ oc apply -f default-smm.yaml

    以下のような出力が表示されます。

    servicemeshmember.maistra.io/default created
  6. knativeserving-istio.yaml という YAML ファイルに次の内容の KnativeServing オブジェクトを定義します。

    apiVersion: operator.knative.dev/v1beta1
    kind: KnativeServing
    metadata:
      name: knative-serving
      namespace: knative-serving
      annotations:
        serverless.openshift.io/default-enable-http2: "true"
    spec:
      workloads:
        - name: net-istio-controller
          env:
            - container: controller
              envVars:
                - name: ENABLE_SECRET_INFORMER_FILTERING_BY_CERT_UID
                  value: 'true'
        - annotations:
            sidecar.istio.io/inject: "true" 1
            sidecar.istio.io/rewriteAppHTTPProbers: "true" 2
          name: activator
        - annotations:
            sidecar.istio.io/inject: "true"
            sidecar.istio.io/rewriteAppHTTPProbers: "true"
          name: autoscaler
      ingress:
        istio:
          enabled: true
      config:
        features:
          kubernetes.podspec-affinity: enabled
          kubernetes.podspec-nodeselector: enabled
          kubernetes.podspec-tolerations: enabled

    前述のファイルは、KnativeServing オブジェクトのカスタムリソース (CR) を定義します。CR は、アクティベーター Pod とオートスケーラー Pod のそれぞれに次のアクションも追加します。

    1
    Istio サイドカーを Pod に注入します。これにより、Pod がサービスメッシュの一部になります。
    2
    Istio サイドカーが Pod の HTTP liveness プローブと readiness プローブを書き換えられるようにします。
    注記

    Knative サービスのカスタムドメインを設定する場合、TLS 証明書を使用してマップされたサービスを保護できます。これを行うには、TLS シークレットを作成してから、作成した TLS シークレットを使用するように DomainMapping CR を更新する必要があります。詳細は、Red Hat OpenShift Serverless ドキュメントの TLS 証明書を使用したマップされたサービスの保護 を参照してください。

  7. 指定された knative-serving namespace に KnativeServing オブジェクトを作成します。

    $ oc apply -f knativeserving-istio.yaml

    以下のような出力が表示されます。

    knativeserving.operator.knative.dev/knative-serving created

検証

  • istio-system namespace のデフォルトの ServiceMeshMemberRoll オブジェクトを確認します。

    $ oc describe smmr default -n istio-system

    ServiceMeshMemberRoll オブジェクトの説明で、Status.Members フィールドを見つけて、それに knative-serving namespace が含まれていることを確認します。

  • 次のように、Knative Serving インスタンスの作成を確認します。

    • OpenShift CLI で、次のコマンドを入力します。

      $ oc get pods -n knative-serving

      前述のコマンドは、knative-serving プロジェクト内で実行中の Pod 一覧を表示します。これは、Knative Serving インスタンスを作成したプロジェクトです。

    • knative-serving プロジェクト内に、アクティベーター、オートスケーラー、コントローラー、ドメインマッピング Pod、および OpenShift Serverless と OpenShift Service Mesh の統合を制御する Knative Istio コントローラーの Pod を含む多数の実行中の Pod があることを確認します。一例を示します。

      NAME                                     	READY       STATUS    	RESTARTS   	AGE
      activator-7586f6f744-nvdlb               	2/2         Running   	0          	22h
      activator-7586f6f744-sd77w               	2/2         Running   	0          	22h
      autoscaler-764fdf5d45-p2v98             	2/2         Running   	0          	22h
      autoscaler-764fdf5d45-x7dc6              	2/2         Running   	0          	22h
      autoscaler-hpa-7c7c4cd96d-2lkzg          	1/1         Running   	0          	22h
      autoscaler-hpa-7c7c4cd96d-gks9j         	1/1         Running   	0          	22h
      controller-5fdfc9567c-6cj9d              	1/1         Running   	0          	22h
      controller-5fdfc9567c-bf5x7              	1/1         Running   	0          	22h
      domain-mapping-56ccd85968-2hjvp          	1/1         Running   	0          	22h
      domain-mapping-56ccd85968-lg6mw          	1/1         Running   	0          	22h
      domainmapping-webhook-769b88695c-gp2hk   	1/1         Running     0          	22h
      domainmapping-webhook-769b88695c-npn8g   	1/1         Running   	0          	22h
      net-istio-controller-7dfc6f668c-jb4xk    	1/1         Running   	0          	22h
      net-istio-controller-7dfc6f668c-jxs5p    	1/1         Running   	0          	22h
      net-istio-webhook-66d8f75d6f-bgd5r       	1/1         Running   	0          	22h
      net-istio-webhook-66d8f75d6f-hld75      	1/1         Running   	0          	22h
      webhook-7d49878bc4-8xjbr                 	1/1         Running   	0          	22h
      webhook-7d49878bc4-s4xx4                 	1/1         Running   	0          	22h

3.3.1.3. Knative Serving 用の安全なゲートウェイの作成

Knative Serving インスタンスとサービスメッシュ間のトラフィックを保護するには、Knative Serving インスタンス用のセキュアゲートウェイを作成する必要があります。

次の手順では、OpenSSL を使用してワイルドカード証明書とキーを生成し、それらを使用して Knative Serving のローカルゲートウェイと Ingress ゲートウェイを作成する方法を示します。

重要

ゲートウェイの設定時に指定する独自のワイルドカード証明書とキーがある場合は、この手順のステップ 11 に進んでください。

前提条件

  • OpenShift クラスターのクラスター管理者権限を持っている。
  • OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
  • Red Hat OpenShift Service Mesh インスタンスが 作成 されている。
  • Knative Serving インスタンスが 作成 されている。
  • ワイルドカード証明書とキーを生成する場合は、OpenSSL を ダウンロードしてインストール している。

手順

  1. ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。

    $ oc login <openshift_cluster_url> -u <admin_username> -p <password>
    重要

    ゲートウェイの設定時に指定する独自のワイルドカード証明書とキーがある場合は、この手順のステップ 11 に進みます。

  2. 環境変数を設定して、ゲートウェイのワイルドカード証明書とキーを生成するためのベースディレクトリーを定義します。

    $ export BASE_DIR=/tmp/kserve
    $ export BASE_CERT_DIR=${BASE_DIR}/certs
  3. 環境変数を設定して、OpenShift クラスターの Ingress コントローラーで使用される共通名を定義します。

    $ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
  4. 環境変数を設定して、OpenShift クラスターの Ingress コントローラーによって使用されるドメイン名を定義します。

    $ export DOMAIN_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
  5. 以前に設定した環境変数に基づいて、証明書の生成に必要なベースディレクトリーを作成します。

    $ mkdir ${BASE_DIR}
    $ mkdir ${BASE_CERT_DIR}
  6. ワイルドカード証明書を生成するための OpenSSL 設定を作成します。

    $ cat <<EOF> ${BASE_DIR}/openssl-san.config
    [ req ]
    distinguished_name = req
    [ san ]
    subjectAltName = DNS:*.${DOMAIN_NAME}
    EOF
  7. ルート証明書を生成します。

    $ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 \
    -subj "/O=Example Inc./CN=${COMMON_NAME}" \
    -keyout $BASE_DIR/root.key \
    -out $BASE_DIR/root.crt
  8. ルート証明書によって署名されたワイルドカード証明書を生成します。

    $ openssl req -x509 -newkey rsa:2048 \
    -sha256 -days 3560 -nodes \
    -subj "/CN=${COMMON_NAME}/O=Example Inc." \
    -extensions san -config ${BASE_DIR}/openssl-san.config \
    -CA $BASE_DIR/root.crt \
    -CAkey $BASE_DIR/root.key \
    -keyout $BASE_DIR/wildcard.key  \
    -out $BASE_DIR/wildcard.crt
    
    $ openssl x509 -in ${BASE_DIR}/wildcard.crt -text
  9. ワイルドカード証明書を確認します。

    $ openssl verify -CAfile ${BASE_DIR}/root.crt ${BASE_DIR}/wildcard.crt
  10. スクリプトによって作成されたワイルドカードキーと証明書を新しい環境変数にエクスポートします。

    $ export TARGET_CUSTOM_CERT=${BASE_CERT_DIR}/wildcard.crt
    $ export TARGET_CUSTOM_KEY=${BASE_CERT_DIR}/wildcard.key
  11. オプション: 独自 のワイルドカードキーと証明書を新しい環境変数にエクスポートするには、次のコマンドを入力します。

    $ export TARGET_CUSTOM_CERT=<path_to_certificate>
    $ export TARGET_CUSTOM_KEY=<path_to_key>
    注記

    提供する証明書では、OpenShift クラスターの Ingress コントローラーで使用されるドメイン名を指定する必要があります。この値は、次のコマンドを実行して確認できます。

    $ oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}'

  12. ワイルドカード証明書とキーに設定した環境変数を使用して、istio-system namespace に TLS シークレットを作成します。

    $ oc create secret tls wildcard-certs --cert=${TARGET_CUSTOM_CERT} --key=${TARGET_CUSTOM_KEY} -n istio-system
  13. 次の内容を含む gateways.yaml YAML ファイルを作成します。

    apiVersion: v1
    kind: Service 1
    metadata:
      labels:
        experimental.istio.io/disable-gateway-port-translation: "true"
      name: knative-local-gateway
      namespace: istio-system
    spec:
      ports:
        - name: http2
          port: 80
          protocol: TCP
          targetPort: 8081
      selector:
        knative: ingressgateway
      type: ClusterIP
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
      name: knative-ingress-gateway 2
      namespace: knative-serving
    spec:
      selector:
        knative: ingressgateway
      servers:
        - hosts:
            - '*'
          port:
            name: https
            number: 443
            protocol: HTTPS
          tls:
            credentialName: wildcard-certs
            mode: SIMPLE
    ---
    apiVersion: networking.istio.io/v1beta1
    kind: Gateway
    metadata:
     name: knative-local-gateway 3
     namespace: knative-serving
    spec:
     selector:
       knative: ingressgateway
     servers:
       - port:
           number: 8081
           name: https
           protocol: HTTPS
         tls:
           mode: ISTIO_MUTUAL
         hosts:
           - "*"
    1
    Knative ローカルゲートウェイの istio-system namespace にサービスを定義します。
    2
    knative-serving namespace で Ingress ゲートウェイを定義します。ゲートウェイは、この手順の前半で作成した TLS シークレットを使用します。Ingress ゲートウェイは、Knative への外部トラフィックを処理します。
    3
    knative-serving namespace で Knative のローカルゲートウェイを定義します。
  14. gateways.yaml ファイルを適用して、定義されたリソースを作成します。

    $ oc apply -f gateways.yaml

    以下のような出力が表示されます。

    service/knative-local-gateway created
    gateway.networking.istio.io/knative-ingress-gateway created
    gateway.networking.istio.io/knative-local-gateway created

検証

  • 作成したゲートウェイを確認します。

    $ oc get gateway --all-namespaces

    次の例に示すように、knative-serving namespace で作成したローカルゲートウェイと Ingress ゲートウェイが表示されていることを確認します。

    NAMESPACE         	NAME                      	AGE
    knative-serving   	knative-ingress-gateway   	69s
    knative-serving     knative-local-gateway     	2m

3.3.2. KServe のインストール

KServe の手動インストールを完了するには、Red Hat OpenShift AI Operator をインストールする必要があります。次に、KServe をインストールするように Operator を設定できます。

前提条件

  • OpenShift クラスターのクラスター管理者権限を持っている。
  • クラスターには 4 つの CPU と 16 GB のメモリーを備えたノードがある。
  • OpenShift コマンドラインインターフェイス (CLI) がダウンロードおよびインストールされている。OpenShift CLI のインストール を参照してください。
  • Red Hat OpenShift Service Mesh インスタンスが 作成 されている。
  • Knative Serving インスタンスが 作成 されている。
  • Knative Serving 用の セキュアなゲートウェイが作成 されている。
  • Red Hat OpenShift AI Operator が インストール され、DataScienceCluster オブジェクトが 作成 されている。

手順

  1. OpenShift Web コンソールにクラスター管理者としてログインします。
  2. Web コンソールで、Operators Installed Operators をクリックし、Red Hat OpenShift AI Operator をクリックします。
  3. KServe をインストールするには、OpenShift Service Mesh コンポーネントを次のように設定します。

    1. DSC Initialization タブをクリックします。
    2. default-dsci オブジェクトをクリックします。
    3. YAML タブをクリックします。
    4. spec セクションで、次のように serviceMesh コンポーネントを追加して設定します。

      spec:
       serviceMesh:
         managementState: Unmanaged
    5. Save をクリックします。
  4. KServe をインストールするには、KServe および OpenShift Serverless コンポーネントを次のように設定します。

    1. Web コンソールで、Operators Installed Operators をクリックし、Red Hat OpenShift AI Operator をクリックします。
    2. Data Science Cluster タブをクリックします。
    3. default-dsc DSC オブジェクトをクリックします。
    4. YAML タブをクリックします。
    5. spec.components セクションで、次のように kserve コンポーネントを設定します。

      spec:
       components:
         kserve:
           managementState: Managed
    6. kserve コンポーネント内で、serving コンポーネントを追加し、次のように設定します。

      spec:
       components:
         kserve:
           managementState: Managed
           serving:
             managementState: Unmanaged
    7. Save をクリックします。

3.3.3. 認可プロバイダーを手動で追加する

シングルモデルサービングプラットフォームの認可プロバイダーとして Authorino を追加できます。認可プロバイダーを追加すると、プラットフォームにデプロイするモデルに対してトークン認可を有効にできます。その場合、認可されなければモデルに対して推論リクエストを実行できなくなります。

Authorino を認可プロバイダーとして手動で追加するには、Red Hat - Authorino Operator をインストールし、Authorino インスタンスを作成してから、そのインスタンスを使用するように OpenShift Service Mesh および KServe コンポーネントを設定する必要があります。

重要

認可プロバイダーを手動で追加するには、OpenShift Service Mesh インスタンスの設定を更新する必要があります。OpenShift Service Mesh インスタンスのサポート状態を維持するには、このセクションに示された更新 のみ を行ってください。

前提条件

  • Authorino を認可プロバイダーとして追加するためのオプションを確認し、手動インストールが適切なオプションであることを確認した。認証プロバイダーの追加 を参照してください。
  • OpenShift Service Mesh を含め、KServe とその依存関係が手動でインストールされている。KServe の手動インストール を参照してください。
  • KServe を手動でインストールした際に、serviceMesh コンポーネントの managementState フィールドの値が Unmanaged に設定されている。Authorino を手動で追加する場合はこの設定が必要です。KServe のインストール を参照してください。

3.3.3.1. Red Hat Authorino Operator のインストール

Autorino を認可プロバイダーとして追加する前に、OpenShift クラスターに Red Hat - Authorino Operator をインストールする必要があります。

前提条件

  • OpenShift クラスターのクラスター管理者権限を持っている。

手順

  1. OpenShift Web コンソールにクラスター管理者としてログインします。
  2. Web コンソールで Operators OperatorHub をクリックします。
  3. OperatorHub ページの Filter by keyword フィールドに、Red Hat - Authorino と入力します。
  4. Red Hat - Authorino Operator をクリックします。
  5. Red Hat - Authorino Operator ページで、Operator 情報を確認して Install をクリックします。
  6. Install Operator ページの Update channelVersionInstallation modeInstalled NamespaceUpdate Approval は、デフォルト値のままにします。
  7. Install をクリックします。

検証

  • OpenShift Web コンソールで、Operators Installed Operators をクリックし、Red Hat - Authorino Operator が以下のいずれかのステータスを示していることを確認します。

    • Installing - インストールが進行中です。Succeeded が表示されるまで待機してください。これには数分かかる場合があります。
    • Succeeded - インストールに成功しました。

3.3.3.2. Authorino インスタンスの作成

OpenShift クラスターに Red Hat - Authorino Operator をインストールしたら、Authorino インスタンスを作成する必要があります。

前提条件

手順

  1. 新しいターミナルウィンドウを開きます。
  2. 次のように OpenShift コマンドラインインターフェイス (CLI) にログインします。

    $ oc login <openshift_cluster_url> -u <username> -p <password>
  3. Authorino インスタンスのインストールに使用する namespace を作成します。

    $ oc new-project <namespace_for_authorino_instance>
    注記

    自動インストールプロセスにより、Authorino インスタンス用に redhat-ods-applications-auth-provider という namespace が作成されます。手動インストールで使用する namespace も同じ名前にすることを検討してください。

  4. 既存の OpenShift Service Mesh インスタンスに Authorino インスタンス用の新しい namespace を登録するには、次の内容で新しい YAML ファイルを作成します。

      apiVersion: maistra.io/v1
      kind: ServiceMeshMember
      metadata:
        name: default
        namespace: <namespace_for_authorino_instance>
      spec:
        controlPlaneRef:
          namespace: <namespace_for_service_mesh_instance>
          name: <name_of_service_mesh_instance>
  5. YAML ファイルを保存します。
  6. クラスター上に ServiceMeshMember リソースを作成します。

    $ oc create -f <file_name>.yaml
  7. Authorino インスタンスを設定するには、次の例に示すように新しい YAML ファイルを作成します。

      apiVersion: operator.authorino.kuadrant.io/v1beta1
      kind: Authorino
      metadata:
        name: authorino
        namespace: <namespace_for_authorino_instance>
      spec:
        authConfigLabelSelectors: security.opendatahub.io/authorization-group=default
        clusterWide: true
        listener:
          tls:
            enabled: false
        oidcServer:
          tls:
            enabled: false
  8. YAML ファイルを保存します。
  9. クラスター上に Authorino リソースを作成します。

    $ oc create -f <file_name>.yaml
  10. Authorino デプロイメントにパッチを適用して Istio サイドカーを注入し、Authorino インスタンスを OpenShift Service Mesh インスタンスの一部にします。

    $ oc patch deployment <name_of_authorino_instance> -n <namespace_for_authorino_instance> -p '{"spec": {"template":{"metadata":{"labels":{"sidecar.istio.io/inject":"true"}}}} }'

検証

  • 以下の手順で、Authorino インスタンスが実行されていることを確認します。

    1. 次の例のとおり、Authorino インスタンス用に作成した namespace で実行されている Pod (およびコンテナー) を確認します。

      $ oc get pods -n redhat-ods-applications-auth-provider -o="custom-columns=NAME:.metadata.name,STATUS:.status.phase,CONTAINERS:.spec.containers[*].name"
    2. 出力が次の例のようになっていることを確認します。

      NAME                         STATUS    CONTAINERS
      authorino-6bc64bd667-kn28z   Running   authorino,istio-proxy

      例が示すとおり、Authorino インスタンスには実行中の Pod が 1 つあります。Pod には、Authorino 用のコンテナーと、注入した Istio サイドカー用のコンテナーがあります。

3.3.3.3. Authorino を使用するための OpenShift Service Mesh インスタンス設定

Authorino インスタンスを作成したら、Authorino を認可プロバイダーとして使用するように OpenShift Service Mesh インスタンスを設定する必要があります。

重要

OpenShift Service Mesh インスタンスがサポートのサポート状態維持するには、次の手順に示す設定の更新 のみ を行ってください。

前提条件

  • Authorino インスタンスが作成され、OpenShift Service Mesh インスタンスに Authorino インスタンスの namespace が登録されている。
  • OpenShift Service Mesh インスタンスを変更する権限がある。OpenShift Service Mesh インスタンスの作成 を参照してください。

手順

  1. OpenShift Service Mesh インスタンスの更新権限を持つユーザーとして OpenShift クラスターにログインしていない場合は、次の例のとおりターミナルウィンドウで OpenShift CLI にログインします。

    $ oc login <openshift_cluster_url> -u <username> -p <password>
  2. 次の内容で新しい YAML ファイルを作成します。

    spec:
     techPreview:
       meshConfig:
         extensionProviders:
         - name: redhat-ods-applications-auth-provider
           envoyExtAuthzGrpc:
             service: <name_of_authorino_instance>-authorino-authorization.<namespace_for_authorino_instance>.svc.cluster.local
             port: 50051
  3. YAML ファイルを保存します。
  4. oc patch コマンドを使用して、YAML ファイルを OpenShift Service Mesh インスタンスに適用します。

    $ oc patch smcp <name_of_service_mesh_instance> --type merge -n <namespace_for_service_mesh_instance> --patch-file <file_name>.yaml
    重要

    OpenShift Service Mesh インスタンスで他のエクステンションプロバイダーを指定していない場合に 限り、パッチとして表示される設定を適用できます。他のエクステンションプロバイダーをすでに指定している場合は、ServiceMeshControlPlane リソースを手動で編集して設定を追加する必要があります。

検証

  • 以下の手順を実行して、Authorino インスタンスが OpenShift Service Mesh 設定にエクステンションプロバイダーとして追加されていることを確認します。

    1. OpenShift Service Mesh インスタンスの ConfigMap オブジェクトを検査します。

      $ oc get configmap istio-<name_of_service_mesh_instance> -n <namespace_for_service_mesh_instance> --output=jsonpath={.data.mesh}
    2. 次の例のような出力が表示されることを確認します。これは、Authorino インスタンスがエクステンションプロバイダーとして正常に追加されたことを示しています。

      defaultConfig:
        discoveryAddress: istiod-data-science-smcp.istio-system.svc:15012
        proxyMetadata:
          ISTIO_META_DNS_AUTO_ALLOCATE: "true"
          ISTIO_META_DNS_CAPTURE: "true"
          PROXY_XDS_VIA_AGENT: "true"
        terminationDrainDuration: 35s
        tracing: {}
      dnsRefreshRate: 300s
      enablePrometheusMerge: true
      extensionProviders:
      - envoyExtAuthzGrpc:
          port: 50051
          service: authorino-authorino-authorization.opendatahub-auth-provider.svc.cluster.local
        name: opendatahub-auth-provider
      ingressControllerMode: "OFF"
      rootNamespace: istio-system
      trustDomain: null%

3.3.3.4. KServe の認可設定

Authorino を使用するようにシングルモデルサービングプラットフォームを設定するには、モデルのデプロイ時に作成される KServe プリディクター Pod に適用されるグローバル AuthorizationPolicy リソースを作成する必要があります。さらに、モデルに対して推論リクエストを行うときに発生する複数のネットワークホップを考慮するには、HTTP ホストヘッダーを最初に推論リクエストに含まれていたものに継続的にリセットする EnvoyFilter リソースを作成する必要があります。

前提条件

  • Authorino インスタンスを作成し、それを使用するように OpenShift Service Mesh を設定した。
  • クラスター上の KServe デプロイメントを更新する権限がある。
  • OpenShift Service Mesh インスタンスが作成されたプロジェクトにリソースを追加する権限がある。OpenShift Service Mesh インスタンスの作成 を参照してください。

手順

  1. KServe デプロイメントの更新権限を持つユーザーとして OpenShift クラスターにログインしていない場合は、次の例のとおりターミナルウィンドウで OpenShift CLI にログインします。

    $ oc login <openshift_cluster_url> -u <username> -p <password>
  2. 次の内容で新しい YAML ファイルを作成します。

    apiVersion: security.istio.io/v1beta1
    kind: AuthorizationPolicy
    metadata:
      name: kserve-predictor
    spec:
      action: CUSTOM
      provider:
         name: redhat-ods-applications-auth-provider 1
      rules:
         - to:
              - operation:
                   notPaths:
                      - /healthz
                      - /debug/pprof/
                      - /metrics
                      - /wait-for-drain
      selector:
         matchLabels:
            component: predictor
    1
    指定する名前は、OpenShift Service Mesh インスタンスに追加したエクステンションプロバイダーの名前と一致する必要があります。
  3. YAML ファイルを保存します。
  4. OpenShift Service Mesh インスタンスの namespace に AuthorizationPolicy リソースを作成します。

    $ oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml
  5. 次の内容で、別の新しい YAML ファイルを作成します。

    apiVersion: networking.istio.io/v1alpha3
    kind: EnvoyFilter
    metadata:
      name: activator-host-header
    spec:
      priority: 20
      workloadSelector:
        labels:
          component: predictor
      configPatches:
      - applyTo: HTTP_FILTER
        match:
          listener:
            filterChain:
              filter:
                name: envoy.filters.network.http_connection_manager
        patch:
          operation: INSERT_BEFORE
          value:
            name: envoy.filters.http.lua
            typed_config:
              '@type': type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua
              inlineCode: |
               function envoy_on_request(request_handle)
                  local headers = request_handle:headers()
                  if not headers then
                    return
                  end
                  local original_host = headers:get("k-original-host")
                  if original_host then
                    port_seperator = string.find(original_host, ":", 7)
                    if port_seperator then
                      original_host = string.sub(original_host, 0, port_seperator-1)
                    end
                    headers:replace('host', original_host)
                  end
                end

    示されている EnvoyFilter リソースは、HTTP ホストヘッダーを、推論リクエストに最初に含まれていたものに継続的にリセットします。

  6. OpenShift Service Mesh インスタンスの namespace に EnvoyFilter リソースを作成します。

    $ oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml

検証

  • AuthorizationPolicy リソースが正常に作成されたことを確認します。

    $ oc get authorizationpolicies -n <namespace_for_service_mesh_instance>

    次の例のような出力が表示されることを確認します。

    NAME               AGE
    kserve-predictor   28h
  • EnvoyFilter リソースが正常に作成されたことを確認します。

    $ oc get envoyfilter -n <namespace_for_service_mesh_instance>

    次の例のような出力が表示されることを確認します。

    NAME                                          AGE
    activator-host-header                         28h
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.