第 6 章 在工作区中使用凭证和配置
您可以在工作区中使用凭证和配置。
要做到这一点,将凭证和配置挂载到您机构 OpenShift Dev Spaces 实例的 OpenShift 集群中的 Dev Workspace
容器中:
如果您需要允许集群中的 Dev Workspace
Pod 访问需要身份验证的容器 registry,请为 Dev Workspace
Pod 创建 镜像拉取 Secret。
挂载过程使用标准 Kubernetes 挂载机制,需要对现有资源应用额外的标签和注解。在启动新的工作区或重启现有工作区时,资源会被挂载。
您可以为各种组件创建永久挂载点:
-
Maven 配置,如 特定于用户的
settings.xml
文件 - SSH 密钥对
- Git-provider 访问令牌
- AWS 授权令牌
- 配置文件
- 持久性存储
6.1. 挂载 Secret
要将机密数据挂载到工作区中,请使用 Kubernetes Secret。
使用 Kubernetes Secret,您可以挂载用户名、密码、SSH 密钥对、身份验证令牌(如 AWS)和敏感配置。
将 Kubernetes Secret 挂载到您机构 OpenShift Dev Spaces 实例的 OpenShift 集群中的 Dev Workspace
容器。
先决条件
-
一个活跃的
oc
会话,它具有到目标 OpenShift 集群的管理权限。请参阅开始使用 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
可选: 使用注解来配置 Secret 的挂载方式。
表 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 挂载为文件
apiVersion: v1
kind: Secret
metadata:
name: mvn-settings-secret
labels:
controller.devfile.io/mount-to-devworkspace: 'true'
controller.devfile.io/watch-secret: 'true'
annotations:
controller.devfile.io/mount-path: '/home/user/.m2'
data:
settings.xml: <Base64_encoded_content>
当您启动一个工作区时,dev Workspace
容器中将提供 /home/user/.m2/settings.xml
文件。
使用 Maven,您可以为 settings.xml
文件设置自定义路径。例如:
$ 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
文件创建镜像 pull Secret。
6.1.1.1. 使用 oc
创建镜像拉取 Secret
先决条件
-
一个活跃的
oc
会话,它具有到目标 OpenShift 集群的管理权限。请参阅开始使用 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>
在镜像 pull Secret 中添加以下标签:
$ oc label secret <Secret_name> controller.devfile.io/devworkspace_pullsecret=true controller.devfile.io/watch-secret=true
6.1.1.2. 从 .dockercfg
文件创建镜像 pull Secret
如果您已将私有容器 registry 的凭证存储在 .dockercfg
文件中,您可以使用该文件创建镜像 pull Secret。
先决条件
-
一个活跃的
oc
会话,它具有到目标 OpenShift 集群的管理权限。请参阅开始使用 CLI。 -
base64
命令行工具安装在您要使用的操作系统中。
流程
将
.dockercfg
文件编码为 Base64:$ cat .dockercfg | base64 | tr -d '\n'
在用户项目中创建一个新的 OpenShift Secret:
apiVersion: v1 kind: Secret metadata: name: <Secret_name> labels: controller.devfile.io/devworkspace_pullsecret: 'true' controller.devfile.io/watch-secret: 'true' data: .dockercfg: <Base64_content_of_.dockercfg> type: kubernetes.io/dockercfg
应用 Secret:
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
6.1.1.3. 从 config.json
文件创建镜像 pull Secret
如果您已将私有容器 registry 的凭证存储在 $HOME/.docker/config.json
文件中,您可以使用该文件来创建镜像 pull Secret。
先决条件
-
一个活跃的
oc
会话,它具有到目标 OpenShift 集群的管理权限。请参阅开始使用 CLI。 -
base64
命令行工具安装在您要使用的操作系统中。
流程
将
$HOME/.docker/config.json
文件编码为 Base64。$ cat config.json | base64 | tr -d '\n'
在用户项目中创建一个新的 OpenShift Secret:
apiVersion: v1 kind: Secret metadata: name: <Secret_name> labels: controller.devfile.io/devworkspace_pullsecret: 'true' controller.devfile.io/watch-secret: 'true' data: .dockerconfigjson: <Base64_content_of_config.json> type: kubernetes.io/dockerconfigjson
应用 Secret:
$ oc apply -f - <<EOF <Secret_prepared_in_the_previous_step> EOF
6.1.2. 使用 Git-provider 访问令牌
GitHub、GitLab、Bitbucket 或 Microsoft Azure Repos 的 OAuth 需要 由机构的 OpenShift Dev Spaces 实例的管理员配置。如果管理员无法为 OpenShift Dev Spaces 用户配置它,则临时解决方案是将个人访问令牌作为 Kubernetes Secret 应用。
将访问令牌挂载为 Secret 可让 OpenShift Dev Spaces 服务器访问创建工作区期间克隆的远程存储库,包括访问存储库的 /.che
和 /.vscode
文件夹。
在您的机构 OpenShift Dev Spaces 实例的 OpenShift 集群的用户项目中应用 Secret。
应用 Secret 后,您可以使用托管在 GitHub、GitLab、Bitbucket Server 或 Microsoft Azure Repos 上的私有 Git 存储库克隆来创建工作区。
您可以为每个 Git 供应商创建并应用多个访问令牌 Secret。您必须在用户项目中应用每个 Secret。
先决条件
- 具有运行机构的 OpenShift Dev Spaces 实例的集群的集群管理员权限。
已登陆到集群。
提示在 OpenShift 中,您可以使用
oc
命令行工具登录到集群:$ oc login "https://devspaces-<openshift_deployment_name>.<domain_name>" --username=<my_user>
流程
- 在 Git 提供程序的网站上生成您的访问令牌。
将您的访问令牌编码为 Base64。
提示如果安装了 base64 命令行工具,可以使用命令行:
$ echo -n '<your_access_token_string>' | base64
-
进入
"https://devspaces- <openshift_deployment_name& gt; . <domain_name> "/api/user/id
,以获取您的 OpenShift Dev Spaces 用户 ID。 准备新的 OpenShift Secret。
kind: Secret apiVersion: v1 metadata: name: personal-access-token-<your_choice_of_name_for_this_token> labels: app.kubernetes.io/component: scm-personal-access-token app.kubernetes.io/part-of: che.eclipse.org annotations: che.eclipse.org/che-userid: <devspaces_user_id>1 che.eclipse.org/scm-personal-access-token-name: <git_provider_name>2 che.eclipse.org/scm-url: <git_provider_endpoint>3 che.eclipse.org/scm-username: <git_provider_username>4 che.eclipse.org/scm-organization: <git_provider_organization>5 data: token: <Base64_encoded_access_token> type: Opaque
-
访问
"https://devspaces-<openshift_deployment_name>.<domain_name>"/api/kubernetes/namespace
来获取您的 OpenShift Dev Spaces 用户命名空间作为name
。 切换到集群中的 OpenShift Dev Spaces 用户命名空间。
提示在 OpenShift 中:
oc
命令行工具可以返回集群中当前处于的命名空间,您可以使用它来检查当前的命名空间:$ oc project
如果需要,您可以在命令行中切换到 OpenShift Dev Spaces 用户命名空间:
$ oc project <your_user_namespace>
应用 Secret。
提示在 OpenShift 中,您可以使用
oc
命令行工具:$ oc apply -f - <<EOF <Secret_prepared_in_step_5> EOF
验证
- 使用 Git 提供程序主机的远程 Git 存储库的 URL 来启动新的工作区。
- 进行一些更改,并从工作区推送到远程 Git 存储库。