将批处理作业请求代理到Kubernetes。
项目描述
kbatch-proxy
一个简单的Kubernetes代理,允许JupyterHub用户在无需直接访问Kubernetes API的情况下向Kubernetes API发送请求。
动机
我们希望 kbatch
用户能够创建Kubernetes作业,访问日志等,但
- 不希望授予他们 直接 访问Kubernetes API的权限
- 不希望维护一个独立的Web应用程序,其任何状态都与Kubernetes独立
因此出现了 kbatch-proxy
设计
一个简单的FastAPI应用程序,位于 kbatch
用户和Kubernetes API之间。预期 kbatch-proxy
应用程序可以访问Kubernetes API,并具有创建命名空间、作业等的权限。这通常作为一个JupyterHub服务运行。
用户将对 kbatch-proxy
发送请求。在请求时,我们将
- 验证用户是否通过JupyterHub进行了身份验证(检查
Bearer
令牌) - 验证用户提交或请求的数据是否符合我们的 安全模型
- 代表用户向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。因此,当前的设置依赖于
- k3d用于Kubernetes
- JupyterHub作为一个常规Python进程
- 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的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | cf81fa29616e2e798453528b705f241cf9c4007bb643d2be3703812db78ff417 |
|
MD5 | 5d59bae96e976aac75aff3d7f2471d6f |
|
BLAKE2b-256 | ff9815818d286757414b07526f909e634037c1686827b81045c1f47c5271205e |
kbatch_proxy-0.4.2-py3-none-any.whl的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 70970b38fca4ce5054eb0e861ad7c6136eb6be4dcf263fda1b76ae1dbeef764f |
|
MD5 | d07f88caf1a3a9d036a620146ab6ad6e |
|
BLAKE2b-256 | 3eceea2e797cb05d09e15cf01a94011bcad27a3ff0e86f1bce76bc78a418c2f6 |