워크스페이스 구성
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
워크스페이스를 사용하여 GitLab 프로젝트를 위한 격리된 개발 환경을 만들고 관리할 수 있습니다. 워크스페이스를 만들기 전에 인프라를 한 번만 설정해야 합니다. AWS를 사용하는 경우 OpenTofu 튜토리얼을 사용할 수 있습니다.
히스토리
- Feature flag
remote_development_feature_flagGitLab 16.0에서 GitLab.com 및 GitLab Self-Managed에서 활성화. - GitLab 16.7에서 일반 공개. Feature flag
remote_development_feature_flag제거.
워크스페이스를 사용하여 GitLab 프로젝트를 위한 격리된 개발 환경을 만들고 관리할 수 있습니다. 각 워크스페이스에는 자체 종속성, 라이브러리 및 도구 세트가 포함되어 있으며 각 프로젝트의 특정 요구 사항에 맞게 사용자 정의할 수 있습니다.
워크스페이스 인프라 설정#
워크스페이스를 만들기 전에 인프라를 한 번만 설정해야 합니다. 클라우드 공급자와 관계없이 워크스페이스를 위한 인프라를 설정하려면 다음을 수행해야 합니다:
- Kubernetes용 GitLab 에이전트가 지원하는 Kubernetes 클러스터를 설정합니다. 지원되는 Kubernetes 버전을 참조하세요.
- Kubernetes 클러스터에 대한 오토스케일링이 활성화되어 있는지 확인합니다.
- Kubernetes 클러스터에서:
- 각 워크스페이스에 대해 볼륨을 동적으로 프로비저닝할 수 있도록 기본 스토리지 클래스가 정의되어 있는지 확인합니다.
- 튜토리얼: Kubernetes용 GitLab 에이전트 설정의 모든 단계를 완료합니다.
- 선택 사항. 워크스페이스에서 컨테이너 빌드 및 실행.
- 선택 사항. 프라이빗 컨테이너 레지스트리 지원 구성.
- 선택 사항. 워크스페이스에 대한 sudo 접근 구성.
AWS를 사용하는 경우 OpenTofu 튜토리얼을 사용할 수 있습니다. 자세한 내용은 튜토리얼: AWS에서 워크스페이스 인프라 설정을 참조하세요.
워크스페이스 만들기#
히스토리
신뢰할 수 있는 프로젝트에서만 워크스페이스를 만드세요.
사전 요구 사항:
- 워크스페이스 인프라를 설정해야 합니다.
- 워크스페이스 및 에이전트 프로젝트에 대한 Developer, Maintainer 또는 Owner 권한이 있어야 합니다.
- 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 코드 > 새 워크스페이스를 선택합니다.
- 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
- Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 만드는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다. 기본적으로 현재 보고 있는 브랜치입니다.
- Devfile 드롭다운 목록에서 다음 중 하나를 선택합니다:
- 변수에서 워크스페이스에 주입할 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
- 워크스페이스 만들기를 선택합니다.
- 상단 표시줄에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
- 왼쪽 사이드바에서 코드 > 머지 리퀘스트를 선택합니다.
- 워크스페이스를 만들 머지 리퀘스트를 선택합니다.
- 코드 > 워크스페이스에서 열기를 선택합니다.
- 클러스터 에이전트 드롭다운 목록에서 프로젝트가 속한 그룹이 소유한 클러스터 에이전트를 선택합니다.
- Git 참조 드롭다운 목록에서 GitLab이 워크스페이스를 만드는 데 사용하는 브랜치, 태그 또는 커밋 해시를 선택합니다. 기본적으로 머지 리퀘스트의 소스 브랜치입니다.
- Devfile 드롭다운 목록에서 다음 중 하나를 선택합니다:
- 변수에서 워크스페이스에 주입할 환경 변수의 키와 값을 입력합니다. 새 변수를 추가하려면 변수 추가를 선택합니다.
- 워크스페이스 만들기를 선택합니다.
워크스페이스를 시작하는 데 몇 분이 걸릴 수 있습니다. 워크스페이스를 열려면 미리보기에서 워크스페이스를 선택합니다. 터미널에 접근하고 필요한 종속성을 설치할 수도 있습니다.
워크스페이스 시작 진행 상황 모니터링#
워크스페이스를 시작하면 워크스페이스 로그를 확인하여 초기화 작업 및 postStart 이벤트의 진행 상황을 모니터링할 수 있습니다. 자세한 내용은 워크스페이스 로그 디렉토리를 참조하세요.
플랫폼 호환성#
워크스페이스의 플랫폼 요구 사항은 개발 요구 사항에 따라 다릅니다.
기본 워크스페이스 기능의 경우, 워크스페이스는 기본 운영 체제와 관계없이 Kubernetes용 GitLab 에이전트를 지원하는 모든 linux/amd64 Kubernetes 클러스터에서 실행됩니다.
플랫폼 요구 사항에 맞는 방법을 선택하려면 워크스페이스에 대한 sudo 접근 구성을 참조하세요.
워크스페이스에서 컨테이너 빌드 및 실행#
히스토리
- GitLab 17.4에서 도입.
개발 환경은 런타임 중 종속성을 관리하고 사용하기 위해 컨테이너를 빌드하고 실행해야 하는 경우가 많습니다. 워크스페이스에서 컨테이너를 빌드하고 실행하려면 워크스페이스에 대한 sudo 접근 구성을 참조하세요.
프라이빗 컨테이너 레지스트리 지원 구성#
히스토리
- GitLab 17.6에서 도입.
프라이빗 컨테이너 레지스트리의 이미지를 사용하려면:
- Kubernetes에서 이미지 풀 시크릿을 만듭니다.
- 이 시크릿의
name과namespace를 Kubernetes용 GitLab 에이전트 구성에 추가합니다.
자세한 내용은 image_pull_secrets를 참조하세요.
워크스페이스에 대한 sudo 접근 구성#
히스토리
- GitLab 17.4에서 도입.
개발 환경은 런타임 중 종속성을 설치, 구성 및 사용하기 위해 sudo 권한이 필요한 경우가 많습니다. 플랫폼 요구 사항에 맞는 방법을 선택하세요:
| 방법 | 플랫폼 요구 사항 | 사용법 |
|---|---|---|
| Sysbox | 최신 정보는 Sysbox 배포 호환성 매트릭스를 참조하세요. | 컨테이너 격리를 개선하고 컨테이너가 가상 머신과 동일한 워크로드를 실행할 수 있게 합니다. |
| Kata Containers | 최신 정보는 Kata Containers 설치 가이드를 참조하세요. | 경량 VM이 컨테이너처럼 작동하지만 향상된 워크로드 격리 및 보안을 제공합니다. |
| 사용자 네임스페이스 | Kubernetes 버전 1.33 이상에서는 기본적으로 활성화된 Kubernetes 기능 게이트 뒤에 사용자 네임스페이스가 있습니다. 최신 정보는 Kubernetes 기능 게이트를 참조하세요. | 추가 런타임 설치가 필요하지 않습니다. 향상된 보안을 위해 컨테이너 사용자를 호스트 사용자로부터 격리합니다. |
사전 요구 사항:
Sysbox 사용#
Sysbox는 컨테이너 격리를 개선하고 컨테이너가 가상 머신과 동일한 워크로드를 실행할 수 있게 하는 컨테이너 런타임입니다.
Sysbox로 sudo 접근을 구성하려면:
-
Kubernetes 클러스터에서 Sysbox를 설치합니다.
-
Kubernetes용 GitLab 에이전트를 구성합니다:
- 기본 런타임 클래스를 설정합니다.
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를 설치합니다.
-
Kubernetes용 GitLab 에이전트를 구성합니다:
- 기본 런타임 클래스를 설정합니다.
default_runtime_class에서 Kata Containers에 대한 런타임 클래스를 입력합니다. 예:kata-qemu. - 권한 상승을 활성화합니다.
allow_privilege_escalation을true로 설정합니다.
- 기본 런타임 클래스를 설정합니다.
사용자 네임스페이스 사용#
사용자 네임스페이스는 컨테이너 사용자를 호스트 사용자로부터 격리합니다.
사용자 네임스페이스로 sudo 접근을 구성하려면:
-
Kubernetes 클러스터에서 사용자 네임스페이스를 구성합니다.
-
Kubernetes용 GitLab 에이전트를 구성합니다:
use_kubernetes_user_namespaces를true로 설정합니다.allow_privilege_escalation을true로 설정합니다.
SSH로 워크스페이스에 연결#
히스토리
- GitLab 16.3에서 도입.
사전 요구 사항:
- devfile에 지정된 이미지에 SSH 접근이 활성화되어 있어야 합니다. 자세한 내용은 워크스페이스 컨테이너 이미지 업데이트를 참조하세요.
- GitLab 워크스페이스 프록시를 가리키는 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 지원이 이미 구성되어 있으므로 바로 사용할 수 있습니다. 이 방법은 이미지에 필요한 모든 워크스페이스 구성이 포함되어 있음을 보장합니다. 자세한 지침은 사용자 정의 워크스페이스 이미지 만들기를 참조하세요.
워크스페이스 기본 이미지를 사용하지 않으려면 자체 기본 이미지에서 빌드할 수 있습니다. 이 경우 런타임 이미지에서 SSH 지원을 수동으로 구성합니다:
- 런타임 이미지에
sshd를 설치합니다. - 비밀번호 없이 컨테이너에 접근을 허용하는
gitlab-workspaces라는 사용자를 만듭니다.
다음은 SSH 구성 예시입니다:
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
