4.4. 为 single-model 服务平台添加授权供应商


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

用于将 Authorino 添加为授权提供程序的方法取决于您如何安装单model服务平台。该平台的安装选项如下所述:

自动安装

如果您还没有在 OpenShift 集群上创建 ServiceMeshControlPlaneKNativeServing 资源,您可以将 Red Hat OpenShift AI Operator 配置为安装 KServe 及其依赖项。您可以包含 Authorino 作为自动安装过程的一部分。

有关自动安装的更多信息,包括 Authorino,请参阅配置 KServe 的自动安装

手动安装

如果您已在 OpenShift 集群上创建了 ServiceMeshControlPlaneKNativeServing 资源,则无法 配置 Red Hat OpenShift AI Operator 来安装 KServe 及其依赖项。在这种情况下,您必须手动安装 KServe。您还必须手动配置 Authorino。

有关手动安装的更多信息,包括 Authorino,请参阅 手动安装 KServe

4.4.1. 手动添加授权供应商

您可以将 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

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

验证

  • 在 OpenShift Web 控制台中,点 Operators Installed Operators,并确认 Red Hat - Authorino Operator 显示了以下状态之一:

    • Installing - 安装正在进行中;等待它变为 Succeeded。这可能需要几分钟。
    • Succeeded - 安装成功。

4.4.3. 创建 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 容器。

4.4.4. 将 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%

4.4.5. 为 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.