InfoGrab DocsInfoGrab Docs

GitLab Linux 패키지 배포에 OpenBao 설치

요약

Linux 패키지로 설치된 GitLab 인스턴스와 함께 OpenBao를 실행하려면 Kubernetes 클러스터를 사용하세요. OpenBao를 실행하는 두 가지 방법이 있습니다: 코로케이티드 클러스터(Colocated cluster): 로컬 Kubernetes 배포판(예: k3s)이 Linux 패키지 인스턴스와 동일한 호스트에서 실행됩니다.

Status: Beta

히스토리
  • GitLab 19.0에서 베타 기능으로 도입됨.

Linux 패키지로 설치된 GitLab 인스턴스와 함께 OpenBao를 실행하려면 Kubernetes 클러스터를 사용하세요. OpenBao는 클러스터 내에서 실행되며 PostgreSQL 데이터베이스에 연결됩니다. GitLab Rails와 Sidekiq는 HTTPS를 통해 OpenBao에 연결합니다.

OpenBao를 실행하는 두 가지 방법이 있습니다:

  • 코로케이티드 클러스터(Colocated cluster): 로컬 Kubernetes 배포판(예: k3s)이 Linux 패키지 인스턴스와 동일한 호스트에서 실행됩니다. Linux 패키지로 관리되는 NGINX가 OpenBao 외부 URL의 TLS를 종료하는 리버스 프록시 역할을 합니다. GitLab 애플리케이션은 공유 네트워크에서 Kubernetes가 노출하는 엔드포인트를 통해 OpenBao에 연결합니다.

  • 외부 Kubernetes 클러스터(External Kubernetes cluster): OpenBao가 별도의 Kubernetes 클러스터에서 실행됩니다. 클러스터 Ingress와 TLS 종료는 직접 설계합니다. GitLab Rails와 Sidekiq는 노출한 OpenBao URL에 연결합니다. 멀티 노드 Linux 패키지 배포를 사용하거나 클라우드 제공업체의 관리형 Kubernetes 서비스를 선호하는 경우 이 방법을 고려하세요.

Linux 패키지로 관리되는 PostgreSQL 클러스터는 OpenBao 데이터베이스 백엔드로 지원되지 않습니다. 이 클러스터를 GitLab에 사용하는 경우, OpenBao를 위한 별도의 PostgreSQL 인스턴스를 프로비저닝하세요. 자체 관리형 또는 관리형 클라우드 데이터베이스 서비스를 사용할 수 있습니다. 자세한 내용은 이슈 7292를 참조하세요.

사전 요구 사항#

  • Linux 패키지로 설치된 GitLab 19.0 이상(관리자 접근 권한 포함).

  • 동일한 호스트에 설치된 로컬 Kubernetes 배포판.

  • 호스트에서 사용 가능한 helmkubectl.

  • OpenBao 도메인을 호스트의 공개 IP 주소로 가리키는 DNS 레코드.

  • Linux 패키지로 설치된 GitLab 인스턴스(관리자 접근 권한 포함).

  • Linux 패키지 인스턴스 노드에서 접근 가능한 외부 Kubernetes 클러스터.

  • 클러스터에 접근하도록 구성된 helmkubectl.

  • OpenBao 도메인을 클러스터 Ingress IP 주소로 가리키는 DNS 레코드.

요구 사항#

OpenBao를 설치하기 전에 Kubernetes 배포판이 다음 요구 사항을 충족하는지 확인하세요:

  • Linux 패키지 인스턴스 요구 사항 및 Kubernetes 클러스터 요구 사항 외에도 OpenBao 사이징 권장 사항을 충족해야 합니다.

  • 코로케이티드 Kubernetes의 어떤 것도 GitLab이 이미 사용하는 포트에 연결하려 해서는 안 됩니다. 많은 소형 Kubernetes 배포판은 기본적으로 포트 80 및 443에 바인딩되는 로드 밸런서를 설치합니다. Linux 패키지로 관리되는 NGINX가 이미 해당 포트에서 수신 대기 중이므로 이러한 컴포넌트를 비활성화하세요.

  • 코로케이티드 Kubernetes는 Linux 패키지 인스턴스와 네트워크를 공유해야 합니다. 이를 통해 Linux 패키지로 관리되는 NGINX가 외부 OpenBao 트래픽을 OpenBao 서비스로 라우팅하고 요청을 수신할 수 있습니다. Linux 패키지 인스턴스는 서비스가 Kubernetes LoadBalancer 또는 NodePort를 통해 노출되는지 여부와 관계없이, 공유 네트워크 내에서 양쪽에 모두 도달할 수 있으면 됩니다.

OpenBao를 설치하기 전에 설정이 다음 요구 사항을 충족하는지 확인하세요:

  • Kubernetes 클러스터가 OpenBao 사이징 권장 사항을 충족해야 합니다.

  • 클러스터의 OpenBao Pod와 Linux 패키지 인스턴스 노드 간에 네트워크 연결이 존재해야 합니다. 이 연결을 설정하는 방법은 인프라에 따라 다릅니다. 예를 들어 VPC 피어링, 공유 VPC 또는 방화벽 규칙을 사용할 수 있습니다. GitLab Rails와 Sidekiq는 클러스터에서 노출하는 OpenBao URL에 도달할 수 있어야 합니다.

  • OpenBao 데이터베이스로 Linux 패키지로 관리되는 PostgreSQL을 사용하는 경우, PostgreSQL 노드는 클러스터 Pod CIDR에서의 TCP 연결을 허용해야 합니다. 데이터베이스 포트에서 이 트래픽을 허용하도록 방화벽 또는 보안 그룹 규칙을 구성하세요.

시작하기 전에#

시작하기 전에:

  • Kubernetes CNI(Pod 네트워크)의 CIDR을 수집하세요. 나중에 PostgreSQL 인증을 구성할 때 필요합니다.

  • Linux 패키지 인스턴스와 Kubernetes 간에 공유되는 네트워크 인터페이스의 IP 주소를 수집하세요 (). 나중에 여러 구성 값에 필요합니다.

  • OpenBao를 설치하기 전에 Kubernetes 배포판이 완전히 실행 중인지 확인하세요.

  • kubectl 컨텍스트가 이 클러스터로 설정되어 있는지 확인하세요(KUBECONFIG가 올바르게 구성됨).

시작하기 전에:

  • Kubernetes Pod 네트워크의 CIDR을 수집하세요. 나중에 PostgreSQL 인증을 구성할 때 필요합니다.

  • OpenBao가 사용하는 PostgreSQL 인스턴스의 주소를 수집하세요(). 이는 Linux 패키지 PostgreSQL 노드의 IP 주소이거나 외부 또는 관리형 PostgreSQL 인스턴스의 엔드포인트입니다.

  • OpenBao를 설치하기 전에 Kubernetes 클러스터가 완전히 실행 중인지 확인하세요.

  • kubectl 컨텍스트가 이 클러스터로 설정되어 있는지 확인하세요(KUBECONFIG가 올바르게 구성됨).

OpenBao PostgreSQL 데이터베이스 프로비저닝#

gitlab-psql은 Linux 패키지로 관리되는 PostgreSQL을 사용할 때만 사용 가능합니다. 외부 또는 관리형 PostgreSQL 인스턴스를 사용하는 경우, 해당 인스턴스에서 동일한 SQL 명령어를 실행하세요. 사용자 및 데이터베이스 생성 로직은 동일합니다.

gitlab-psql은 Unix 소켓을 통해 연결하며 TCP 리스너가 필요하지 않으므로, gitlab-ctl reconfigure 전에도 이 명령어를 실행할 수 있습니다.

OpenBao PostgreSQL 데이터베이스를 프로비저닝하려면:

  1. OpenBao 데이터베이스 사용자에 대한 강력한 비밀번호를 선택하세요. 이 비밀번호는 이 섹션의 마지막 단계에서 Kubernetes 시크릿에 동일하게 사용됩니다.

  2. OpenBao 데이터베이스 사용자를 생성하세요:

    sudo gitlab-psql \
      -c "CREATE USER openbao WITH PASSWORD '<strong-password>';"
    
  3. OpenBao 데이터베이스를 생성하세요:

    sudo gitlab-psql \
      -c "CREATE DATABASE openbao OWNER openbao;"
    
  4. Kubernetes 네임스페이스와 데이터베이스 비밀번호를 Helm 차트에 전달하는 시크릿을 생성하세요:

    kubectl create namespace openbao
    
    kubectl create secret generic openbao-db-secret \
      --namespace openbao \
      --from-literal=password='<strong-password>'
    

Helm을 사용하여 OpenBao 설치#

Helm을 사용하여 OpenBao를 설치하려면:

  1. GitLab Helm 리포지터리를 추가하세요:

    helm repo add gitlab https://charts.gitlab.io
    helm repo update
    
  2. 다음 내용으로 openbao-values.yaml 파일을 생성하고, 플레이스홀더 값을 실제 도메인과 IP 주소로 교체하세요:

    config:
      ui: false
      storage:
        postgresql:
          haEnabled: true
          connection:
            host: ""
            port: 5432
            database: openbao
            username: openbao
            sslMode: "disable"
            password:
              secret: openbao-db-secret
              key: password
      initialize:
        enabled: true
        oidcDiscoveryUrl: "https://"
        boundIssuer: "https://"
        boundAudiences: '"https://"'
    
    gatewayRoute:
      enabled: false
    
  3. OpenBao를 설치하세요:

    helm upgrade --install openbao gitlab/openbao \
      --namespace openbao \
      --values openbao-values.yaml
    

    --wait를 사용하지 마세요. Pod가 PostgreSQL에 연결할 수 없기 때문입니다. PostgreSQL은 gitlab-ctl reconfigure 이후에만 Pod 네트워크에서의 TCP 연결을 허용합니다. 현재 Pod는 CrashLoopBackOff 상태입니다.

    사용 가능한 모든 차트 옵션은 OpenBao Helm 차트 문서를 참조하세요.

  4. OpenBao 서비스에 사용할 내부 URL을 정의하세요. 여러 옵션이 있습니다:

    로드 밸런서. 코로케이티드 Kubernetes 클러스터에서 내부 로드 밸런서를 사용하는 경우, gitlab.rb 파일의 oak['components']['openbao']['internal_url'] 설정을 로드 밸런서의 내부 URL로 설정하여 요청을 OpenBao Kubernetes 서비스로 라우팅할 수 있습니다. 이 경우 내부 URL이 내부 로드 밸런서 IP로 해석되도록 DNS를 구성해야 합니다.

    • 클러스터 nodePort. OpenBao 차트 서비스를 Kubernetes 서비스 유형 nodePort로 실행하도록 사용자 정의하는 경우, 내부 URL을 해당 포트로 구성할 수도 있습니다.

    • 서비스 clusterIP. 이 옵션이 가장 간단할 수 있습니다. OpenBao 내부 URL을 OpenBao 서비스 clusterIP에 직접 연결하도록 설정하여 코로케이티드 클러스터에서 로드 밸런서를 완전히 건너뛸 수도 있습니다. Linux 패키지로 관리되는 NGINX가 이미 있으므로 머신에 로드 밸런서를 추가로 설치할 필요가 없습니다.

    다음 명령어를 실행하여 OpenBao 서비스의 clusterIP를 찾을 수 있습니다:

    kubectl -n openbao get svc openbao-active \
      -o jsonpath='{.spec.clusterIP}'
    

    내부 URL의 IP는 Kubernetes 클러스터 외부의 호스트 머신에서 접근할 수 있어야 합니다. 선택한 에서 IP를 할당하도록 클러스터를 구성하세요.

Helm을 사용하여 OpenBao를 설치하려면:

  1. GitLab Helm 리포지터리를 추가하세요:

    helm repo add gitlab https://charts.gitlab.io
    helm repo update
    
  2. 다음 내용으로 openbao-values.yaml 파일을 생성하고, 플레이스홀더 값을 실제 도메인과 PostgreSQL 주소로 교체하세요:

    config:
      ui: false
      storage:
        postgresql:
          haEnabled: true
          connection:
            host: ""
            port: 5432
            database: openbao
            username: openbao
            password:
              secret: openbao-db-secret
              key: password
      initialize:
        enabled: true
        oidcDiscoveryUrl: "https://"
        boundIssuer: "https://"
        boundAudiences: '"https://"'
    
    # 차트는 기본적으로 Kubernetes Ingress 리소스를 배포합니다. GitLab Rails와 Sidekiq에서 도달 가능한 호스트명을 제공해야 합니다.
    # Gateway API 컨트롤러를 배포하려는 경우 HTTPRoute 리소스를 배포하도록 구성할 수도 있습니다.
    #
    # 사용 가능한 네트워크 ingress 및 TLS 구성 옵션은 다음을 참조하세요:
    # https://docs.gitlab.com/charts/charts/openbao/#ingress-and-tls-configuration-options
    ingress:
      enabled: true
      hostname: ""
    
  3. OpenBao를 설치하세요:

    helm upgrade --install openbao gitlab/openbao \
      --namespace openbao \
      --values openbao-values.yaml
    

    사용 가능한 모든 차트 옵션은 OpenBao Helm 차트 문서를 참조하세요.

GitLab 구성#

GitLab 호스트의 /etc/gitlab/gitlab.rb에 다음을 추가하고, 플레이스홀더 값을 실제 IP 주소와 도메인으로 교체하세요:

# PostgreSQL: Kubernetes Pod에서의 TCP 연결 허용.
# 공유 네트워크 IP를 사용하여 공유 네트워크로 노출을 제한합니다.
# '0.0.0.0'을 사용하면 PostgreSQL이 공개 인터페이스를 포함한 모든 인터페이스에서 수신 대기합니다.
postgresql['listen_address'] = ''

# 로컬 연결(GitLab Rails 및 기타 서비스)은 비밀번호 없이 계속 사용됩니다.
postgresql['trust_auth_cidr_addresses'] = %w[127.0.0.1/32 ::1/128]

# Kubernetes Pod는 비밀번호로 인증합니다.
# 10.42.0.0/16을 Kubernetes CNI(Pod 네트워크)의 CIDR로 교체하세요.
postgresql['md5_auth_cidr_addresses'] = %w[10.42.0.0/16]

# OAK: GitLab NGINX를 통한 OpenBao 리버스 프록시.
oak['enable'] = true
oak['network_address'] = ''

oak['components']['openbao']['enable'] = true

# 'https://openbao.example.com'을 호스트의 공개 IP 주소로 해석되는
# OpenBao에 대해 구성한 DNS 레코드의 URL로 교체하세요.
oak['components']['openbao']['external_url'] = 'https://openbao.example.com'

# 서비스 clusterIP 예시. 를 이전 단계에서 가져온 IP로 교체하세요.
#
# nodePort는 유사하게 보입니다: OpenBao를 배포할 때 선택한 포트와 함께 클러스터 노드 IP를 지정합니다.
#
# 로드 밸런서 뒤에 있는 경우: 'http://openbao-internal.example.com'
oak['components']['openbao']['internal_url'] = 'http://:8200'

# GitLab 애플리케이션이 OpenBao에 연결하는 데 사용하는 URL.
gitlab_rails['openbao'] = {
  'url' => 'https://openbao.example.com'
}

이 구성에서:

  • postgresql['listen_address']는 공유 네트워크 IP입니다. trust_auth_cidr_addresses 또는 md5_auth_cidr_addresses에 나열되지 않은 CIDR에서의 연결은 PostgreSQL에 의해 거부됩니다.

  • postgresql['trust_auth_cidr_addresses']는 CIDR 블록(localhost만)의 목록입니다. 이 블록에서의 연결은 비밀번호가 필요하지 않습니다. 이 주소는 GitLab 서비스에서 사용됩니다.

  • postgresql['md5_auth_cidr_addresses']는 Pod CIDR에서의 CIDR 블록 목록입니다. 이 블록에서의 연결은 비밀번호가 필요합니다. 이 주소는 OpenBao Pod에서 사용됩니다. 비밀번호 인증. OpenBao Pod에서 사용됩니다.

  • oak['network_address']는 공유 네트워크 IP입니다. NGINX listen 지시문에서 사용됩니다.

  • oak['components']['openbao']['internal_url']은 GitLab 애플리케이션이 OpenBao와 통신하는 데 사용하는 URL입니다.

  • gitlab_rails['openbao']['url']은 GitLab 애플리케이션에서 사용하는 OpenBao URL입니다.

GitLab external_url 설정이 https://를 사용하는 경우, Let's Encrypt가 이미 활성화되어 있습니다. OpenBao external_url 스킴을 https://로 설정하는 것으로 충분합니다. GitLab은 자동으로 OpenBao 도메인을 기존 Let's Encrypt 인증서의 주체 대체 이름(Subject Alternative Name, SAN)으로 추가합니다.

대신 사용자 정의 인증서를 사용하려면 다음을 추가하세요:

oak['components']['openbao']['ssl_certificate']     = '/etc/gitlab/ssl/openbao.example.com.crt'
oak['components']['openbao']['ssl_certificate_key'] = '/etc/gitlab/ssl/openbao.example.com.key'

각 GitLab 애플리케이션 노드의 /etc/gitlab/gitlab.rb에 다음을 추가하고, 플레이스홀더 값을 실제 주소와 도메인으로 교체하세요:

# GitLab Rails가 OpenBao에 연결하는 데 사용하는 URL.
gitlab_rails['openbao'] = {
  'url' => 'https://openbao.example.com'
}

별도의 Sidekiq 노드가 있는 경우, 각 Sidekiq 노드의 /etc/gitlab/gitlab.rb에도 동일한 gitlab_rails['openbao'] 설정을 추가하세요. 시크릿을 프로비저닝하는 Sidekiq 워커도 OpenBao에 대한 접근이 필요합니다.

OpenBao 데이터베이스로 Linux 패키지로 관리되는 PostgreSQL을 사용하는 경우, PostgreSQL 노드의 /etc/gitlab/gitlab.rb에도 다음을 추가하세요:

# PostgreSQL: Kubernetes Pod에서의 TCP 연결 허용.
postgresql['listen_address'] = ''

# 로컬 연결(GitLab Rails 및 기타 서비스)은 비밀번호 없이 계속 사용됩니다.
postgresql['trust_auth_cidr_addresses'] = %w[127.0.0.1/32 ::1/128]

# Kubernetes Pod는 비밀번호로 인증합니다.
# 10.0.0.0/14를 Kubernetes Pod 네트워크의 CIDR로 교체하세요.
postgresql['md5_auth_cidr_addresses'] = %w[10.0.0.0/14]

구성 변경 사항 적용#

구성 변경 사항을 적용하세요:

sudo gitlab-ctl reconfigure

이 명령어는 모든 구성을 단일 패스로 적용합니다:

  • PostgreSQL이 Kubernetes Pod에서의 TCP 연결 수락을 시작합니다.

  • NGINX가 TLS 종료 및 HTTP에서 HTTPS로의 리다이렉트를 포함하여 OpenBao 가상 호스트로 구성됩니다.

  • 해당하는 경우 Let's Encrypt 인증서가 발급되거나 갱신됩니다.

gitlab.rb를 업데이트한 각 노드에서 구성 변경 사항을 적용하세요:

sudo gitlab-ctl reconfigure

PostgreSQL 노드에서 이 명령어는 PostgreSQL이 클러스터 Pod 네트워크에서의 TCP 연결을 수락하도록 합니다. Rails 및 Sidekiq 노드에서 이 명령어는 OpenBao URL 구성을 적용합니다.

OpenBao가 준비될 때까지 대기#

롤아웃이 완료될 때까지 기다리세요:

kubectl -n openbao rollout status deployment openbao

코로케이티드 클러스터의 경우, 이전에 CrashLoopBackOff 상태였던 Pod는 gitlab-ctl reconfigure가 완료된 후 정상 상태가 됩니다.

설치 확인#

설치를 확인하려면:

  1. OpenBao에 접근할 수 있는지 확인하세요:

    curl "https://openbao.example.com/v1/sys/health"
    

    성공적인 응답은 다음과 같습니다:

    {
      "initialized": true,
      "sealed": false,
      "standby": false,
      "version": "2.0.0"
    }
    
  2. GitLab Secrets Manager를 활성화하세요.

GitLab Linux 패키지 배포에 OpenBao 설치

GitLab v19.1
Tier: Premium, Ultimate
Offering: GitLab Self-Managed
원문 보기
요약

Linux 패키지로 설치된 GitLab 인스턴스와 함께 OpenBao를 실행하려면 Kubernetes 클러스터를 사용하세요. OpenBao를 실행하는 두 가지 방법이 있습니다: 코로케이티드 클러스터(Colocated cluster): 로컬 Kubernetes 배포판(예: k3s)이 Linux 패키지 인스턴스와 동일한 호스트에서 실행됩니다.

Status: Beta

히스토리
  • GitLab 19.0에서 베타 기능으로 도입됨.

Linux 패키지로 설치된 GitLab 인스턴스와 함께 OpenBao를 실행하려면 Kubernetes 클러스터를 사용하세요. OpenBao는 클러스터 내에서 실행되며 PostgreSQL 데이터베이스에 연결됩니다. GitLab Rails와 Sidekiq는 HTTPS를 통해 OpenBao에 연결합니다.

OpenBao를 실행하는 두 가지 방법이 있습니다:

  • 코로케이티드 클러스터(Colocated cluster): 로컬 Kubernetes 배포판(예: k3s)이 Linux 패키지 인스턴스와 동일한 호스트에서 실행됩니다. Linux 패키지로 관리되는 NGINX가 OpenBao 외부 URL의 TLS를 종료하는 리버스 프록시 역할을 합니다. GitLab 애플리케이션은 공유 네트워크에서 Kubernetes가 노출하는 엔드포인트를 통해 OpenBao에 연결합니다.

  • 외부 Kubernetes 클러스터(External Kubernetes cluster): OpenBao가 별도의 Kubernetes 클러스터에서 실행됩니다. 클러스터 Ingress와 TLS 종료는 직접 설계합니다. GitLab Rails와 Sidekiq는 노출한 OpenBao URL에 연결합니다. 멀티 노드 Linux 패키지 배포를 사용하거나 클라우드 제공업체의 관리형 Kubernetes 서비스를 선호하는 경우 이 방법을 고려하세요.

Linux 패키지로 관리되는 PostgreSQL 클러스터는 OpenBao 데이터베이스 백엔드로 지원되지 않습니다. 이 클러스터를 GitLab에 사용하는 경우, OpenBao를 위한 별도의 PostgreSQL 인스턴스를 프로비저닝하세요. 자체 관리형 또는 관리형 클라우드 데이터베이스 서비스를 사용할 수 있습니다. 자세한 내용은 이슈 7292를 참조하세요.

사전 요구 사항#

  • Linux 패키지로 설치된 GitLab 19.0 이상(관리자 접근 권한 포함).

  • 동일한 호스트에 설치된 로컬 Kubernetes 배포판.

  • 호스트에서 사용 가능한 helmkubectl.

  • OpenBao 도메인을 호스트의 공개 IP 주소로 가리키는 DNS 레코드.

  • Linux 패키지로 설치된 GitLab 인스턴스(관리자 접근 권한 포함).

  • Linux 패키지 인스턴스 노드에서 접근 가능한 외부 Kubernetes 클러스터.

  • 클러스터에 접근하도록 구성된 helmkubectl.

  • OpenBao 도메인을 클러스터 Ingress IP 주소로 가리키는 DNS 레코드.

요구 사항#

OpenBao를 설치하기 전에 Kubernetes 배포판이 다음 요구 사항을 충족하는지 확인하세요:

  • Linux 패키지 인스턴스 요구 사항 및 Kubernetes 클러스터 요구 사항 외에도 OpenBao 사이징 권장 사항을 충족해야 합니다.

  • 코로케이티드 Kubernetes의 어떤 것도 GitLab이 이미 사용하는 포트에 연결하려 해서는 안 됩니다. 많은 소형 Kubernetes 배포판은 기본적으로 포트 80 및 443에 바인딩되는 로드 밸런서를 설치합니다. Linux 패키지로 관리되는 NGINX가 이미 해당 포트에서 수신 대기 중이므로 이러한 컴포넌트를 비활성화하세요.

  • 코로케이티드 Kubernetes는 Linux 패키지 인스턴스와 네트워크를 공유해야 합니다. 이를 통해 Linux 패키지로 관리되는 NGINX가 외부 OpenBao 트래픽을 OpenBao 서비스로 라우팅하고 요청을 수신할 수 있습니다. Linux 패키지 인스턴스는 서비스가 Kubernetes LoadBalancer 또는 NodePort를 통해 노출되는지 여부와 관계없이, 공유 네트워크 내에서 양쪽에 모두 도달할 수 있으면 됩니다.

OpenBao를 설치하기 전에 설정이 다음 요구 사항을 충족하는지 확인하세요:

  • Kubernetes 클러스터가 OpenBao 사이징 권장 사항을 충족해야 합니다.

  • 클러스터의 OpenBao Pod와 Linux 패키지 인스턴스 노드 간에 네트워크 연결이 존재해야 합니다. 이 연결을 설정하는 방법은 인프라에 따라 다릅니다. 예를 들어 VPC 피어링, 공유 VPC 또는 방화벽 규칙을 사용할 수 있습니다. GitLab Rails와 Sidekiq는 클러스터에서 노출하는 OpenBao URL에 도달할 수 있어야 합니다.

  • OpenBao 데이터베이스로 Linux 패키지로 관리되는 PostgreSQL을 사용하는 경우, PostgreSQL 노드는 클러스터 Pod CIDR에서의 TCP 연결을 허용해야 합니다. 데이터베이스 포트에서 이 트래픽을 허용하도록 방화벽 또는 보안 그룹 규칙을 구성하세요.

시작하기 전에#

시작하기 전에:

  • Kubernetes CNI(Pod 네트워크)의 CIDR을 수집하세요. 나중에 PostgreSQL 인증을 구성할 때 필요합니다.

  • Linux 패키지 인스턴스와 Kubernetes 간에 공유되는 네트워크 인터페이스의 IP 주소를 수집하세요 (). 나중에 여러 구성 값에 필요합니다.

  • OpenBao를 설치하기 전에 Kubernetes 배포판이 완전히 실행 중인지 확인하세요.

  • kubectl 컨텍스트가 이 클러스터로 설정되어 있는지 확인하세요(KUBECONFIG가 올바르게 구성됨).

시작하기 전에:

  • Kubernetes Pod 네트워크의 CIDR을 수집하세요. 나중에 PostgreSQL 인증을 구성할 때 필요합니다.

  • OpenBao가 사용하는 PostgreSQL 인스턴스의 주소를 수집하세요(). 이는 Linux 패키지 PostgreSQL 노드의 IP 주소이거나 외부 또는 관리형 PostgreSQL 인스턴스의 엔드포인트입니다.

  • OpenBao를 설치하기 전에 Kubernetes 클러스터가 완전히 실행 중인지 확인하세요.

  • kubectl 컨텍스트가 이 클러스터로 설정되어 있는지 확인하세요(KUBECONFIG가 올바르게 구성됨).

OpenBao PostgreSQL 데이터베이스 프로비저닝#

gitlab-psql은 Linux 패키지로 관리되는 PostgreSQL을 사용할 때만 사용 가능합니다. 외부 또는 관리형 PostgreSQL 인스턴스를 사용하는 경우, 해당 인스턴스에서 동일한 SQL 명령어를 실행하세요. 사용자 및 데이터베이스 생성 로직은 동일합니다.

gitlab-psql은 Unix 소켓을 통해 연결하며 TCP 리스너가 필요하지 않으므로, gitlab-ctl reconfigure 전에도 이 명령어를 실행할 수 있습니다.

OpenBao PostgreSQL 데이터베이스를 프로비저닝하려면:

  1. OpenBao 데이터베이스 사용자에 대한 강력한 비밀번호를 선택하세요. 이 비밀번호는 이 섹션의 마지막 단계에서 Kubernetes 시크릿에 동일하게 사용됩니다.

  2. OpenBao 데이터베이스 사용자를 생성하세요:

    sudo gitlab-psql \
      -c "CREATE USER openbao WITH PASSWORD '<strong-password>';"
    
  3. OpenBao 데이터베이스를 생성하세요:

    sudo gitlab-psql \
      -c "CREATE DATABASE openbao OWNER openbao;"
    
  4. Kubernetes 네임스페이스와 데이터베이스 비밀번호를 Helm 차트에 전달하는 시크릿을 생성하세요:

    kubectl create namespace openbao
    
    kubectl create secret generic openbao-db-secret \
      --namespace openbao \
      --from-literal=password='<strong-password>'
    

Helm을 사용하여 OpenBao 설치#

Helm을 사용하여 OpenBao를 설치하려면:

  1. GitLab Helm 리포지터리를 추가하세요:

    helm repo add gitlab https://charts.gitlab.io
    helm repo update
    
  2. 다음 내용으로 openbao-values.yaml 파일을 생성하고, 플레이스홀더 값을 실제 도메인과 IP 주소로 교체하세요:

    config:
      ui: false
      storage:
        postgresql:
          haEnabled: true
          connection:
            host: ""
            port: 5432
            database: openbao
            username: openbao
            sslMode: "disable"
            password:
              secret: openbao-db-secret
              key: password
      initialize:
        enabled: true
        oidcDiscoveryUrl: "https://"
        boundIssuer: "https://"
        boundAudiences: '"https://"'
    
    gatewayRoute:
      enabled: false
    
  3. OpenBao를 설치하세요:

    helm upgrade --install openbao gitlab/openbao \
      --namespace openbao \
      --values openbao-values.yaml
    

    --wait를 사용하지 마세요. Pod가 PostgreSQL에 연결할 수 없기 때문입니다. PostgreSQL은 gitlab-ctl reconfigure 이후에만 Pod 네트워크에서의 TCP 연결을 허용합니다. 현재 Pod는 CrashLoopBackOff 상태입니다.

    사용 가능한 모든 차트 옵션은 OpenBao Helm 차트 문서를 참조하세요.

  4. OpenBao 서비스에 사용할 내부 URL을 정의하세요. 여러 옵션이 있습니다:

    로드 밸런서. 코로케이티드 Kubernetes 클러스터에서 내부 로드 밸런서를 사용하는 경우, gitlab.rb 파일의 oak['components']['openbao']['internal_url'] 설정을 로드 밸런서의 내부 URL로 설정하여 요청을 OpenBao Kubernetes 서비스로 라우팅할 수 있습니다. 이 경우 내부 URL이 내부 로드 밸런서 IP로 해석되도록 DNS를 구성해야 합니다.

    • 클러스터 nodePort. OpenBao 차트 서비스를 Kubernetes 서비스 유형 nodePort로 실행하도록 사용자 정의하는 경우, 내부 URL을 해당 포트로 구성할 수도 있습니다.

    • 서비스 clusterIP. 이 옵션이 가장 간단할 수 있습니다. OpenBao 내부 URL을 OpenBao 서비스 clusterIP에 직접 연결하도록 설정하여 코로케이티드 클러스터에서 로드 밸런서를 완전히 건너뛸 수도 있습니다. Linux 패키지로 관리되는 NGINX가 이미 있으므로 머신에 로드 밸런서를 추가로 설치할 필요가 없습니다.

    다음 명령어를 실행하여 OpenBao 서비스의 clusterIP를 찾을 수 있습니다:

    kubectl -n openbao get svc openbao-active \
      -o jsonpath='{.spec.clusterIP}'
    

    내부 URL의 IP는 Kubernetes 클러스터 외부의 호스트 머신에서 접근할 수 있어야 합니다. 선택한 에서 IP를 할당하도록 클러스터를 구성하세요.

Helm을 사용하여 OpenBao를 설치하려면:

  1. GitLab Helm 리포지터리를 추가하세요:

    helm repo add gitlab https://charts.gitlab.io
    helm repo update
    
  2. 다음 내용으로 openbao-values.yaml 파일을 생성하고, 플레이스홀더 값을 실제 도메인과 PostgreSQL 주소로 교체하세요:

    config:
      ui: false
      storage:
        postgresql:
          haEnabled: true
          connection:
            host: ""
            port: 5432
            database: openbao
            username: openbao
            password:
              secret: openbao-db-secret
              key: password
      initialize:
        enabled: true
        oidcDiscoveryUrl: "https://"
        boundIssuer: "https://"
        boundAudiences: '"https://"'
    
    # 차트는 기본적으로 Kubernetes Ingress 리소스를 배포합니다. GitLab Rails와 Sidekiq에서 도달 가능한 호스트명을 제공해야 합니다.
    # Gateway API 컨트롤러를 배포하려는 경우 HTTPRoute 리소스를 배포하도록 구성할 수도 있습니다.
    #
    # 사용 가능한 네트워크 ingress 및 TLS 구성 옵션은 다음을 참조하세요:
    # https://docs.gitlab.com/charts/charts/openbao/#ingress-and-tls-configuration-options
    ingress:
      enabled: true
      hostname: ""
    
  3. OpenBao를 설치하세요:

    helm upgrade --install openbao gitlab/openbao \
      --namespace openbao \
      --values openbao-values.yaml
    

    사용 가능한 모든 차트 옵션은 OpenBao Helm 차트 문서를 참조하세요.

GitLab 구성#

GitLab 호스트의 /etc/gitlab/gitlab.rb에 다음을 추가하고, 플레이스홀더 값을 실제 IP 주소와 도메인으로 교체하세요:

# PostgreSQL: Kubernetes Pod에서의 TCP 연결 허용.
# 공유 네트워크 IP를 사용하여 공유 네트워크로 노출을 제한합니다.
# '0.0.0.0'을 사용하면 PostgreSQL이 공개 인터페이스를 포함한 모든 인터페이스에서 수신 대기합니다.
postgresql['listen_address'] = ''

# 로컬 연결(GitLab Rails 및 기타 서비스)은 비밀번호 없이 계속 사용됩니다.
postgresql['trust_auth_cidr_addresses'] = %w[127.0.0.1/32 ::1/128]

# Kubernetes Pod는 비밀번호로 인증합니다.
# 10.42.0.0/16을 Kubernetes CNI(Pod 네트워크)의 CIDR로 교체하세요.
postgresql['md5_auth_cidr_addresses'] = %w[10.42.0.0/16]

# OAK: GitLab NGINX를 통한 OpenBao 리버스 프록시.
oak['enable'] = true
oak['network_address'] = ''

oak['components']['openbao']['enable'] = true

# 'https://openbao.example.com'을 호스트의 공개 IP 주소로 해석되는
# OpenBao에 대해 구성한 DNS 레코드의 URL로 교체하세요.
oak['components']['openbao']['external_url'] = 'https://openbao.example.com'

# 서비스 clusterIP 예시. 를 이전 단계에서 가져온 IP로 교체하세요.
#
# nodePort는 유사하게 보입니다: OpenBao를 배포할 때 선택한 포트와 함께 클러스터 노드 IP를 지정합니다.
#
# 로드 밸런서 뒤에 있는 경우: 'http://openbao-internal.example.com'
oak['components']['openbao']['internal_url'] = 'http://:8200'

# GitLab 애플리케이션이 OpenBao에 연결하는 데 사용하는 URL.
gitlab_rails['openbao'] = {
  'url' => 'https://openbao.example.com'
}

이 구성에서:

  • postgresql['listen_address']는 공유 네트워크 IP입니다. trust_auth_cidr_addresses 또는 md5_auth_cidr_addresses에 나열되지 않은 CIDR에서의 연결은 PostgreSQL에 의해 거부됩니다.

  • postgresql['trust_auth_cidr_addresses']는 CIDR 블록(localhost만)의 목록입니다. 이 블록에서의 연결은 비밀번호가 필요하지 않습니다. 이 주소는 GitLab 서비스에서 사용됩니다.

  • postgresql['md5_auth_cidr_addresses']는 Pod CIDR에서의 CIDR 블록 목록입니다. 이 블록에서의 연결은 비밀번호가 필요합니다. 이 주소는 OpenBao Pod에서 사용됩니다. 비밀번호 인증. OpenBao Pod에서 사용됩니다.

  • oak['network_address']는 공유 네트워크 IP입니다. NGINX listen 지시문에서 사용됩니다.

  • oak['components']['openbao']['internal_url']은 GitLab 애플리케이션이 OpenBao와 통신하는 데 사용하는 URL입니다.

  • gitlab_rails['openbao']['url']은 GitLab 애플리케이션에서 사용하는 OpenBao URL입니다.

GitLab external_url 설정이 https://를 사용하는 경우, Let's Encrypt가 이미 활성화되어 있습니다. OpenBao external_url 스킴을 https://로 설정하는 것으로 충분합니다. GitLab은 자동으로 OpenBao 도메인을 기존 Let's Encrypt 인증서의 주체 대체 이름(Subject Alternative Name, SAN)으로 추가합니다.

대신 사용자 정의 인증서를 사용하려면 다음을 추가하세요:

oak['components']['openbao']['ssl_certificate']     = '/etc/gitlab/ssl/openbao.example.com.crt'
oak['components']['openbao']['ssl_certificate_key'] = '/etc/gitlab/ssl/openbao.example.com.key'

각 GitLab 애플리케이션 노드의 /etc/gitlab/gitlab.rb에 다음을 추가하고, 플레이스홀더 값을 실제 주소와 도메인으로 교체하세요:

# GitLab Rails가 OpenBao에 연결하는 데 사용하는 URL.
gitlab_rails['openbao'] = {
  'url' => 'https://openbao.example.com'
}

별도의 Sidekiq 노드가 있는 경우, 각 Sidekiq 노드의 /etc/gitlab/gitlab.rb에도 동일한 gitlab_rails['openbao'] 설정을 추가하세요. 시크릿을 프로비저닝하는 Sidekiq 워커도 OpenBao에 대한 접근이 필요합니다.

OpenBao 데이터베이스로 Linux 패키지로 관리되는 PostgreSQL을 사용하는 경우, PostgreSQL 노드의 /etc/gitlab/gitlab.rb에도 다음을 추가하세요:

# PostgreSQL: Kubernetes Pod에서의 TCP 연결 허용.
postgresql['listen_address'] = ''

# 로컬 연결(GitLab Rails 및 기타 서비스)은 비밀번호 없이 계속 사용됩니다.
postgresql['trust_auth_cidr_addresses'] = %w[127.0.0.1/32 ::1/128]

# Kubernetes Pod는 비밀번호로 인증합니다.
# 10.0.0.0/14를 Kubernetes Pod 네트워크의 CIDR로 교체하세요.
postgresql['md5_auth_cidr_addresses'] = %w[10.0.0.0/14]

구성 변경 사항 적용#

구성 변경 사항을 적용하세요:

sudo gitlab-ctl reconfigure

이 명령어는 모든 구성을 단일 패스로 적용합니다:

  • PostgreSQL이 Kubernetes Pod에서의 TCP 연결 수락을 시작합니다.

  • NGINX가 TLS 종료 및 HTTP에서 HTTPS로의 리다이렉트를 포함하여 OpenBao 가상 호스트로 구성됩니다.

  • 해당하는 경우 Let's Encrypt 인증서가 발급되거나 갱신됩니다.

gitlab.rb를 업데이트한 각 노드에서 구성 변경 사항을 적용하세요:

sudo gitlab-ctl reconfigure

PostgreSQL 노드에서 이 명령어는 PostgreSQL이 클러스터 Pod 네트워크에서의 TCP 연결을 수락하도록 합니다. Rails 및 Sidekiq 노드에서 이 명령어는 OpenBao URL 구성을 적용합니다.

OpenBao가 준비될 때까지 대기#

롤아웃이 완료될 때까지 기다리세요:

kubectl -n openbao rollout status deployment openbao

코로케이티드 클러스터의 경우, 이전에 CrashLoopBackOff 상태였던 Pod는 gitlab-ctl reconfigure가 완료된 후 정상 상태가 됩니다.

설치 확인#

설치를 확인하려면:

  1. OpenBao에 접근할 수 있는지 확인하세요:

    curl "https://openbao.example.com/v1/sys/health"
    

    성공적인 응답은 다음과 같습니다:

    {
      "initialized": true,
      "sealed": false,
      "standby": false,
      "version": "2.0.0"
    }
    
  2. GitLab Secrets Manager를 활성화하세요.