模型 Web 应用

KServe 模型 Web 应用概述

什么是 KServe 模型 Web 应用?

The KServe 模型 Web 应用 是 KServe 的一个组件,它提供了一种用户友好的方式来处理 Kubeflow 集群中 InferenceService CR 的生命周期。这允许用户无需直接与 Kubernetes 资源交互即可创建、删除和检查其模型服务器的状态。

作为 Kubeflow 的一部分安装

自 Kubeflow 1.5 版本发布以来,该 Web 应用已 包含在 kubeflow/manifests

默认情况下,它在 Kubeflow 中央仪表盘中作为菜单链接暴露。

独立安装

请参考 kserve/models-web-app 仓库获取独立安装说明。

在这种情况下,Web 应用的所有资源将安装在 kserve 命名空间中。用户可以通过 knative-ingress-gateway.knative-serving Istio Ingress Gateway 访问 Web 应用,或者通过端口转发后端进行访问。

要端口转发后端,您可以使用以下命令

# set the following ENV vars in the app's Deployment
kubectl edit -n kserve deployments.apps kserve-models-web-app
# APP_PREFIX: /
# APP_DISABLE_AUTH: "True"
# APP_SECURE_COOKIES: "False"

# expose the app under localhost:5000
kubectl port-forward -n kserve svc/kserve-models-web-app 5000:80

以下是可以配置应用程序不同方面的环境变量列表。

环境变量默认值描述
APP_PREFIX“/models”通过设置 base-url 元素控制应用的路径前缀
APP_DISABLE_AUTH“False”控制应用是否应使用 SubjectAccessReviews 来确保用户有权执行操作
APP_SECURE_COOKIES“True”控制应用是否应使用 安全 (Secure) CSRF cookie。默认情况下,应用期望通过 https 暴露。
CSRF_SAMESITE“Strict”控制 CSRF cookie 的 SameSite 值
USERID_HEADER“kubeflow-userid”每个请求中包含登录用户名的头部
USERID_PREFIX""USERID_HEADER 值中移除的前缀,用于提取登录用户名

用法

该 Web 应用当前支持 InferenceService 对象的 v1beta1 版本。

Web 应用暴露了来自底层 Knative 资源的信息,例如来自 Knative Configuration、Route 和 Revision 的 Conditions,以及来自模型服务器 Pod 的实时日志。

列出

应用主页提供了所选命名空间中部署的所有 InferenceService 的列表。前端定期轮询后端以获取 InferenceService 的最新状态。

Models web app main page

创建

创建新 InferenceService 的页面。用户可以粘贴希望创建的 InferenceService 的 YAML 对象。

请注意,后端将覆盖提交对象的 .metadata.namespace 字段,以防止用户尝试在其他命名空间中创建 InferenceService。

Models web app create page

删除

用户可以通过在列出所有命名空间资源的主页面上点击 InferenceService 旁边的 图标来删除现有 InferenceService。

检查

用户可以从主页面点击 InferenceService 的名称,查看该 CR 状态的更详细摘要。

Models web app overview page

指标

如上所述,Web 应用允许用户检查 InferenceService 的指标。默认情况下此标签页不会启用。要启用它,用户需要安装 Grafana 和 Prometheus。

目前,前端期望在 /grafana 路径前缀下找到 Grafana。这个 Grafana 实例需要有特定的仪表盘,以便应用能够将它们嵌入到 iframes 中。我们正在努力使其更加通用,以便人们能够暴露自己的图表。

您可以安装 Grafana 和 Prometheus,供 Web 应用使用,通过安装

  1. 来自 Knative 0.18 版本monitoring-core.yamlmonitoring-metrics-prometheus.yaml 文件
  2. 以下 yaml 文件用于在集群外部暴露 Grafana,通过允许匿名访问


apiVersion: v1
kind: ConfigMap
metadata:
  name: grafana-custom-config
  namespace: knative-monitoring
  labels:
    serving.knative.dev/release: "v0.11.0"
data:
  custom.ini: |
    # You can customize Grafana via changing the context of this field.
    [auth.anonymous]
    # enable anonymous access
    enabled = true
    [security]
    allow_embedding = true
    [server]
    root_url = "/grafana"
    serve_from_sub_path = true    


apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: grafana
  namespace: knative-monitoring
spec:
  gateways:
  - kubeflow/kubeflow-gateway
  hosts:
  - '*'
  http:
  - match:
    - uri:
        prefix: /grafana/
    route:
    - destination:
        host: grafana.knative-monitoring.svc.cluster.local
        port:
          number: 30802


apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
  name: models-web-app
  namespace: kubeflow
spec:
  action: ALLOW
  rules:
  - from:
    - source:
        principals:
        - cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account
  selector:
    matchLabels:
      kustomize.component: kserve-models-web-app
      app.kubernetes.io/component: kserve-models-web-app

根据您的安装模式应用这些 YAML 文件,并确保 Grafana 实例暴露在 /grafana 下,Web 应用将显示 指标 标签页。

Models web app metrics page

架构

Web 应用包含以下资源

  • 一个 Deployment,用于运行后端服务器并提供静态前端文件
  • 一个 Service,用于配置集群内网络流量
  • 一个 ServiceAccountClusterRole{Binding},用于授予 Web 应用 Pod 所需的权限
  • 一个 VirtualService,用于通过集群的 Istio Ingress Gateway 暴露应用

SubjectAccessReviews

Web 应用具有执行身份验证和授权检查的机制,以确保用户操作符合集群的 RBAC,此机制仅在应用的 kubeflow manifests 中启用。可以通过利用 APP_DISABLE_AUTH: "True" | "False" 环境变量来切换此机制。

此机制仅在 kubeflow manifests 中启用,因为在 Kubeflow 安装中,到达 Web 应用 Pod 的所有请求也将包含一个表示用户的自定义头部。在 Kubeflow 安装中,集群前面有一个身份验证组件,确保只有登录用户才能访问集群服务。在独立模式下,此类组件可能并未部署。

Web 应用将使用此自定义头部的值来提取发起请求的 K8s 用户名称。然后它将创建一个 SubjectAccessReview 来检查用户是否具有执行特定操作的权限,例如在某个命名空间中删除 InferenceService。

命名空间选择

独立kubeflow设置中,用户都需要能够选择一个命名空间才能与其中的 InferenceServices 交互。

独立模式下,Web 应用会显示一个下拉菜单,向用户展示所有命名空间并允许他们选择其中任何一个。后端会向 API Server 发出 LIST 请求以获取所有命名空间。在这种情况下,唯一的授权检查发生在 K8s API Server 中,确保 Web 应用 Pod 的 ServiceAccount 具有列出命名空间的权限。

kubeflow模式下,中央仪表盘负责命名空间选择。一旦用户选择一个命名空间,仪表盘将通知嵌入式的 Models Web 应用关于新选择的命名空间。在此模式下,Models Web 应用本身不会暴露下拉式命名空间选择器。

反馈

此页面有帮助吗?


最后修改于 2025 年 3 月 29 日: website: Add dark theme (#3981) (4f092f1)