跳转到主要内容

将批处理作业请求代理到Kubernetes。

项目描述

kbatch-proxy

一个简单的Kubernetes代理,允许JupyterHub用户在无需直接访问Kubernetes API的情况下向Kubernetes API发送请求。

动机

我们希望 kbatch 用户能够创建Kubernetes作业,访问日志等,但

  1. 不希望授予他们 直接 访问Kubernetes API的权限
  2. 不希望维护一个独立的Web应用程序,其任何状态都与Kubernetes独立

因此出现了 kbatch-proxy

设计

一个简单的FastAPI应用程序,位于 kbatch 用户和Kubernetes API之间。预期 kbatch-proxy 应用程序可以访问Kubernetes API,并具有创建命名空间、作业等的权限。这通常作为一个JupyterHub服务运行。

用户将对 kbatch-proxy 发送请求。在请求时,我们将

  1. 验证用户是否通过JupyterHub进行了身份验证(检查 Bearer 令牌)
  2. 验证用户提交或请求的数据是否符合我们的 安全模型
  3. 代表用户向Kubernetes API发送请求

安全模型

这还有待证明是有效的,但希望让用户在自己的命名空间中做他们想做的任何事情,而不会影响到他们命名空间之外的事情。

容器镜像

我们在 https://github.com/kbatch-dev/kbatch/pkgs/container/kbatch-proxy 提供容器镜像。

$ docker pull ghcr.io/kbatch-dev/kbatch-proxy:latest

部署

kbatch-proxy 最容易通过Helm作为JupyterHub服务部署。需要配置一些值

# file: config.yaml
app:
  jupyterhub_api_token: "<jupyterhub-api-token>"
  jupyterhub_api_url: "https://<jupyterhub-url>/hub/api/"
  extra_env:
    KBATCH_PREFIX: "/services/kbatch"

# image:
#   tag: "0.1.4"  # you likely want to pin the latest here.

注意:我们目前没有发布Helm图表,因此您需要 git clone kbatch存储库。

kbatch/kbatch-proxy 目录,使用Helm安装图表

$ helm upgrade --install kbatch-proxy ../helm/kbatch-proxy/ \
    -n "<namepsace> \
    -f config.yaml

您需要将kbatch配置为JupyterHub服务。此示例将其设置为 /services/kbatch(这应与上面的 KBATCH_PREFIX 相匹配)

jupyterhub:
  hub:
    services:
      kbatch:
        admin: true
        api_token: "<jupyterhub-api-token>"  # match the api token above
        url: "http://kbatch-proxy.<kbatch-namespace>.svc.cluster.local"

该示例依赖于将kbatch部署到与JupyterHub相同的Kubernetes集群中,这样JupyterHub可以使用Kubernetes的内部DNS代理请求到kbatch-proxy。该URL中的命名空间应与部署kbatch的命名空间相匹配。

Dask网关集成

如果您的JupyterHub与Dask网关一起部署,您可能需要在作业中设置一些额外的环境变量,以便它们的行为类似于单用户笔记本Pod。

app:
  extra_env:
    KBATCH_JOB_EXTRA_ENV: |
      {
        "DASK_GATEWAY__AUTH__TYPE": "jupyterhub",
        "DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE": "{JUPYTER_IMAGE_SPEC}",
        "DASK_GATEWAY__ADDRESS":  "https://<JUPYTERHUB_URL>/services/dask-gateway",
        "DASK_GATEWAY__PROXY_ADDRESS": "gateway://<DASK_GATEWAY_ADDRESS>:80"
      }

开发设置

我们没有完全工作的docker-ized设置,因为我们(即Tom)不知道如何在docker内执行Kubernetes。因此,当前的设置依赖于

  1. k3d用于Kubernetes
  2. JupyterHub作为一个常规Python进程
  3. kbatch-proxy作为一个常规Python进程

创建一个集群

$ k3d cluster create ksubmit

创建一个Hub

请确保执行npm install以安装configurable-http-proxy。

$ cd hub
$ jupyterhub

启动kbatch-proxy

KBATCH_PREFIX=/services/kbatch \
  KBATCH_PROFILE_FILE=tests/profile_template.yaml \
  JUPYTERHUB_API_TOKEN=super-secret \
  JUPYTERHUB_API_URL=http://127.0.0.1:8000/hub/api \
  JUPYTERHUB_HOST=http://127.0.0.1:8000 \
  uvicorn kbatch_proxy.main:app --reload --port=8050

您可能需要在http://localhost:8000/hub/token登录并创建一个令牌。使用该令牌进行kbatch configure

项目详情


下载文件

下载适用于您平台的项目文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

kbatch-proxy-0.4.2.tar.gz (14.5 kB 查看哈希)

上传时间

构建分布

kbatch_proxy-0.4.2-py3-none-any.whl (14.7 kB 查看哈希)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面