在单个 Ingress Controller 上并行运行多个应用程序例如 JupyterLab/Elyra + Kubeflow Pipelines UI

问题描述

我已经在 KIND(Docker 中的 Kubernetes)集群上并行安装了 Elyra(它是 JupyerLab + 一些以 AI 为中心的扩展,包括用于创建 Kubeflow 管道的可视化编辑器)和 KubeFlow 管道。

首先,我按照文档中的说明安装了 Kubeflow 管道 here

导出 PIPELINE_VERSION=1.4.1
kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=$PIPELINE_VERSION"
kubectl wait --for 条件=建立 --timeout=60s crd/applications.app.k8s.io
kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/platform-agnostic-pns?ref=$PIPELINE_VERSION"

然后,我已经按照 here

文档中的说明安装了 NGINX 入口控制器

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml

最后,我使用以下 steps

安装了 Elyra/JupyterLab

所以我需要的所有 UI 都已经创建了相应的服务:

k 获取 svc
名称 类型 CLUSTER-IP EXTERNAL-IP PORT(S) AGE
elyra-ai NodePort 10.96.84.31 8888:32111/TCP 94m
kubernetes ClusterIP 10.96.0.1 443/TCP 105m

k get svc -n kubeflow |grep ml-pipeline-ui
ml-pipeline-ui ClusterIP 10.96.132.233 80/TCP 105m

因此,我创建了一个 ingress.yaml 以允许访问 JupyterLab/Elyra。

如您所见,我添加了许多路径条目,例如 login、elyra、git、lsp、lab、kernelspecs、static ......

所以现在我陷入了二维。

  1. 我不想为我正在安装的每个 JupyterLab 扩展添加路径条目
  2. 我找不到让 Kubeflow Pipelines UI 从集群外部访问的方法

虽然 Elyra 管道编辑器可以通过 ClusterIP 访问 Kubeflow 管道端点,但也可以访问 Kubeflow 管道 UI...

解决方法

最简单的方法是使用虚拟主机。因此,无论是在 DNS 中还是在您的 /etc/hosts 文件中添加,例如:

127.0.0.1 elyra.local.host
127.0.0.1 kubeflow.local.host

然后这两个 service.yaml 就变得简单了,对于 Elyra/JupyteLab:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: elyra-ingress
spec:
  rules:
  - host: "elyra.local.host"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: elyra-ai
            port:
              number: 8888

对于 Kubeflow 管道:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kfp-ingress
spec:
  rules:
  - host: "kubeflow.local.host"
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ml-pipeline-ui
            port:
              number: 80

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...