在 runtime_env 中验证远程 URI#
本节将帮助你
避免在你的
runtime_env
中泄露远程 URI 凭据在 KubeRay 中安全地提供凭据
了解验证远程 URI 的最佳实践
验证远程 URI#
你可以使用远程 URI将依赖项添加到你的 runtime_env
中。对于公开托管的文件,这很简单,因为你只需将公共 URI 粘贴到你的 runtime_env
中即可。
runtime_env = {"working_dir": (
"https://github.com/"
"username/repo/archive/refs/heads/master.zip"
)
}
然而,私下托管的依赖项(例如在私有 GitHub 仓库中)需要身份验证。一种常见的身份验证方法是将凭据插入 URI 本身。
runtime_env = {"working_dir": (
"https://username:[email protected]/"
"username/repo/archive/refs/heads/master.zip"
)
}
在此示例中,personal_access_token
是用于验证此 URI 的秘密凭据。虽然 Ray 可以使用经过身份验证的 URI 成功访问你的依赖项,但你不应在 URI 中包含秘密凭据,原因有二:
Ray 可能会记录你在
runtime_env
中使用的 URI,这意味着 Ray 日志可能包含你的凭据。Ray 将你的远程依赖包存储在本地目录中,并使用远程 URI 的解析版本(包括你的凭据)作为目录名称。
简而言之,你的远程 URI 不会被视为秘密,因此不应包含秘密信息。相反,请使用 netrc
文件。
在 VM 上运行:netrc 文件#
的netrc 文件包含 Ray 用于自动登录远程服务器的凭据。请在此文件中设置你的凭据,而不是在远程 URI 中设置。
# "$HOME/.netrc"
machine github.com
login username
password personal_access_token
在此示例中,machine github.com
行指定对 github.com
的任何访问都应使用提供的 login
和 password
进行身份验证。
注意
在 Unix 上,将 netrc
文件命名为 .netrc
。在 Windows 上,将文件命名为 _netrc
。
netrc
文件需要所有者读写权限,因此请确保在创建文件后运行 chmod
命令。
chmod 600 "$HOME/.netrc"
将 netrc
文件添加到你的 VM 容器的 home 目录中,这样 Ray 就可以访问 runtime_env
的私有远程 URI,即使它们不包含凭据。
在 KubeRay 上运行:使用 secret 的 netrc#
KubeRay 也可以从 netrc
文件中获取远程 URI 的凭据。通过以下步骤使用 Kubernetes secret 和 Kubernetes volume 提供你的 netrc
文件:
1. 启动你的 Kubernetes 集群。
2. 在你的 home 目录中本地创建 netrc
文件。
3. 将 netrc
文件的内容作为 Kubernetes secret 存储在你的集群上。
kubectl create secret generic netrc-secret --from-file=.netrc="$HOME/.netrc"
4. 使用挂载的 volume 将该 secret 暴露给你的 KubeRay 应用,并更新 NETRC
环境变量使其指向 netrc
文件。在你的 KubeRay 配置中包含以下 YAML。
headGroupSpec:
...
containers:
- name: ...
image: rayproject/ray:latest
...
volumeMounts:
- mountPath: "/home/ray/netrcvolume/"
name: netrc-kuberay
readOnly: true
env:
- name: NETRC
value: "/home/ray/netrcvolume/.netrc"
volumes:
- name: netrc-kuberay
secret:
secretName: netrc-secret
workerGroupSpecs:
...
containers:
- name: ...
image: rayproject/ray:latest
...
volumeMounts:
- mountPath: "/home/ray/netrcvolume/"
name: netrc-kuberay
readOnly: true
env:
- name: NETRC
value: "/home/ray/netrcvolume/.netrc"
volumes:
- name: netrc-kuberay
secret:
secretName: netrc-secret
5. 应用你的 KubeRay 配置。
你的 KubeRay 应用可以使用 netrc
文件访问私有远程 URI,即使它们不包含凭据。