自定义仪表板

自定义 Kubeflow 中央仪表板菜单项并集成第三方应用

如何自定义 Kubeflow 中央仪表板?

Kubeflow 中央仪表板提供了一种自定义菜单项和集成第三方应用的方式。

例如,下图显示了带有一个自定义“我的应用”菜单项的 Kubeflow 中央仪表板

Kubeflow Central Dashboard - Customize Menu Items

中央仪表板 ConfigMap

Kubeflow 中央仪表板使用 Kubernetes ConfigMap 进行配置。

central-dashboard Deployment 上的 CD_CONFIGMAP_NAME 环境变量指定 ConfigMap 的名称(默认为 centraldashboard-config)。

您可以在以下位置找到 ConfigMap 的示例

ConfigMap 的 externalLinks 部分在侧边栏中添加外部网站(未托管在 Kubernetes 集群上)的链接。

externalLinks 的每个元素都是一个 JSON 对象,包含以下字段

  • type:必须设置为 "item"
  • iframe:必须设置为 false
  • text:要显示的链接文本
  • link:点击链接时要打开的 URL
  • icon:要为链接显示的 iron-icon 名称。
    • 注意,您必须排除 icons: 前缀
    • 例如,要使用 icons:launch,您将设置 "launch"
    • 例如,要使用 social:mood,您将设置 "social:mood"

例如,下面的 ConfigMap 添加了一个指向 Kubeflow 网站的链接

apiVersion: v1
kind: ConfigMap
metadata:
  name: centraldashboard-config
  namespace: kubeflow
data:
  settings: |-
    ...    
  links: |-
    {
      "menuLinks": [
        ...
      ],
      "externalLinks": [
        {
          "type": "item",
          "iframe": false,
          "text": "Kubeflow Website",
          "link": "https://kubeflow.org.cn/",
          "icon": "launch"
        }
      ],
      "quickLinks": [
        ...
      ],
      "documentationItems": [
        ...
      ]
    }    

ConfigMap 的 documentationItems 部分在主页的“文档”部分添加链接。

documentationItems 的每个元素都是一个 JSON 对象,包含以下字段

  • text:要显示的链接文本
  • desc:在链接下方显示的描述
  • link:点击链接时要打开的 URL

例如,下面的 ConfigMap 添加了一个指向 Kubeflow 网站文档的链接

apiVersion: v1
kind: ConfigMap
metadata:
  name: centraldashboard-config
  namespace: kubeflow
data:
  settings: |-
    ...    
  links: |-
    {
      "menuLinks": [
        ...
      ],
      "externalLinks": [
        ...
      ],
      "quickLinks": [
        ...
      ],
      "documentationItems": [
        {
          "text": "Kubeflow Website",
          "desc": "Kubeflow website documentation",
          "link": "https://kubeflow.org.cn/docs/"
        }
      ]
    }    

创建 VirtualService

如果您在集群上运行非 Kubeflow 应用,可以通过在 Kubeflow Istio Gateway 上创建 VirtualService 将其暴露出来。为此,您的应用必须注入 Istio sidecar 并作为 Kubernetes Service 暴露。

例如,下面的 VirtualServicemy-namespace 命名空间中的 Service/my-app 暴露在 Kubeflow Istio Gateway 的 /my-app/ 路径下

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-custom-app
  namespace: <MY_APP_NAMESPACE>
spec:
  gateways:
    ## the istio gateway which is serving kubeflow
    ## TEMPLATE: <KUBEFLOW_GATEWAY_NAMESPACE>/<KUBEFLOW_GATEWAY_NAME>
    - kubeflow/kubeflow-gateway
  hosts:
    - '*'
  http:
    - headers:
        request:
          add:
            x-forwarded-prefix: /my-app
      match:
        - uri:
            prefix: /my-app/
      rewrite:
        uri: /
      route:
        - destination:
            host: <MY_APP_SERVICE_NAME>.<MY_APP_NAMESPACE>.svc.cluster.local
            port:
              number: 80

创建此 VirtualService 应该会使应用程序在 Kubeflow Istio Gateway 的 /_/my-app/ 路径下可用。

http(s)://<KUBEFLOW_ISTIO_GATEWAY>/_/my-app/

ConfigMap 的 menuLinks 部分在侧边栏中添加集群内应用程序的链接。

menuLinks 的每个元素都是一个 JSON 对象,包含以下字段

  • type:必须设置为 "item"
  • link:点击链接时打开的路径
  • text:要显示的链接文本
  • icon:要为链接显示的 iron-icon 名称。
    • 注意,您必须排除 icons: 前缀
    • 例如,要使用 icons:launch,您将设置 "launch"
    • 例如,要使用 social:mood,您将设置 "social:mood"

例如,下面的 ConfigMap 添加了上面提到的“我的应用”应用程序

apiVersion: v1
kind: ConfigMap
metadata:
  name: centraldashboard-config
  namespace: kubeflow
data:
  settings: |-
    ...    
  links: |-
    {
      "menuLinks": [
        ...
        {
          "type": "item",
          "link": "/my-app/",
          "text": "My App",
          "icon": "social:mood"
        },
        ...
      ],
      "externalLinks": [
        ...
      ],
      "quickLinks": [
        ...
      ],
      "documentationItems": [
        ...
      ]
    }    

反馈

本页是否有帮助?


上次修改于 2025年3月29日:website: 添加深色主题 (#3981) (4f092f1)