Запуск JupyterLab/Elyra параллельно с пользовательским интерфейсом Kubeflow Pipelines на одном контроллере Ingress
Я установил Elyra (это JupyerLab + некоторые расширения, ориентированные на ИИ, включая визуальный редактор для создания конвейеров Kubeflow) и конвейеры KubeFlow параллельно в кластере KIND (Kubernetes In Docker).
Сначала я установил Kubeflow Pipelines, как описано здесь.
export
PIPELINE_VERSION=1.4.1kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/cluster-scoped-resources?ref=$PIPELINE_VERSION"
kubectl wait --for condition= installed --timeout=60s crd / applications .app.k8s.io
kubectl apply -k "github.com/kubeflow/pipelines/manifests/kustomize/env/platform-agnostic-pns?ref=$PIPELINE_VERSION"
Затем я установил NGINX Ingress Controller, как описано здесь.
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/kind/deploy.yaml
Наконец, я установил Elyra / JupyterLab, выполнив следующие действия.
Итак, для всех пользовательских интерфейсов, которые мне нужны, уже созданы соответствующие службы:
k получить svc
ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (
-а ) Возраст elyra-ai NodePort 10.96.84.31 8888:32111 / TCP 94m
kubernetes ClusterIP 10.96.0.1 443 / TCP 105m
k получить 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, ...
Итак, теперь я застрял в двух измерениях.
- Я не хочу добавлять записи пути для каждого устанавливаемого расширения JupyterLab.
- Я не могу найти способ сделать пользовательский интерфейс Kubeflow Pipelines доступным извне кластера.
Редактор Elyra Pipeline Editor может получить доступ к конечной точке Kubeflow Pipelines через ClusterIP, но было бы неплохо иметь доступ и к пользовательскому интерфейсу Kubeflow Pipelines ...
1 ответ
Самый простой способ - использовать виртуальные хосты. Так что либо в 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