- 필수 조건
- TLS 인증서 생성하기
- GitLab 인스턴스에 앱 등록하기
- SSH 호스트 키 생성
- GitLab URL 내보내기
- 구성 비밀 생성
- 프록시를 위한 Helm 차트 설치
- Kubernetes 리소스 확인
- DNS 레코드 업데이트
튜토리얼: GitLab workspaces 프록시 설정하기
이 튜토리얼에서는 GitLab workspaces 프록시를 설정하여 클러스터 내에서 workspaces를 인증하고 권한을 부여하는 방법을 배웁니다.
gitlab-workspaces-proxy
를 설정하려면:
- TLS 인증서 생성하기.
- GitLab 인스턴스에 앱 등록하기.
- SSH 호스트 키 생성하기.
- GitLab URL 내보내기.
- 구성 비밀 생성하기.
- 프록시를 위한 Helm 차트 설치하기.
- Kubernetes 리소스 확인하기.
- DNS 레코드 업데이트하기.
필수 조건
- 설치된 Ingress 컨트롤러
- 실행 중인 Kubernetes 클러스터
- 로컬 머신에
helm
3.11.0 이상 및kubectl
설치
TLS 인증서 생성하기
다음에 대해 TLS 인증서를 생성해야 합니다:
-
gitlab-workspaces-proxy
가 리슨하는 도메인 (GITLAB_WORKSPACES_PROXY_DOMAIN
). - workspaces가 사용 가능한 도메인 (
GITLAB_WORKSPACES_WILDCARD_DOMAIN
).
인증서는 어떤 인증 기관으로부터 생성할 수 있습니다.
TLS 인증서를 생성하려면:
-
HTTPS를 활성화하기 위해 Certbot를 설치합니다:
brew install certbot
-
ACME DNS로 Let’s Encrypt 인증서를 생성하고 DNS 공급자에
TXT
레코드를 생성합니다:export EMAIL="YOUR_EMAIL@example.dev" export GITLAB_WORKSPACES_PROXY_DOMAIN="workspaces.example.dev" export GITLAB_WORKSPACES_WILDCARD_DOMAIN="*.workspaces.example.dev" certbot -d "${GITLAB_WORKSPACES_PROXY_DOMAIN}" \ -m "${EMAIL}" \ --config-dir ~/.certbot/config \ --logs-dir ~/.certbot/logs \ --work-dir ~/.certbot/work \ --manual \ --preferred-challenges dns certonly certbot -d "${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \ -m "${EMAIL}" \ --config-dir ~/.certbot/config \ --logs-dir ~/.certbot/logs \ --work-dir ~/.certbot/work \ --manual \ --preferred-challenges dns certonly
-
출력에서 인증서 디렉토리로 다음 환경 변수를 업데이트합니다:
export WORKSPACES_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/fullchain.pem" export WORKSPACES_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/privkey.pem" export WILDCARD_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_WILDCARD_DOMAIN}/fullchain.pem" export WILDCARD_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_WILDCARD_DOMAIN}/privkey.pem"
certbot
명령은 프록시 도메인과-0001
접두어를 사용하여 와일드카드 도메인에 대한 다른 경로를 생성할 수 있습니다:export WORKSPACES_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/fullchain.pem" export WORKSPACES_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}/privkey.pem" export WILDCARD_DOMAIN_CERT="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}-0001/fullchain.pem" export WILDCARD_DOMAIN_KEY="${HOME}/.certbot/config/live/${GITLAB_WORKSPACES_PROXY_DOMAIN}-0001/privkey.pem"
이제 인증서를 생성했으니, GitLab 인스턴스에 앱을 등록할 차례입니다.
GitLab 인스턴스에 앱 등록하기
GitLab 인스턴스에 앱을 등록하려면:
-
리디렉션 URI를
https://${GITLAB_WORKSPACES_PROXY_DOMAIN}/auth/callback
으로 설정합니다. -
신뢰할 수 있는(Trusted) 체크박스를 선택합니다.
-
스코프를
api
,read_user
,openid
,profile
로 설정합니다. -
CLIENT_ID
,CLIENT_SECRET
,REDIRECT_URI
를 내보냅니다:export CLIENT_ID="your_application_id" export CLIENT_SECRET="your_application_secret" export REDIRECT_URI="https://${GITLAB_WORKSPACES_PROXY_DOMAIN}/auth/callback"
-
클라이언트 ID와 생성된 비밀을 안전한 장소에 저장합니다(예: 1Password).
다음으로, SSH 호스트 키를 생성하고 GitLab URL을 내보낼 것입니다.
SSH 호스트 키 생성
RSA 키를 생성하려면, 이 명령을 실행합니다:
ssh-keygen -f ssh-host-key -N '' -t rsa
export SSH_HOST_KEY=$(pwd)/ssh-host-key
대신 ECDSA 키를 생성할 수도 있습니다.
GitLab URL 내보내기
GITLAB_URL
환경 변수를 내보내려면, 이 명령을 실행합니다:
export GITLAB_URL="https://gitlab.com"
다음으로, 프록시를 위한 구성 비밀을 생성할 것입니다.
구성 비밀 생성
프록시를 위한 구성 비밀을 생성하려면:
-
서명 키를 생성하고 안전한 장소에 키를 저장합니다(예: 1Password).
-
SIGNING_KEY
를 내보냅니다:export SIGNING_KEY="make_up_a_random_key_consisting_of_letters_numbers_and_special_chars"
프록시를 위한 Helm 차트 설치
프록시를 위한 Helm 차트를 설치하려면:
-
helm
리포지토리를 추가합니다:helm repo add gitlab-workspaces-proxy \ https://gitlab.com/api/v4/projects/gitlab-org%2fworkspaces%2fgitlab-workspaces-proxy/packages/helm/devel
-
다른 Ingress 클래스를 사용하는 경우
ingress.className
매개변수를 수정합니다:helm repo update helm upgrade --install gitlab-workspaces-proxy \ gitlab-workspaces-proxy/gitlab-workspaces-proxy \ --version 0.1.15 \ --namespace=gitlab-workspaces \ --create-namespace \ --set="auth.client_id=${CLIENT_ID}" \ --set="auth.client_secret=${CLIENT_SECRET}" \ --set="auth.host=${GITLAB_URL}" \ --set="auth.redirect_uri=${REDIRECT_URI}" \ --set="auth.signing_key=${SIGNING_KEY}" \ --set="ingress.host.workspaceDomain=${GITLAB_WORKSPACES_PROXY_DOMAIN}" \ --set="ingress.host.wildcardDomain=${GITLAB_WORKSPACES_WILDCARD_DOMAIN}" \ --set="ingress.tls.workspaceDomainCert=$(cat ${WORKSPACES_DOMAIN_CERT})" \ --set="ingress.tls.workspaceDomainKey=$(cat ${WORKSPACES_DOMAIN_KEY})" \ --set="ingress.tls.wildcardDomainCert=$(cat ${WILDCARD_DOMAIN_CERT})" \ --set="ingress.tls.wildcardDomainKey=$(cat ${WILDCARD_DOMAIN_KEY})" \ --set="ssh.host_key=$(cat ${SSH_HOST_KEY})" \ --set="ingress.className=nginx"
인증서를 갱신해야 할 수 있습니다. 예를 들어, Let’s Encrypt 인증서는 기본적으로 세 달 동안 유효합니다. 새 인증서를 받으면, 이전helm
명령을 다시 실행하여 인증서를 업데이트합니다.
이제 Kubernetes 리소스를 확인해보겠습니다.
Kubernetes 리소스 확인
-
다음 Kubernetes 리소스를 확인하세요:
-
구성 비밀:
kubectl -n gitlab-workspaces get secret gitlab-workspaces-proxy -o=go-template='{{index .data "config.yaml"}}' | base64 -d
-
gitlab-workspaces
네임스페이스의 인그레스 클래스:kubectl -n gitlab-workspaces get ingress
프록시의 Helm 차트를
gitlab-workspaces
외의 다른 네임스페이스에 배포하는 경우,GitLab 에이전트 구성에서 네임스페이스를 업데이트하세요:
remote_development: gitlab_workspaces_proxy: namespace: "<custom-gitlab-workspaces-proxy-namespace>"
-
-
포드가 실행 중인지 확인하세요:
kubectl -n gitlab-workspaces get pods
이제 DNS 레코드를 업데이트 할 수 있습니다.
DNS 레코드 업데이트
DNS 레코드를 업데이트하려면:
-
${GITLAB_WORKSPACES_PROXY_DOMAIN}
및${GITLAB_WORKSPACES_WILDCARD_DOMAIN}
을 Ingress 컨트롤러에 의해 노출된 로드 밸런서로 지정하세요. -
터미널에서 다음 명령어를 실행하여
gitlab-workspaces-proxy
에 접근할 수 있는지 확인하세요:curl --verbose --location ${GITLAB_WORKSPACES_PROXY_DOMAIN}
이 명령은 GitLab에서 작업 공간을 생성할 때까지
400 Bad Request
오류를 반환합니다. -
다른 터미널에서 다음 명령어를 실행하세요:
kubectl -n gitlab-workspaces logs -f -l app.kubernetes.io/name=gitlab-workspaces-proxy
로그는
could not find upstream workspace upstream not found
오류를 보여줍니다.
모든 준비가 완료되었습니다! 이제 GitLab 작업 공간 프록시를 사용하여 클러스터에서 작업 공간을 인증 및 승인할 수 있습니다.