第 6 章 在工作区中使用凭证和配置
您可以在工作区中使用凭证和配置。
要做到这一点,将凭证和配置挂载到您的机构 OpenShift Dev Spaces 实例的 OpenShift 集群中的 Dev Workspace 容器中:
如果您需要允许集群中的 Dev Workspace Pod 访问需要身份验证的容器 registry,请为 Dev Workspace Pod 创建镜像 pull Secret。
挂载过程使用标准 Kubernetes 挂载机制,需要将额外的标签和注解应用到现有资源。在启动新的工作区或重启现有工作区时,会挂载资源。
您可以为各种组件创建永久挂载点:
-
Maven 配置,如 特定于用户的
settings.xml文件 - SSH 密钥对
- Git-provider 访问令牌
- Git 配置
- AWS 授权令牌
- 配置文件
- 持久性存储
6.1. 挂载 Secret 复制链接链接已复制到粘贴板!
要将机密数据挂载到工作区中,请使用 Kubernetes Secret。
使用 Kubernetes Secret,您可以挂载用户名、密码、SSH 密钥对、身份验证令牌(如 AWS)和敏感配置。
将 Kubernetes Secret 挂载到您组织的 OpenShift Dev Spaces 实例的 OpenShift 集群中的 Dev Workspace 容器。
先决条件
-
对目标 OpenShift 集群具有管理权限的活动
oc会话。请参阅 CLI 入门。 -
在用户项目中,您创建新的 Secret,或确定要挂载到所有
Dev Workspace容器的现有 Secret。
流程
将 Secret 挂载所需的标签添加到 Secret 中。
oc label secret <Secret_name> \ controller.devfile.io/mount-to-devworkspace=true \ controller.devfile.io/watch-secret=true$ oc label secret <Secret_name> \ controller.devfile.io/mount-to-devworkspace=true \ controller.devfile.io/watch-secret=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:使用注解来配置如何挂载 Secret。
Expand 表 6.1. 可选注解 注解 描述 controller.devfile.io/mount-path:指定挂载路径。
默认为
/etc/secret/ <Secret_name>。controller.devfile.io/mount-as:指定如何挂载资源:
文件、子路径或env。默认为
文件。mount-as:文件将键和值作为挂载路径中的文件挂载。mount-as: 子路径使用子路径使用子路径挂载键和值。mount-as: env将键和值作为环境变量挂载到所有Dev Workspace容器中。
例 6.1. 将 Secret 挂载为文件
当您启动一个工作区时,/home/user/.m2/settings.xml 文件将在 Dev Workspace 容器中提供。
使用 Maven,您可以为 settings.xml 文件设置自定义路径。例如:
mvn --settings /home/user/.m2/settings.xml clean install
$ mvn --settings /home/user/.m2/settings.xml clean install
6.1.1. 创建镜像拉取 secret 复制链接链接已复制到粘贴板!
要允许您机构的 OpenShift Dev Spaces 实例的 OpenShift 集群中的 Dev Workspace Pod 访问需要身份验证的容器 registry,请创建一个镜像 pull Secret。
您可以使用 oc 或 .dockercfg 文件或 config.json 文件来创建镜像拉取 Secret。
6.1.1.1. 使用 oc创建镜像 pull Secret 复制链接链接已复制到粘贴板!
先决条件
-
对目标 OpenShift 集群具有管理权限的活动
oc会话。请参阅 CLI 入门。
流程
在用户项目中,使用私有容器 registry 详情和凭证创建一个镜像 pull Secret:
oc create secret docker-registry <Secret_name> \ --docker-server=<registry_server> \ --docker-username=<username> \ --docker-password=<password> \ --docker-email=<email_address>$ oc create secret docker-registry <Secret_name> \ --docker-server=<registry_server> \ --docker-username=<username> \ --docker-password=<password> \ --docker-email=<email_address>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在镜像拉取 Secret 中添加以下标签:
oc label secret <Secret_name> controller.devfile.io/devworkspace_pullsecret=true controller.devfile.io/watch-secret=true
$ oc label secret <Secret_name> controller.devfile.io/devworkspace_pullsecret=true controller.devfile.io/watch-secret=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.1.2. 从 .dockercfg 文件创建镜像拉取 Secret 复制链接链接已复制到粘贴板!
如果您已将私有容器 registry 的凭证存储在 .dockercfg 文件中,您可以使用该文件来创建镜像 pull Secret。
流程
将
.dockercfg文件编码到 Base64 :cat .dockercfg | base64 | tr -d '\n'
$ cat .dockercfg | base64 | tr -d '\n'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在用户项目中创建新的 OpenShift Secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 Secret:
oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.1.3. 从 config.json 文件创建镜像 pull Secret 复制链接链接已复制到粘贴板!
如果您已将私有容器 registry 的凭证存储在 $HOME/.docker/config.json 文件中,您可以使用该文件来创建镜像 pull Secret。
流程
将
$HOME/.docker/config.json文件编码为 Base64。cat config.json | base64 | tr -d '\n'
$ cat config.json | base64 | tr -d '\n'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在用户项目中创建新的 OpenShift Secret:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 Secret:
oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow
6.1.2. 使用 Git-provider 访问令牌 复制链接链接已复制到粘贴板!
GitHub、GitLab、Bitbucket 或 Microsoft Azure Repos 的 OAuth 需要由机构的 OpenShift Dev Spaces 实例的管理员配置。如果您的管理员无法为 OpenShift Dev Spaces 用户配置它,则临时解决方案是使用个人访问令牌。您可以在 OpenShift Dev Spaces 仪表板的 用户首选项 页面中配置个人访问令牌: https:// <openshift_dev_spaces_fqdn>/dashboard/#/user-preferences?tab=personal-access-tokens,或者在命名空间中手动应用它作为 Kubernetes Secret。
将您的访问令牌挂载为 Secret 可让 OpenShift Dev Spaces 服务器访问在工作空间创建过程中克隆的远程存储库,包括访问存储库的 /.che 和 /.vscode 文件夹。
将 Secret 应用到您机构的 OpenShift Dev Spaces 实例的 OpenShift 集群的用户项目中。
应用 Secret 后,您可以使用托管在 GitHub、GitLab、Bitbucket Server 或 Microsoft Azure Repos 的私有 Git 存储库克隆创建工作区。
您可以为每个 Git 供应商创建并应用多个 access-token Secret。您必须在用户项目中应用每个 Secret。
先决条件
已登陆到集群。
提示在 OpenShift 中,您可以使用
oc命令行工具登录到集群:$ oc login https://<openshift_dev_spaces_fqdn> --username=<my_user>
流程
在 Git 提供程序的网站上生成您的访问令牌。
重要个人访问令牌是敏感信息,应保留机密。将它们视为密码。如果您在身份验证时遇到问题,请确保使用正确的令牌并具有适当的克隆存储库权限:
- 在您的计算机上本地打开终端
-
使用
git命令,使用您的个人访问令牌克隆存储库。git命令的格式因 Git 提供程序而异。例如,可以使用以下命令进行 GitHub 个人访问令牌验证:
git clone https://<PAT>@github.com/username/repo.git
git clone https://<PAT>@github.com/username/repo.gitCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
<PAT> 替换为您的个人访问令牌,并将username/repo替换为适当的存储库路径。如果令牌有效并且具有必要的权限,克隆过程应该可以成功。否则,这代表了不正确的个人访问令牌、权限不足或其他问题。重要对于 GitHub Enterprise Cloud,请验证 令牌是否在机构 中使用。
-
进入 web
浏览器中的 https:// <openshift_dev_spaces_fqdn> /api/user/id来获取您的 OpenShift Dev Spaces 用户 ID。 准备新的 OpenShift Secret。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
访问
https://<openshift_dev_spaces_fqdn> /api/kubernetes/namespace来获取您的 OpenShift Dev Spaces 用户命名空间,名为。 切换到集群中的 OpenShift Dev Spaces 用户命名空间。
提示在 OpenShift 中:
oc命令行工具可返回您当前位于集群中的命名空间,您可以使用该命名空间检查当前的命名空间:$ oc project如果需要,您可以在命令行中切换到 OpenShift Dev Spaces 用户命名空间:
$ oc project & lt;your_user_namespace>
应用 Secret。
提示在 OpenShift 中,您可以使用
oc命令行工具:oc apply -f - <<EOF <Secret_prepared_in_step_5> EOF
$ oc apply -f - <<EOF <Secret_prepared_in_step_5> EOFCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如果使用 Azure DevOps 服务器,还必须使用以下部分修改 工作区的 gitconfig :
[http]
extraheader = "Authorization: Basic <base64-encoded(:personal-access-token)>"
[http]
extraheader = "Authorization: Basic <base64-encoded(:personal-access-token)>"
要生成键值对,请使用以下命令:
echo -n "extraheader = \"Authorization: Basic "$(printf ":%s" <personal access token> | base64)\"
echo -n "extraheader = \"Authorization: Basic "$(printf ":%s" <personal access token> | base64)\"
如需更多信息 ,请参阅文档页面。
远程 git 操作需要 extraheader 配置,例如 git clone Server。此授权方法的优先级高于 git 凭证存储,因此对其他 Git 供应商的远程操作将失败。
验证
- 使用 Git 提供程序主机的远程 Git 存储库的 URL,启动新的工作区。
- 进行一些更改,并从工作区推送到远程 Git 存储库。