搜索

3.3. 手动安装 KServe

download PDF

如果您已经安装了 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,请联系红帽支持。

3.3.1. 安装 KServe 依赖项

在安装 KServe 之前,您必须安装并配置一些依赖项。具体来说,您必须创建 Red Hat OpenShift Service Mesh 和 Knative Serving 实例,然后为 Knative Serving 配置安全网关。

注意

目前,只支持 OpenShift Service Mesh v2。如需更多信息,请参阅 支持的配置

3.3.1.1. 创建 OpenShift Service Mesh 实例

以下流程演示了如何创建 Red Hat OpenShift Service Mesh 实例。

先决条件

  • 具有 OpenShift Container Platform 集群的集群管理员特权。
  • 您的集群有一个有 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 创建所需的命名空间。

    $ 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 control plane 配置参考

  4. 创建服务网格 control plane。

    $ oc apply -f smcp.yaml

验证

  • 验证服务网格实例的创建,如下所示:

    • 在 OpenShift CLI 中输入以下命令:

      $ oc get pods -n istio-system

      前面的命令列出了 istio-system 项目中运行的所有 pod。这是安装 OpenShift Service Mesh 的项目。

    • 确认存在用于服务网格 control plane、入口网关和出口网关的 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 Container Platform 集群的集群管理员特权。
  • 您的集群有一个有 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 所需的项目(即 命名空间)是否已存在。

    $ 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 命名空间中创建 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 添加以下操作:

    1
    将 Istio sidecar 注入 pod。这使得 pod 成为服务网格的一部分。
    2
    启用 Istio sidecar 为 pod 重写 HTTP 存活度和就绪度探测。
    注意

    如果为 Knative 服务配置自定义域,您可以使用 TLS 证书来保护映射的服务。要做到这一点,您必须创建一个 TLS secret,然后更新 DomainMapping CR 以使用您创建的 TLS secret。如需更多信息,请参阅 Red Hat OpenShift Serverless 文档中的使用 TLS 证书保护映射的服务

  7. 在指定的 knative-serving 命名空间中创建 KnativeServing 对象。

    $ oc apply -f knativeserving-istio.yaml

    您会看到以下输出:

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

验证

  • 查看 istio-system 命名空间中的默认 ServiceMeshMemberRoll 对象。

    $ oc describe smmr default -n istio-system

    ServiceMeshMemberRoll 对象的描述中,找到 Status.Members 字段,并确认它包含 knative-serving 命名空间。

  • 验证 Knative Serving 实例的创建,如下所示:

    • 在 OpenShift CLI 中输入以下命令:

      $ oc get pods -n knative-serving

      前面的命令列出了 knative-serving 项目中运行的所有 Pod。这是在其中创建 Knative Serving 实例的项目。

    • 确认 knative-serving 项目中有许多正在运行的 Pod,包括 activator、autoscaler、controller 和域映射 Pod,以及用于 Knative Istio 控制器的 Pod,用于控制 OpenShift Serverless 和 OpenShift Service Mesh 集成。显示了一个示例。

      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 创建本地和入口网关。

重要

如果您有自己的通配符证书和密钥在配置网关时指定,您可以跳过到此流程的第 11 步。

先决条件

  • 具有 OpenShift Container Platform 集群的集群管理员特权。
  • 您已下载并安装 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 集群的入口控制器使用的通用名称。

    $ export COMMON_NAME=$(oc get ingresses.config.openshift.io cluster -o jsonpath='{.spec.domain}' | awk -F'.' '{print $(NF-1)"."$NF}')
  4. 设置环境变量以定义 OpenShift 集群的入口控制器使用的域名。

    $ 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. 生成 root 证书。

    $ 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. 生成由 root 证书签名的通配符证书。

    $ 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 集群的入口控制器使用的域名。您可以运行以下命令来检查这个值:

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

  12. 使用您为通配符证书和密钥设置的环境变量,在 istio-system 命名空间中创建 TLS secret。

    $ 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
    istio-system 命名空间中为 Knative 本地网关定义服务。
    2
    knative-serving 命名空间中 定义一个入口网关。网关使用您在此流程前面创建的 TLS secret。入口网关处理 Knative 的外部流量。
    3
    knative-serving 命名空间中为 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         	NAME                      	AGE
    knative-serving   	knative-ingress-gateway   	69s
    knative-serving     knative-local-gateway     	2m

3.3.2. 安装 KServe

要完成 KServe 的手动安装,您必须安装 Red Hat OpenShift AI Operator。然后,您可以将 Operator 配置为安装 KServe。

先决条件

  • 具有 OpenShift Container Platform 集群的集群管理员特权。
  • 您的集群有一个有 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 初始化选项卡。
    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 组件中,添加 服务组件 并配置它,如下所示:

      spec:
       components:
         kserve:
           managementState: Managed
           serving:
             managementState: Unmanaged
    7. 点击 Save

3.3.3. 手动添加授权供应商

您可以将 Authorino 添加为 single-model 服务平台的授权供应商。通过添加授权供应商,您可以为平台上部署的模型启用令牌授权,这样可确保只有授权方能够对模型发出推测请求。

要手动将 Authorino 添加为授权提供程序,您必须安装 Red Hat - Authorino Operator,创建 Authorino 实例,然后将 OpenShift Service Mesh 和 KServe 组件配置为使用该实例。

重要

要手动添加授权供应商,您必须对 OpenShift Service Mesh 实例进行配置更新。要确保 OpenShift Service Mesh 实例处于支持状态,请只 进行本节中显示的更新。

先决条件

  • 您已查看了将 Authorino 作为授权提供程序添加的选项,并将手动安装作为适当的选项。请参阅 添加授权提供程序
  • 您已手动安装 KServe 及其依赖项,包括 OpenShift Service Mesh。请参阅 手动安装 KServe
  • 手动安装 KServe 时,您可以将 serviceMesh 组件的 managementState 字段的值设置为 Unmanaged。手动添加 Authorino 需要此设置。请参阅 安装 KServe

3.3.3.1. 安装 Red Hat Authorino Operator

在将 Autorino 添加为授权提供程序前,您必须在 OpenShift 集群上安装 Red Hat - Authorino Operator。

先决条件

  • 具有集群管理员特权。

流程

  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 channel,Version,Installation mode,Installed NamespaceUpdate Approval 的默认值。
  7. Install

验证

  • 在 OpenShift Container Platform 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 实例。

    $ oc new-project <namespace_for_authorino_instance>
    注意

    自动安装过程为 Authorino 实例创建一个名为 redhat-ods-applications-auth-provider 的命名空间。考虑在手动安装时使用相同的命名空间名称。

  4. 要在现有 OpenShift Service Mesh 实例中为 Authorino 实例注册新命名空间,请创建一个包含以下内容的新 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 sidecar,这会使 OpenShift Service Mesh 实例的 Authorino 实例的一部分。

    $ 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 实例创建的命名空间中运行的 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。pod 为 Authorino 和您注入的 Istio sidecar 容器。

3.3.3.3. 将 OpenShift Service Mesh 实例配置为使用 Authorino

创建 Authorino 实例时,您必须将 OpenShift Service Mesh 实例配置为使用 Authorino 作为授权供应商。

重要

为确保 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 配置授权

要将 single-model 服务平台配置为使用 Authorino,您必须创建一个全局 AuthorizationPolicy 资源,该资源应用到部署模型时创建的 KServe predictor pod。另外,要考虑在对模型发出 inference 请求时发生的多个网络跃点,您必须创建一个 EnvoyFilter 资源,以持续将 HTTP 主机标头重置为最初包含在ference 请求中的标头。

先决条件

  • 您已创建了 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 实例创建 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 实例创建 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

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.