配置工作空间
- Tier: Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以使用 workspaces 为您的 GitLab 项目创建和管理隔离的开发环境。 每个工作空间都包含自己的一套依赖项、库和工具, 您可以根据每个项目的具体需求进行定制。
设置工作空间基础设施
在您 创建工作空间 之前,您只需设置一次基础设施。 要为工作空间设置基础设施,无论使用哪个云提供商,您必须:
- 设置一个 GitLab agent for Kubernetes 支持的 Kubernetes 集群。 请参阅 支持的 Kubernetes 版本。
- 确保 Kubernetes 集群启用了自动扩缩容功能。
- 在 Kubernetes 集群中:
- 验证是否定义了 默认存储类, 以便可以为每个工作空间动态配置卷。
- 完成 教程:设置 GitLab agent for Kubernetes 中的所有步骤。
- 可选。在工作空间中构建和运行容器。
- 可选。配置对私有容器注册表的支持。
- 可选。配置工作空间的 sudo 访问权限。
如果您使用 AWS,可以使用我们的 OpenTofu 教程。更多信息,请参阅 教程:在 AWS 上设置工作空间基础设施。
创建工作空间
仅从可信项目创建工作空间。
先决条件:
- 您必须 设置工作空间基础设施。
- 您必须拥有工作空间和代理项目的至少 Developer 角色。
- 在左侧边栏,选择 搜索或转到 并找到您的项目。
- 选择 编辑 > 新建工作空间。
- 从 集群代理 下拉列表中,选择项目所属组的集群代理。
- 从 Git 引用 下拉列表中,选择 GitLab 用于创建工作空间的分支、标签或提交哈希。 默认情况下,这是您正在查看的分支。
- 从 Devfile 下拉列表中,选择以下选项之一:
- 在 变量 中,输入您要注入到工作空间中的环境变量的键和值。 要添加新变量,选择 添加变量。
- 选择 创建工作空间。
- 在左侧边栏,选择 搜索或转到 并找到您的项目。
- 在左侧边栏,选择 代码 > 合并请求。
- 选择要为其创建工作空间的合并请求。
- 选择 代码 > 在工作空间中打开。
- 从 集群代理 下拉列表中,选择项目所属组的集群代理。
- 从 Git 引用 下拉列表中,选择 GitLab 用于创建工作空间的分支、标签或提交哈希。 默认情况下,这是合并请求的源分支。
- 从 Devfile 下拉列表中,选择以下选项之一:
- 在 变量 中,输入您要注入到工作空间中的环境变量的键和值。 要添加新变量,选择 添加变量。
- 选择 创建工作空间。
工作空间可能需要几分钟才能启动。 要打开工作空间,在 预览 下,选择该工作空间。 您还可以访问终端并安装任何必要的依赖项。
平台兼容性
工作空间的平台要求取决于您的开发需求。
对于基本工作空间功能,工作空间可以在任何支持 GitLab agent for Kubernetes 的 linux/amd64 Kubernetes 集群上运行,
无论底层操作系统是什么。
要选择适合您平台要求的方法,请参阅 配置工作空间的 sudo 访问权限。
在工作空间中构建和运行容器
开发环境通常需要构建和运行容器来管理和使用运行时依赖项。 要在工作空间中构建和运行容器,请参阅 使用 Sysbox 配置工作空间的 sudo 访问权限。
配置对私有容器注册表的支持
要使用来自私有容器注册表的镜像:
- 在 Kubernetes 中 创建镜像拉取密钥。
- 将此密钥的
name和namespace添加到 GitLab agent for Kubernetes 配置 中。
更多信息,请参阅 image_pull_secrets。
配置工作空间的 sudo 访问权限
开发环境通常需要 sudo 权限来安装、配置和使用运行时依赖项。选择适合您平台要求的方法:
| 方法 | 平台要求 | 使用方式 |
|---|---|---|
| Sysbox | 有关最新信息,请参阅 Sysbox 分发兼容性矩阵。 | 提高容器隔离性,使容器能够运行与虚拟机相同的工作负载。 |
| Kata Containers | 有关最新信息,请参阅 Kata Containers 安装指南。 | 轻量级 VM 性能像容器,但提供增强的工作负载隔离性和安全性。 |
| 用户命名空间 | Kubernetes 1.33 或更高版本在 Kubernetes 功能门后面启用了用户命名空间,默认情况下已启用。有关最新信息,请参阅 Kubernetes 功能门。 | 无需额外运行时安装。隔离容器用户与主机用户以提高安全性。 |
先决条件:
使用 Sysbox
Sysbox 是一个容器运行时,可提高容器隔离性 并使容器能够运行与虚拟机相同的工作负载。
要使用 Sysbox 配置 sudo 访问权限:
-
在您的 Kubernetes 集群中,安装 Sysbox。
-
配置 GitLab agent for Kubernetes:
- 设置默认运行时类。在
default_runtime_class中, 输入 Sysbox 的运行时类。例如,sysbox-runc。 - 启用权限提升。
将
allow_privilege_escalation设置为true。 - 配置 Sysbox 所需的注解。设置
annotations为{"io.kubernetes.cri-o.userns-mode": "auto:size=65536"}。
- 设置默认运行时类。在
使用 Kata Containers
Kata Containers 是轻量级虚拟机的标准实现, 性能像容器,但提供虚拟机的工作负载隔离性和安全性。
要使用 Kata Containers 配置 sudo 访问权限:
-
在您的 Kubernetes 集群中,安装 Kata Containers。
-
配置 GitLab agent for Kubernetes:
- 设置默认运行时类。在
default_runtime_class中, 输入 Kata Containers 的运行时类。例如,kata-qemu。 - 启用权限提升。
将
allow_privilege_escalation设置为true。
- 设置默认运行时类。在
使用用户命名空间
用户命名空间 隔离 容器用户与主机用户。
要使用用户命名空间配置 sudo 访问权限:
-
在您的 Kubernetes 集群中,配置用户命名空间。
-
配置 GitLab agent for Kubernetes:
- 将
use_kubernetes_user_namespaces设置为true。 - 将
allow_privilege_escalation设置为true。
- 将
通过 SSH 连接到工作空间
先决条件:
- 您必须为 devfile 中指定的镜像启用 SSH 访问。 更多信息,请参阅 更新您的工作空间容器镜像。
- 您必须配置指向 GitLab workspaces proxy 的 TCP 负载均衡器。 更多信息,请参阅 更新您的 DNS 记录。
要通过 SSH 客户端连接到工作空间:
-
获取您的
gitlab-workspaces-proxy-ssh服务的 IP 地址:kubectl -n gitlab-workspaces get service gitlab-workspaces-proxy-ssh -
获取工作空间的名称:
- 在左侧边栏,选择 搜索或转到。
- 选择 您的工作。
- 选择 工作空间。
- 复制您要连接的工作空间的名称。
-
运行此命令:
ssh <workspace_name>@<ssh_proxy_IP_address> -
对于密码,输入您的个人访问令牌,至少具有
read_api范围。
当您通过 TCP 负载均衡器连接到 gitlab-workspaces-proxy 时,
gitlab-workspaces-proxy 会检查用户名(工作空间名称)并与 GitLab 交互以验证:
- 个人访问令牌
- 用户对工作空间的访问权限
更新您的工作空间容器镜像
要更新 SSH 连接的运行时镜像:
- 在您的运行时镜像中安装
sshd。 - 创建一个名为
gitlab-workspaces的用户以允许无密码访问您的容器。
FROM golang:1.20.5-bullseye
# 安装 `openssh-server` 和其他依赖项
RUN apt update \
&& apt upgrade -y \
&& apt install openssh-server sudo curl git wget software-properties-common apt-transport-https --yes \
&& rm -rf /var/lib/apt/lists/*
# 允许空密码
RUN sed -i 's/nullok_secure/nullok/' /etc/pam.d/common-auth
RUN echo "PermitEmptyPasswords yes" >> /etc/ssh/sshd_config
# 生成工作空间主机密钥
RUN ssh-keygen -A
RUN chmod 775 /etc/ssh/ssh_host_rsa_key && \
chmod 775 /etc/ssh/ssh_host_ecdsa_key && \
chmod 775 /etc/ssh/ssh_host_ed25519_key
# 创建一个 `gitlab-workspaces` 用户
RUN useradd -l -u 5001 -G sudo -md /home/gitlab-workspaces -s /bin/bash gitlab-workspaces
RUN passwd -d gitlab-workspaces
ENV HOME=/home/gitlab-workspaces
WORKDIR $HOME
RUN mkdir -p /home/gitlab-workspaces && chgrp -R 0 /home && chmod -R g=u /etc/passwd /etc/group /home
# 允许对 `/etc/shadow` 的登录访问
RUN chmod 775 /etc/shadow
USER gitlab-workspaces