在 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:personal_access_token@github.com/"
"username/repo/archive/refs/heads/master.zip"
)
}
在这个例子中,personal_access_token
是一个用于验证此 URI 的秘密凭证。虽然 Ray 可以使用经过身份验证的 URI 成功访问您的依赖项,但出于以下两个原因,您不应在 URI 中包含秘密凭证:
Ray 可能会记录在您的
runtime_env
中使用的 URI,这意味着 Ray 日志可能包含您的凭证。Ray 将您的远程依赖包存储在本地目录中,并使用解析后的远程URI(包括您的凭证)作为目录名称。
简而言之,您的远程URI不被视为秘密,因此不应包含秘密信息。相反,请使用 netrc
文件。
在虚拟机上运行:netrc 文件#
The 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 容器的主目录中,这样 Ray 可以访问 runtime_env
的私有远程 URI,即使它们不包含凭据。
在 KubeRay 上运行:使用 netrc 的秘密#
KubeRay 也可以从 netrc
文件中获取远程URI的凭证。通过以下步骤使用Kubernetes secret和Kubernetes卷提供您的 netrc
文件:
1. Launch your Kubernetes cluster.
2. Create the netrc
file locally in your home directory.
3. Store the netrc
file’s contents as a Kubernetes secret on your cluster:
kubectl create secret generic netrc-secret --from-file=.netrc="$HOME/.netrc"
4. Expose the secret to your KubeRay application using a mounted volume, and update the NETRC
environment variable to point to the netrc
file. Include the following YAML in your KubeRay config.
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. Apply your KubeRay config.
您的 KubeRay 应用程序可以使用 netrc
文件访问私有远程 URI,即使它们不包含凭据。