Connect 게이트웨이를 Cloud Build와 통합

이 튜토리얼은 여러 다른 환경에서 실행되는 GKE 클러스터에 대해 CI/CD 파이프라인을 만들 수 있도록 Cloud Build를 Connect 게이트웨이와 통합하는 방법에 관한 기본 튜토리얼입니다.

이 튜토리얼에서는 Connect 게이트웨이 가이드의 이전 섹션들과 Cloud Build에도 익숙하다고 가정합니다. 이러한 안내에서는 몇 가지 작은 스크립트 작업(아래 참조)이 필요한 cloud-sdk 빌더 이미지가 사용됩니다.

시작하기 전에

  • 다음 명령줄 도구가 설치되었는지 확인합니다.

    • 최신 버전의 Google Cloud CLI(Google Cloud와의 상호작용을 위한 명령줄 도구인 gcloud 포함).
    • kubectl

    Google Cloud와의 상호작용을 위해 Cloud Shell을 셸 환경으로 사용하는 경우 이러한 도구가 자동으로 설치됩니다.

  • 프로젝트에 사용할 수 있도록 gcloud CLI를 초기화했는지 확인합니다.

  • 설정 가이드에 설명된 대로 Connect 게이트웨이 및 기타 필요한 API가 프로젝트에 사용 설정되었는지 확인합니다.

1. Cloud Build 서비스 계정에 IAM 역할 부여

기본적으로 Cloud Build는 MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com 형식의 주소를 사용해서 Google Cloud 서비스 계정을 사용하여 모든 필요한 작업을 실행합니다. Google Cloud 콘솔Cloud Build - 설정에서 프로젝트에 대한 이 서비스 계정 이메일 주소를 확인할 수 있습니다.

Cloud Build 설정 페이지 스크린샷

게이트웨이 설정 가이드에서 IAM 권한 부여의 안내에 따라 프로젝트에 필요한 역할을 이 계정에 부여합니다.

2. Cloud Build 서비스 계정에 RBAC 정책 지정

게이트웨이 설정 가이드에서 RBAC 정책 구성의 안내에 따라 사용하려는 모든 클러스터에서 Cloud Build 서비스 계정에 적합한 권한을 부여합니다.

정책 컨트롤러를 사용하여 여러 클러스터에서 RBAC 정책을 배포하고 유지관리하는 것이 좋습니다.

3. Cloud Build 파이프라인 만들기

Cloud Build 워크플로에는 파이프라인을 구성하기 위해 cloudbuild.yaml 파일이 필요합니다. 다음은 정적 매니페스트를 2개의 서로 다른 클러스터(GKE 클러스터 하나와 VMware용 GKE 클러스터 하나)에 배포하는 간단한 예시입니다. Cloud Build 파이프라인을 구성하는 방법에 대한 자세한 내용은 Cloud Build 문서를 참조하세요.

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to GKE cluster
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to Anthos cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml

myapp.yaml에 원하는 워크플로를 배치하여 클러스터를 구성할 수 있습니다. 예를 들면 다음과 같습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Git 저장소에 구성을 푸시하면 Cloud Build 워크플로가 필요한 애플리케이션을 지정된 클러스터에 배포합니다. 또한 링크된 Git 저장소에서 변경사항을 감지하여 자동화된 애플리케이션 업데이트 또는 설치를 트리거하도록 Cloud Build를 설정할 수 있습니다.

고급 사용

표준 Cloud Build 개념이 사용되기 때문에 특정 CI/CD 요구에 맞게 이 예시를 조정하고 맞춤설정할 수 있습니다. 특히 처음부터 이미지를 빌드하여 파이프라인에 배포하려면 gke-deploy 빌더의 준비 모드를 사용하면 됩니다. 예를 들어 다음 Cloud Build 구성을 참조하세요.

  1. 이 구성은 Git 저장소 루트에 있는 Dockerfiles에서 Docker 이미지를 빌드하고 여기에 Git SHA 태그를 지정합니다.
  2. 태그가 지정된 이미지를 프로젝트의 Container Registry에 푸시합니다.
  3. 올바른 이미지 태그를 설정하고 output/expanded의 출력 매니페스트에 배치하여 manifest 디렉터리에서 Kubernetes 매니페스트를 준비합니다.
  4. Connect 게이트웨이를 사용하여 온프레미스로 GKE 클러스터에 배포합니다.
steps:
- name: 'gcr.io/cloud-builders/docker'
  id: "Build Container"
  args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  id: "Push to GCR"
  args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
  id: "Prepare Manifests"
  args:
  - prepare
  - --filename=manifests/
  - --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: "Deploy to Anthos clusters on VMware"
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

이 예시에서는 온프레미스 GKE 클러스터가 Container Registry에서 이미지를 가져오도록 승인하기 위해 이미지 가져오기 보안 비밀을 만들어야 했습니다.

Cloud Build 사용에 대한 자세한 내용은 Cloud Build 문서를 참조하세요.