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 が インストール されている。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
Red Hat OpenShift Service Mesh に必要な namespace を作成します。
$ oc create ns istio-system
以下のような出力が表示されます。
namespace/istio-system created
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 コントロールプレーン設定リファレンス を参照してください。
サービスメッシュコントロールプレーンを作成します。
$ 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 が インストール されている。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
Knative Serving に必要なプロジェクト (つまり namespace) がすでに存在するかどうかを確認します。
$ oc get ns knative-serving
プロジェクトが存在する場合は、次の例のような出力が表示されます。
NAME STATUS AGE knative-serving Active 4d20h
knative-serving
プロジェクトがまだ存在 しない 場合は、作成します。$ oc create ns knative-serving
以下のような出力が表示されます。
namespace/knative-serving created
以下の内容で、
default-smm.yaml
という YAML ファイルにServiceMeshMember
オブジェクトを定義します。apiVersion: maistra.io/v1 kind: ServiceMeshMember metadata: name: default namespace: knative-serving spec: controlPlaneRef: namespace: istio-system name: minimal
istio-system
namespace にServiceMeshMember
オブジェクトを作成します。$ oc apply -f default-smm.yaml
以下のような出力が表示されます。
servicemeshmember.maistra.io/default created
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 のそれぞれに次のアクションも追加します。注記Knative サービスのカスタムドメインを設定する場合、TLS 証明書を使用してマップされたサービスを保護できます。これを行うには、TLS シークレットを作成してから、作成した TLS シークレットを使用するように
DomainMapping
CR を更新する必要があります。詳細は、Red Hat OpenShift Serverless ドキュメントの TLS 証明書を使用したマップされたサービスの保護 を参照してください。指定された
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 を ダウンロードしてインストール している。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>
重要ゲートウェイの設定時に指定する独自のワイルドカード証明書とキーがある場合は、この手順のステップ 11 に進みます。
環境変数を設定して、ゲートウェイのワイルドカード証明書とキーを生成するためのベースディレクトリーを定義します。
$ export BASE_DIR=/tmp/kserve $ export BASE_CERT_DIR=${BASE_DIR}/certs
環境変数を設定して、OpenShift クラスターの Ingress コントローラーで使用される共通名を定義します。
$ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
環境変数を設定して、OpenShift クラスターの Ingress コントローラーによって使用されるドメイン名を定義します。
$ export DOMAIN_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}')
以前に設定した環境変数に基づいて、証明書の生成に必要なベースディレクトリーを作成します。
$ mkdir ${BASE_DIR} $ mkdir ${BASE_CERT_DIR}
ワイルドカード証明書を生成するための OpenSSL 設定を作成します。
$ cat <<EOF> ${BASE_DIR}/openssl-san.config [ req ] distinguished_name = req [ san ] subjectAltName = DNS:*.${DOMAIN_NAME} EOF
ルート証明書を生成します。
$ 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
ルート証明書によって署名されたワイルドカード証明書を生成します。
$ 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
ワイルドカード証明書を確認します。
$ openssl verify -CAfile ${BASE_DIR}/root.crt ${BASE_DIR}/wildcard.crt
スクリプトによって作成されたワイルドカードキーと証明書を新しい環境変数にエクスポートします。
$ export TARGET_CUSTOM_CERT=${BASE_CERT_DIR}/wildcard.crt $ export TARGET_CUSTOM_KEY=${BASE_CERT_DIR}/wildcard.key
オプション: 独自 のワイルドカードキーと証明書を新しい環境変数にエクスポートするには、次のコマンドを入力します。
$ 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}'
ワイルドカード証明書とキーに設定した環境変数を使用して、
istio-system
namespace に TLS シークレットを作成します。$ oc create secret tls wildcard-certs --cert=${TARGET_CUSTOM_CERT} --key=${TARGET_CUSTOM_KEY} -n istio-system
次の内容を含む
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: - "*"
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
オブジェクトが 作成 されている。
手順
- OpenShift Web コンソールにクラスター管理者としてログインします。
-
Web コンソールで、Operators
Installed Operators をクリックし、Red Hat OpenShift AI Operator をクリックします。 KServe をインストールするには、OpenShift Service Mesh コンポーネントを次のように設定します。
- DSC Initialization タブをクリックします。
- default-dsci オブジェクトをクリックします。
- YAML タブをクリックします。
spec
セクションで、次のようにserviceMesh
コンポーネントを追加して設定します。spec: serviceMesh: managementState: Unmanaged
- Save をクリックします。
KServe をインストールするには、KServe および OpenShift Serverless コンポーネントを次のように設定します。
-
Web コンソールで、Operators
Installed Operators をクリックし、Red Hat OpenShift AI Operator をクリックします。 - Data Science Cluster タブをクリックします。
- default-dsc DSC オブジェクトをクリックします。
- YAML タブをクリックします。
spec.components
セクションで、次のようにkserve
コンポーネントを設定します。spec: components: kserve: managementState: Managed
kserve
コンポーネント内で、serving
コンポーネントを追加し、次のように設定します。spec: components: kserve: managementState: Managed serving: managementState: Unmanaged
- Save をクリックします。
-
Web コンソールで、Operators
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 クラスターのクラスター管理者権限を持っている。
手順
- OpenShift Web コンソールにクラスター管理者としてログインします。
-
Web コンソールで Operators
OperatorHub をクリックします。 - OperatorHub ページの Filter by keyword フィールドに、Red Hat - Authorino と入力します。
- Red Hat - Authorino Operator をクリックします。
- Red Hat - Authorino Operator ページで、Operator 情報を確認して Install をクリックします。
- Install Operator ページの Update channel、Version、Installation mode、Installed Namespace、Update Approval は、デフォルト値のままにします。
- Install をクリックします。
検証
OpenShift Web コンソールで、Operators
Installed Operators をクリックし、 Red Hat - Authorino
Operator が以下のいずれかのステータスを示していることを確認します。-
Installing
- インストールが進行中です。Succeeded
が表示されるまで待機してください。これには数分かかる場合があります。 -
Succeeded
- インストールに成功しました。
-
3.3.3.2. Authorino インスタンスの作成
OpenShift クラスターに Red Hat - Authorino
Operator をインストールしたら、Authorino インスタンスを作成する必要があります。
前提条件
-
Red Hat - Authorino
Operator がインストールされている。 OpenShift Service Mesh インスタンスが作成されたプロジェクトにリソースを追加する権限がある。OpenShift Service Mesh インスタンスの作成 を参照してください。
OpenShift の権限の詳細は、Using RBAC to define and apply permissions を参照してください。
手順
- 新しいターミナルウィンドウを開きます。
次のように OpenShift コマンドラインインターフェイス (CLI) にログインします。
$ oc login <openshift_cluster_url> -u <username> -p <password>
Authorino インスタンスのインストールに使用する namespace を作成します。
$ oc new-project <namespace_for_authorino_instance>
注記自動インストールプロセスにより、Authorino インスタンス用に
redhat-ods-applications-auth-provider
という namespace が作成されます。手動インストールで使用する namespace も同じ名前にすることを検討してください。既存の 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>
- YAML ファイルを保存します。
クラスター上に
ServiceMeshMember
リソースを作成します。$ oc create -f <file_name>.yaml
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
- YAML ファイルを保存します。
クラスター上に
Authorino
リソースを作成します。$ oc create -f <file_name>.yaml
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 インスタンスが実行されていることを確認します。
次の例のとおり、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"
出力が次の例のようになっていることを確認します。
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 インスタンスの作成 を参照してください。
手順
OpenShift Service Mesh インスタンスの更新権限を持つユーザーとして OpenShift クラスターにログインしていない場合は、次の例のとおりターミナルウィンドウで OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <username> -p <password>
次の内容で新しい 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
- YAML ファイルを保存します。
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 設定にエクステンションプロバイダーとして追加されていることを確認します。
OpenShift Service Mesh インスタンスの
ConfigMap
オブジェクトを検査します。$ oc get configmap istio-<name_of_service_mesh_instance> -n <namespace_for_service_mesh_instance> --output=jsonpath={.data.mesh}
次の例のような出力が表示されることを確認します。これは、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 インスタンスの作成 を参照してください。
手順
KServe デプロイメントの更新権限を持つユーザーとして OpenShift クラスターにログインしていない場合は、次の例のとおりターミナルウィンドウで OpenShift CLI にログインします。
$ oc login <openshift_cluster_url> -u <username> -p <password>
次の内容で新しい 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 インスタンスに追加したエクステンションプロバイダーの名前と一致する必要があります。
- YAML ファイルを保存します。
OpenShift Service Mesh インスタンスの namespace に
AuthorizationPolicy
リソースを作成します。$ oc create -n <namespace_for_service_mesh_instance> -f <file_name>.yaml
次の内容で、別の新しい 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 ホストヘッダーを、推論リクエストに最初に含まれていたものに継続的にリセットします。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