4.4. 为 single-model 服务平台添加授权供应商
您可以将 Authorino 添加为 single-model 服务平台的授权供应商。通过添加授权供应商,您可以为平台上部署的模型启用令牌授权,这样可确保只有授权方能够对模型发出推测请求。
用于将 Authorino 添加为授权提供程序的方法取决于您如何安装单model服务平台。该平台的安装选项如下所述:
- 自动安装
如果您还没有在 OpenShift 集群上创建
ServiceMeshControlPlane
或KNativeServing
资源,您可以将 Red Hat OpenShift AI Operator 配置为安装 KServe 及其依赖项。您可以包含 Authorino 作为自动安装过程的一部分。有关自动安装的更多信息,包括 Authorino,请参阅配置 KServe 的自动安装。
- 手动安装
如果您已在 OpenShift 集群上创建了
ServiceMeshControlPlane
或KNativeServing
资源,则无法 配置 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 集群的集群管理员特权。
流程
- 以集群管理员身份登录 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
- 安装成功。
-
4.4.3. 创建 Authorino 实例
在 OpenShift 集群上安装 Red Hat - Authorino
Operator 时,您必须创建一个 Authorino 实例。
先决条件
-
已安装
Red Hat - Authorino
Operator。 您有将资源添加到创建 OpenShift Service Mesh 实例的项目中的权限。请参阅创建 OpenShift Service Mesh 实例。
如需有关 OpenShift 权限的更多信息,请参阅使用 RBAC 定义和应用权限 (Red Hat OpenShift Dedicated)或使用 RBAC 定义并应用权限 (Red Hat OpenShift Service on AWS)。
流程
- 打开一个新的终端窗口。
登录到 OpenShift 命令行界面(CLI),如下所示:
$ oc login <openshift_cluster_url> -u <username> -p <password>
创建一个命名空间来安装 Authorino 实例。
$ oc new-project <namespace_for_authorino_instance>
注意自动安装过程为 Authorino 实例创建一个名为
redhat-ods-applications-auth-provider
的命名空间。考虑在手动安装时使用相同的命名空间名称。要在现有 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>
- 保存 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 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 实例正在运行,如下所示:
检查您为 Authorino 实例创建的命名空间中运行的 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。pod 为 Authorino 和您注入的 Istio sidecar 容器。
4.4.4. 将 OpenShift Service Mesh 实例配置为使用 Authorino
创建 Authorino 实例时,您必须将 OpenShift Service Mesh 实例配置为使用 Authorino 作为授权供应商。
为确保 OpenShift Service Mesh 实例处于支持状态,请只 进行以下流程中显示的配置更新。
先决条件
- 您已创建了 Authorino 实例,并在 OpenShift Service Mesh 实例中注册 Authorino 实例的命名空间。
- 有修改 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%
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 实例。
流程
在一个终端窗口中,如果您还没有以具有更新 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 实例创建
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 实例创建
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