2개 이상의 정보 소스에서 동기화 구성

이 페이지에서는 RootSync 및 RepoSync 객체를 만들어 두 개 이상의 루트 및 네임스페이스 범위의 정보 소스를 구성하는 방법을 설명합니다.

루트 정보 소스를 사용하면 클러스터 범위네임스페이스 범위의 구성을 동기화할 수 있습니다. 루트 정보 소스는 관리자 수준 사용자 인증 정보를 사용하여 애플리케이션 네임스페이스에 정책을 적용하고 구성에 선언한 상태에서 드리프트된 로컬 변경사항을 재정의할 수 있습니다. 중앙 관리자는 일반적으로 루트 정보 소스를 관리합니다.

네임스페이스 범위의 정보 소스는 선택사항이며 클러스터 전체에서 특정 네임스페이스와 동기화된 네임스페이스 범위 구성을 포함할 수 있습니다. 네임스페이스 범위 정보 소스의 설정 및 제어를 관리자가 아닌 사용자에게 위임할 수 있습니다. 구성 동기화는 정보 소스의 변경사항을 자동으로 감지하지만 네임스페이스 범위 정보 소스에 허용 웹훅을 추가하여 드리프트 감지 레이어를 추가할 수 있습니다. 이를 수행하는 방법에 대한 자세한 내용은 구성 드리프트 방지를 참조하세요.

시작하기 전에

  • 구성 동기화가 동기화하는 구성을 포함할 수 있는 구조화되지 않은 정보 소스를 만들거나 액세스 할 수 있는지 확인합니다. 구성 동기화는 Git 저장소, Helm 차트, OCI 이미지를 정보 소스로 지원합니다. 네임스페이스 범위의 정보 소스는 구조화되지 않은 형식을 사용해야 합니다.
  • Google Kubernetes Engine(GKE) Enterprise 버전에서 지원되는 플랫폼 및 버전에 있고, 구성 동기화 요구 사항을 충족하는 클러스터를 생성하거나 이에 액세스할 수 있는지 확인합니다.

제한사항

원하는 구성 방법 선택

소스를 구성하는 두 가지 방법 중 하나를 선택합니다.

루트 정보 소스의 소스 제어

루트 정보 소스에서 루트 소스 제어

구성 동기화는 두 개 이상의 정보 소스에서 동기화를 지원합니다. 중앙 관리자는 루트 정보 소스를 사용하여 다른 모든 소스를 관리할 수 있습니다. 구성 동기화에서 RootSync 객체를 관리하므로 이 방법에서는 클러스터의 RootSync 구성에 대한 로컬 변경을 차단합니다.

이 기능을 사용하려면 다음 작업을 완료합니다.

  1. 다음 매니페스트 중 하나를 root-sync.yaml로 저장합니다. 구성에 대한 정보 소스에 해당하는 매니페스트 버전을 사용합니다.

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    다음을 바꿉니다.

    • ROOT_SYNC_NAME: RootSync 객체의 이름을 추가합니다.
    • ROOT_FORMAT: unstructured를 추가하여 구조화되지 않은 저장소를 사용하거나 hierarchy를 추가하여 계층 구조의 저장소를 사용합니다. 이러한 값은 대소문자를 구분합니다. 이 필드는 선택사항이며 기본값은 hierarchy입니다. 이 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있기 때문에 unstructured를 추가하는 것이 좋습니다.
    • ROOT_REPOSITORY: 루트 저장소로 사용할 Git 저장소의 URL을 추가합니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • ROOT_REVISION: 동기화할 Git 버전(태그 또는 해시)을 추가합니다. 이 필드는 선택사항이며 기본값은 HEAD입니다. 구성 동기화 버전 1.17.0부터는 revision 필드에 브랜치 이름을 지정할 수도 있습니다. 버전 1.17.0 이상에서 해시를 사용하는 경우 축약된 양식이 아닌 전체 해시 양식을 사용해야 합니다.
    • ROOT_BRANCH: 동기화할 저장소의 브랜치를 추가합니다. 이 필드는 선택사항이며 기본값은 master입니다. 구성 동기화 버전 1.17.0부터는 간단히 revision 필드를 사용하여 브랜치 이름을 지정하는 것이 좋습니다. revision 필드와 branch 필드 모두 지정되면 revisionbranch보다 우선 적용됩니다.
    • ROOT_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 Git 저장소의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 저장소의 루트 디렉터리(/)입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • ssh: SSH 키 쌍 사용
      • cookiefile: cookiefile 사용
      • token: 토큰 사용
      • gcpserviceaccount: Google 서비스 계정을 사용하여 Cloud Source Repositories에 액세스합니다.
      • gcenode: Google 서비스 계정을 사용하여 Cloud Source Repositories에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.

      이러한 인증 유형에 대한 자세한 내용은 Git에 대한 읽기 전용 액세스 권한을 구성 동기화에 부여를 참조하세요.

      필수 필드입니다.

    • ROOT_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • ROOT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 보안 비밀의 공개 키를 Git 제공업체에 추가해야 합니다. 이 필드는 선택사항입니다.

    • ROOT_NO_SSL_VERIFY: SSL 인증서 확인을 중지하려면 이 필드를 true로 설정합니다. 기본값은 false입니다.

    • ROOT_CA_CERT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 Git 제공업체가 이 인증 기관(CA)에서 발급한 인증서를 사용해야 합니다. 보안 비밀에는 cert라는 키 아래에 CA 인증서가 포함되어야 합니다. 이 필드는 선택사항입니다.

      CA 인증서의 보안 비밀 객체를 구성하는 방법에 대한 자세한 내용은 인증 기관의 작업자 구성을 참조하세요.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    이 매니페스트는 Git를 소스로 사용하는 RootSync 객체를 만듭니다.

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
    

    다음을 바꿉니다.

    • ROOT_SYNC_NAME: RootSync 객체의 이름을 추가합니다.
    • ROOT_FORMAT: unstructured를 추가하여 구조화되지 않은 저장소를 사용하거나 hierarchy를 추가하여 계층 구조의 저장소를 사용합니다. 이러한 값은 대소문자를 구분합니다. 이 필드는 선택사항이며 기본값은 hierarchy입니다. 이 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있기 때문에 unstructured를 추가하는 것이 좋습니다.
    • ROOT_IMAGE: 루트 저장소로 사용할 OCI 이미지의 URL입니다(예: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME). 기본적으로 이미지는 latest 태그에서 가져오지만 대신 TAG 또는 DIGEST로 이미지를 가져올 수 있습니다. PACKAGE_NAME에서 TAG 또는 DIGEST를 지정합니다.
      • TAG로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • DIGEST로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 저장소의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 저장소의 루트 디렉터리(/)입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • ROOT_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    이 매니페스트는 OCI 이미지를 소스로 사용하는 RootSync 객체를 만듭니다.

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
    

    다음을 바꿉니다.

    • ROOT_SYNC_NAME: RootSync 객체의 이름을 추가합니다.
    • ROOT_FORMAT: unstructured를 추가하여 구조화되지 않은 저장소를 사용하거나 hierarchy를 추가하여 계층 구조의 저장소를 사용합니다. 이러한 값은 대소문자를 구분합니다. 이 필드는 선택사항이며 기본값은 hierarchy입니다. 이 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있기 때문에 unstructured를 추가하는 것이 좋습니다.
    • ROOT_HELM_REPOSITORY: 루트 저장소로 사용할 Helm 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • HELM_CHART_NAME: Helm 차트의 이름을 추가합니다. 필수 필드입니다.
    • HELM_CHART_VERSION: 차트의 버전입니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 최신 버전이 사용됩니다.
    • HELM_RELEASE_NAME: Helm 출시 버전의 이름입니다. 이 필드는 선택사항입니다.
    • HELM_RELEASE_NAMESPACE: 출시 버전의 대상 네임스페이스입니다. 템플릿에 namespace: {{ .Release.Namespace }}이 포함된 리소스의 네임스페이스만 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 기본 네임스페이스 config-management-system이 사용됩니다.
    • HELM_INCLUDE_CRDS: Helm 템플릿에서 CustomResourceDefinition도 생성하도록 하려면 true로 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않을 경우 기본값은 false이며 CRD가 생성되지 않습니다.
    • VALUE: 차트에 포함되는 기본값 대신 사용할 값입니다. 이 필드의 형식을 Helm 차트의 values.yaml 파일과 동일하게 지정합니다. 이 필드는 선택사항입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • token: 사용자 이름과 비밀번호를 사용하여 비공개 Helm 저장소에 액세스합니다.
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • ROOT_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • ROOT_SECRET_NAME: tokenROOT_AUTH_TYPE이면 보안 비밀 이름을 추가합니다. 이 필드는 선택사항입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    이 매니페스트는 Helm을 소스로 사용하는 RootSync 객체를 만듭니다.

  2. 루트 정보 소스에 대한 변경사항을 커밋합니다.

     git add .
     git commit -m 'Setting up a new root source of truth.'
     git push
    
  3. 여러 루트 소스를 구성해야 하는 경우 위 단계를 반복하면 됩니다. 다른 RootSync 객체가 동기화하는 루트 정보 소스에 여러 RootSync 객체의 구성을 저장하여 GitOps 방식으로 여러 RootSync 객체를 중앙에서 관리할 수도 있습니다.

루트 정보 소스에서 네임스페이스 범위 객체 제어

네임스페이스 범위의 정보 소스는 루트 정보 소스에서 관리할 수 있습니다. 네임스페이스 범위 소스는 구성 동기화에서 관리하므로 이 방법은 네임스페이스 범위 소스 정의에 대한 로컬 변경을 차단합니다.

이 기능을 사용하려면 다음 작업을 완료합니다.

  1. 루트 정보 소스에서 namespace 구성을 선언합니다.

    # ROOT_SOURCE/namespaces/NAMESPACE/namespace.yaml
    apiVersion: v1
    kind: Namespace
    metadata:
      name: NAMESPACE
    

    NAMESPACE를 네임스페이스 이름으로 바꿉니다.

  2. 루트 정보 소스에서 동일한 네임스페이스에 다음 RepoSync 객체 중 하나를 만듭니다. 구성의 소스 유형에 해당하는 매니페스트를 사용합니다.

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_REPOSITORY: 네임스페이스 저장소로 사용할 Git 저장소의 URL을 추가합니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 프로토콜을 입력하지 않으면 URL이 HTTPS URL로 취급됩니다. 필수 필드입니다.
    • NAMESPACE_REVISION: 동기화할 Git 버전(태그 또는 해시)을 추가합니다. 이 필드는 선택사항이며 기본값은 HEAD입니다. 구성 동기화 버전 1.17.0부터는 revision 필드에 브랜치 이름을 지정할 수도 있습니다. 버전 1.17.0 이상에서 해시를 사용하는 경우 축약된 양식이 아닌 전체 해시 양식을 사용해야 합니다.
    • NAMESPACE_BRANCH: 동기화할 저장소의 브랜치를 추가합니다. 이 필드는 선택사항이며 기본값은 master입니다. 구성 동기화 버전 1.17.0부터는 간단히 revision 필드를 사용하여 브랜치 이름을 지정하는 것이 좋습니다. revision 필드와 branch 필드가 모두 지정된 경우 revisionbranch보다 우선 적용됩니다.
    • NAMESPACE_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • ssh: SSH 키 쌍 사용
      • cookiefile: cookiefile 사용
      • token: 토큰 사용
      • gcpserviceaccount: Google 서비스 계정을 사용하여 Cloud Source Repositories의 저장소에 액세스합니다.
      • gcenode: Google 서비스 계정을 사용하여 Cloud Source Repositories의 저장소에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.

        이러한 인증 유형에 대한 자세한 내용은 Git에 대한 읽기 전용 액세스 권한을 구성 동기화에 부여를 참조하세요.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountNAMESPACE_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • NAMESPACE_SECRET_NAME: 보안 비밀에 지정할 이름을 추가합니다. 이 필드는 선택사항입니다.

    • NAMESPACE_NO_SSL_VERIFY: SSL 인증서 확인을 중지하려면 이 필드를 true로 설정합니다. 기본값은 false입니다.

    • NAMESPACE_CA_CERT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 Git 제공업체가 이 인증 기관(CA)에서 발급한 인증서를 사용해야 합니다. 보안 비밀에는 cert라는 키 아래에 CA 인증서가 포함되어야 합니다. 이 필드는 선택사항입니다.

      CA 인증서의 보안 비밀 객체를 구성하는 방법에 대한 자세한 내용은 인증 기관의 작업자 구성을 참조하세요.

    필드에 대한 설명과 spec 필드에 추가할 수 있는 전체 필드 목록은 RepoSync 필드를 참조하세요.

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_IMAGE: 네임스페이스 소스로 사용할 OCI 이미지의 URL입니다(예: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME). 기본적으로 이미지는 latest 태그에서 가져오지만 대신 TAG 또는 DIGEST로 이미지를 가져올 수 있습니다. PACKAGE_NAME에서 TAG 또는 DIGEST를 지정합니다.

      • TAG로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • DIGEST로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 소스의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 소스의 루트 디렉터리(/)입니다.

    • NAMESPACE_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_REPOSITORY: 루트 저장소로 사용할 Helm 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • HELM_CHART_NAME: Helm 차트의 이름을 추가합니다. 필수 필드입니다.
    • HELM_CHART_VERSION: 차트의 버전입니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 최신 버전이 사용됩니다.
    • HELM_RELEASE_NAME: Helm 출시 버전의 이름입니다. 이 필드는 선택사항입니다.
    • HELM_RELEASE_NAMESPACE: 출시 버전의 대상 네임스페이스입니다. 템플릿에 namespace: {{ .Release.Namespace }}이 포함된 리소스의 네임스페이스만 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 기본 네임스페이스 config-management-system이 사용됩니다.
    • HELM_INCLUDE_CRDS: Helm 템플릿에서 CustomResourceDefinition도 생성하도록 하려면 true로 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않을 경우 기본값은 false이며 CRD가 생성되지 않습니다.
    • VALUE: 차트에 포함되는 기본값 대신 사용할 값입니다. 이 필드의 형식을 Helm 차트의 values.yaml 파일과 동일하게 지정합니다. 이 필드는 선택사항입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • token: 사용자 이름과 비밀번호를 사용하여 비공개 Helm 저장소에 액세스합니다.
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • NAMESPACE_SECRET_NAME: tokenROOT_AUTH_TYPE이면 보안 비밀 이름을 추가합니다. 이 필드는 선택사항입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

  3. gcpserviceaccount를 인증 유형으로 사용하고 워크로드 아이덴티티가 사용 설정되지 않은 경우 네임스페이스의 Kubernetes 서비스 계정과 Google 서비스 계정 간에 IAM 정책 바인딩을 만들어야 합니다. 이 바인딩을 만드는 방법은 Git에 대한 액세스 권한 부여를 참조하세요.

  4. 루트 소스에서 SERVICE_ACCOUNT_NAME 서비스 계정에 네임스페이스의 객체를 관리할 수 있는 권한을 부여하는 RoleBinding 구성을 선언합니다. RepoSync 구성이 클러스터에 동기화되면 구성 동기화는 자동으로 SERVICE_ACCOUNT_NAME 서비스 계정을 생성합니다.

    RoleBinding은 동일한 네임스페이스의 Role을 참조할 수 있습니다. 또는 RoleBindingClusterRole을 참조하고 이 ClusterRoleRoleBinding의 네임스페이스에 바인딩할 수 있습니다. 사용자 정의 Role에 세분화된 권한을 부여하여 최소 권한의 원칙을 준수해야 하지만 ClusterRole을 정의하거나 사용자 대상 역할을 사용하고 여러 네임스페이스의 여러 RoleBindings에서 동일한 ClusterRole을 참조할 수 있습니다.

    기본 ClusterRole

    기본 ClusterRole(예: admin 또는 edit)을 참조하는 RoleBinding을 선언할 수 있습니다. 자세한 내용은 사용자 대상 역할을 참조하세요.

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • SERVICE_ACCOUNT_NAME: 조정자의 서비스 계정 이름을 추가합니다. RepoSync 이름이 repo-sync이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE입니다. 그렇지 않은 경우 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH입니다. 예를 들어 RepoSync 이름이 prod이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4가 됩니다. prod에 4자가 포함되어 있으므로 정수 4를 사용합니다.
    • CLUSTERROLE_NAME: 기본 ClusterRole 이름을 추가합니다.

    사용자 정의 역할

    RepoSync 객체에서 관리하는 각 리소스에 권한 목록을 부여하여 ClusterRole 또는 Role을 선언할 수 있습니다. 이를 통해 세분화된 권한을 사용할 수 있습니다. 자세한 내용은 리소스 참조를 확인하세요.

    예를 들어 다음 ClusterRole 또는 RoleDeploymentServiceAccount 객체를 관리할 수 있는 권한을 부여합니다.

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    ClusterRole 또는 Role을 참조하는 RoleBinding을 선언하려면 다음 객체를 만듭니다. RoleBinding은 구성 동기화가 지정된 RepoSync의 네임스페이스 범위 리소스를 관리할 수 있도록 추가 권한을 부여합니다.

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • ROLE_KIND: ClusterRole 또는 Role을 설정합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • SERVICE_ACCOUNT_NAME: 조정자의 서비스 계정 이름을 추가합니다. RepoSync 이름이 repo-sync이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE입니다. 그렇지 않은 경우 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH입니다. 예를 들어 RepoSync 이름이 prod이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4가 됩니다. prod에 4자가 포함되어 있으므로 정수 4를 사용합니다.
    • RECONCILER_ROLE: ClusterRole 또는 Role의 이름을 추가합니다.
  5. 루트 정보 소스에 대한 변경사항을 커밋합니다.

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  6. 필요한 경우 원하는 인증 방법을 기준으로 보안 비밀을 만듭니다. none을 인증 유형으로 사용한 경우 이 단계를 건너뛸 수 있습니다.

    보안 비밀은 다음 요구사항을 충족해야 합니다.

    • RepoSync와 동일한 네임스페이스에 보안 비밀을 만듭니다.
    • 보안 비밀의 이름은 repo-sync.yaml에 정의된 spec.git.secretRef 이름과 일치해야 합니다.
    • 보안 비밀의 공개 키를 Git 제공업체에 추가해야 합니다.
  7. 구성을 확인하려면 네임스페이스 소스의 객체 중 하나에서 kubectl get을 사용합니다. 예를 들면 다음과 같습니다.

    kubectl get rolebindings -n NAMESPACE
    
  8. 네임스페이스 범위 소스를 두 개 이상 구성해야 하는 경우 위 단계를 반복하면 됩니다.

네임스페이스 범위 소스의 네임스페이스 범위 소스 제어

구성 동기화는 네임스페이스당 두 개 이상의 네임스페이스 범위 정보 소스에서 동기화를 지원합니다. 네임스페이스 범위의 정보 소스는 동일한 네임스페이스의 네임스페이스 범위 정보 소스에서 관리할 수 있습니다.

이 기능을 사용하려면 다음 작업을 완료합니다.

  1. 네임스페이스 범위 정보 소스에서 동일한 네임스페이스에 다음 RepoSync 객체 중 하나를 만듭니다. 구성의 소스 유형에 해당하는 매니페스트를 사용합니다.

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_REPOSITORY: 네임스페이스 저장소로 사용할 Git 저장소의 URL을 추가합니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 프로토콜을 입력하지 않으면 URL이 HTTPS URL로 취급됩니다. 필수 필드입니다.
    • NAMESPACE_REVISION: 동기화할 Git 버전(태그 또는 해시)을 추가합니다. 이 필드는 선택사항이며 기본값은 HEAD입니다. 구성 동기화 버전 1.17.0부터는 revision 필드에 브랜치 이름을 지정할 수도 있습니다. 버전 1.17.0 이상에서 해시를 사용하는 경우 축약된 양식이 아닌 전체 해시 양식을 사용해야 합니다.
    • NAMESPACE_BRANCH: 동기화할 저장소의 브랜치를 추가합니다. 이 필드는 선택사항이며 기본값은 master입니다. 구성 동기화 버전 1.17.0부터는 간단히 revision 필드를 사용하여 브랜치 이름을 지정하는 것이 좋습니다. revision 필드와 branch 필드가 모두 지정된 경우 revisionbranch보다 우선 적용됩니다.
    • NAMESPACE_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • ssh: SSH 키 쌍 사용
      • cookiefile: cookiefile 사용
      • token: 토큰 사용
      • gcpserviceaccount: Google 서비스 계정을 사용하여 Cloud Source Repositories의 저장소에 액세스합니다.
      • gcenode: Google 서비스 계정을 사용하여 Cloud Source Repositories의 저장소에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.

        이러한 인증 유형에 대한 자세한 내용은 Git에 대한 읽기 전용 액세스 권한을 구성 동기화에 부여를 참조하세요.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountNAMESPACE_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • NAMESPACE_SECRET_NAME: 보안 비밀에 지정할 이름을 추가합니다. 이 필드는 선택사항입니다.

    • NAMESPACE_NO_SSL_VERIFY: SSL 인증서 확인을 중지하려면 이 필드를 true로 설정합니다. 기본값은 false입니다.

    • NAMESPACE_CA_CERT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 Git 제공업체가 이 인증 기관(CA)에서 발급한 인증서를 사용해야 합니다. 보안 비밀에는 cert라는 키 아래에 CA 인증서가 포함되어야 합니다. 이 필드는 선택사항입니다.

      CA 인증서의 보안 비밀 객체를 구성하는 방법에 대한 자세한 내용은 인증 기관의 작업자 구성을 참조하세요.

    필드에 대한 설명과 spec 필드에 추가할 수 있는 전체 필드 목록은 RepoSync 필드를 참조하세요.

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_IMAGE: 네임스페이스 소스로 사용할 OCI 이미지의 URL입니다(예: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME). 기본적으로 이미지는 latest 태그에서 가져오지만 대신 TAG 또는 DIGEST로 이미지를 가져올 수 있습니다. PACKAGE_NAME에서 TAG 또는 DIGEST를 지정합니다.

      • TAG로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • DIGEST로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 소스의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 소스의 루트 디렉터리(/)입니다.

    • NAMESPACE_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_REPOSITORY: 루트 저장소로 사용할 Helm 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • HELM_CHART_NAME: Helm 차트의 이름을 추가합니다. 필수 필드입니다.
    • HELM_CHART_VERSION: 차트의 버전입니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 최신 버전이 사용됩니다.
    • HELM_RELEASE_NAME: Helm 출시 버전의 이름입니다. 이 필드는 선택사항입니다.
    • HELM_RELEASE_NAMESPACE: 출시 버전의 대상 네임스페이스입니다. 템플릿에 namespace: {{ .Release.Namespace }}이 포함된 리소스의 네임스페이스만 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 기본 네임스페이스 config-management-system이 사용됩니다.
    • HELM_INCLUDE_CRDS: Helm 템플릿에서 CustomResourceDefinition도 생성하도록 하려면 true로 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않을 경우 기본값은 false이며 CRD가 생성되지 않습니다.
    • VALUE: 차트에 포함되는 기본값 대신 사용할 값입니다. 이 필드의 형식을 Helm 차트의 values.yaml 파일과 동일하게 지정합니다. 이 필드는 선택사항입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • token: 사용자 이름과 비밀번호를 사용하여 비공개 Helm 저장소에 액세스합니다.
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • NAMESPACE_SECRET_NAME: tokenROOT_AUTH_TYPE이면 보안 비밀 이름을 추가합니다. 이 필드는 선택사항입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

  2. gcpserviceaccount를 인증 유형으로 사용하고 워크로드 아이덴티티가 사용 설정되지 않은 경우 네임스페이스의 Kubernetes 서비스 계정과 Google 서비스 계정 간에 IAM 정책 바인딩을 만들어야 합니다. 이 바인딩을 만드는 방법은 Git에 대한 액세스 권한 부여를 참조하세요.

  3. 루트 소스에서 SERVICE_ACCOUNT_NAME 서비스 계정에 네임스페이스의 객체를 관리할 수 있는 권한을 부여하는 RoleBinding 구성을 선언합니다. RepoSync 구성이 클러스터에 동기화되면 구성 동기화는 자동으로 SERVICE_ACCOUNT_NAME 서비스 계정을 생성합니다.

    RoleBinding은 동일한 네임스페이스의 Role을 참조할 수 있습니다. 또는 RoleBindingClusterRole을 참조하고 이 ClusterRoleRoleBinding의 네임스페이스에 바인딩할 수 있습니다. 사용자 정의 Role에 세분화된 권한을 부여하여 최소 권한의 원칙을 준수해야 하지만 ClusterRole을 정의하거나 사용자 대상 역할을 사용하고 여러 네임스페이스의 여러 RoleBindings에서 동일한 ClusterRole을 참조할 수 있습니다.

    기본 ClusterRole

    기본 ClusterRole(예: admin 또는 edit)을 참조하는 RoleBinding을 선언할 수 있습니다. 자세한 내용은 사용자 대상 역할을 참조하세요.

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: CLUSTERROLE_NAME
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • SERVICE_ACCOUNT_NAME: 조정자의 서비스 계정 이름을 추가합니다. RepoSync 이름이 repo-sync이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE입니다. 그렇지 않은 경우 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH입니다. 예를 들어 RepoSync 이름이 prod이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4가 됩니다. prod에 4자가 포함되어 있으므로 정수 4를 사용합니다.
    • CLUSTERROLE_NAME: 기본 ClusterRole 이름을 추가합니다.

    사용자 정의 역할

    RepoSync 객체에서 관리하는 각 리소스에 권한 목록을 부여하여 ClusterRole 또는 Role을 선언할 수 있습니다. 이를 통해 세분화된 권한을 사용할 수 있습니다. 자세한 내용은 리소스 참조를 확인하세요.

    예를 들어 다음 ClusterRole 또는 RoleDeploymentServiceAccount 객체를 관리할 수 있는 권한을 부여합니다.

    # ROOT_REPO/namespaces/NAMESPACE/sync-role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ROLE_KIND
    metadata:
      namespace: NAMESPACE # only set this field for a 'Role'
      name: RECONCILER_ROLE
    rules:
    # Update 'apiGroups' and 'resources' to reference actual resources managed by 'RepoSync'.
    - apiGroups: ["apps"]
      resources: ["deployments"]
      verbs: ["*"]
    - apiGroups: [""]
      resources: ["serviceaccounts"]
      verbs: ["*"]
    

    ClusterRole 또는 Role을 참조하는 RoleBinding을 선언하려면 다음 객체를 만듭니다. RoleBinding은 구성 동기화가 지정된 RepoSync의 네임스페이스 범위 리소스를 관리할 수 있도록 추가 권한을 부여합니다.

    # ROOT_REPO/namespaces/NAMESPACE/sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ROLE_KIND
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • ROLE_KIND: ClusterRole 또는 Role을 설정합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • SERVICE_ACCOUNT_NAME: 조정자의 서비스 계정 이름을 추가합니다. RepoSync 이름이 repo-sync이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE입니다. 그렇지 않은 경우 ns-reconciler-NAMESPACE-REPO_SYNC_NAME-REPO_SYNC_NAME_LENGTH입니다. 예를 들어 RepoSync 이름이 prod이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE-prod-4가 됩니다. prod에 4자가 포함되어 있으므로 정수 4를 사용합니다.
    • RECONCILER_ROLE: ClusterRole 또는 Role의 이름을 추가합니다.
  4. 루트 정보 소스에 대한 변경사항을 커밋합니다.

     git add .
     git commit -m 'Setting up a new namespace-scoped source of truth.'
     git push
    
  5. 필요한 경우 원하는 인증 방법을 기준으로 보안 비밀을 만듭니다. none을 인증 유형으로 사용한 경우 이 단계를 건너뛸 수 있습니다.

    보안 비밀은 다음 요구사항을 충족해야 합니다.

    • RepoSync와 동일한 네임스페이스에 보안 비밀을 만듭니다.
    • 보안 비밀의 이름은 repo-sync.yaml에 정의된 spec.git.secretRef 이름과 일치해야 합니다.
    • 보안 비밀의 공개 키를 Git 제공업체에 추가해야 합니다.
  6. 구성을 확인하려면 네임스페이스 범위 정보 소스의 객체 중 하나에서 kubectl get을 사용합니다. 예를 들면 다음과 같습니다.

    kubectl get rolebindings -n NAMESPACE
    
  7. 네임스페이스 범위 소스를 2개 이상 구성해야 하는 경우 위 단계를 반복하면 됩니다.

Kubernetes API를 사용하여 정보 소스 제어

이 방법에서는 중앙 관리자가 다른 RootSync 객체의 선언을 다른 관리자에게 위임합니다. RepoSync 객체의 경우 중앙 관리자는 루트 정보 소스 네임스페이스만 선언하고 RepoSync 객체의 선언을 애플리케이션 연산자에 위임합니다.

2개 이상의 루트 정보 소스 제어

다른 관리자는 다음 작업을 완료하여 루트 정보 소스를 제어할 수 있습니다.

  1. 다음 매니페스트 중 하나를 root-sync.yaml로 저장합니다. 구성에 대한 정보 소스에 해당하는 매니페스트 버전을 사용합니다.

    Git

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: git
      sourceFormat: ROOT_FORMAT
      git:
        repo: ROOT_REPOSITORY
        revision: ROOT_REVISION
        branch: ROOT_BRANCH
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
        secretRef:
          name: ROOT_SECRET_NAME
        noSSLVerify: ROOT_NO_SSL_VERIFY
        caCertSecretRef:
          name: ROOT_CA_CERT_SECRET_NAME
    

    다음을 바꿉니다.

    • ROOT_SYNC_NAME: RootSync 객체의 이름을 추가합니다.
    • ROOT_FORMAT: unstructured를 추가하여 구조화되지 않은 저장소를 사용하거나 hierarchy를 추가하여 계층 구조의 저장소를 사용합니다. 이러한 값은 대소문자를 구분합니다. 이 필드는 선택사항이며 기본값은 hierarchy입니다. 이 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있기 때문에 unstructured를 추가하는 것이 좋습니다.
    • ROOT_REPOSITORY: 루트 저장소로 사용할 Git 저장소의 URL을 추가합니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • ROOT_REVISION: 동기화할 Git 버전(태그 또는 해시)을 추가합니다. 이 필드는 선택사항이며 기본값은 HEAD입니다. 구성 동기화 버전 1.17.0부터는 revision 필드에 브랜치 이름을 지정할 수도 있습니다. 버전 1.17.0 이상에서 해시를 사용하는 경우 축약된 양식이 아닌 전체 해시 양식을 사용해야 합니다.
    • ROOT_BRANCH: 동기화할 저장소의 브랜치를 추가합니다. 이 필드는 선택사항이며 기본값은 master입니다. 구성 동기화 버전 1.17.0부터는 간단히 revision 필드를 사용하여 브랜치 이름을 지정하는 것이 좋습니다. revision 필드와 branch 필드 모두 지정되면 revisionbranch보다 우선 적용됩니다.
    • ROOT_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 Git 저장소의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 저장소의 루트 디렉터리(/)입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • ssh: SSH 키 쌍 사용
      • cookiefile: cookiefile 사용
      • token: 토큰 사용
      • gcpserviceaccount: Google 서비스 계정을 사용하여 Cloud Source Repositories에 액세스합니다.
      • gcenode: Google 서비스 계정을 사용하여 Cloud Source Repositories에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.

      이러한 인증 유형에 대한 자세한 내용은 Git에 대한 읽기 전용 액세스 권한을 구성 동기화에 부여를 참조하세요.

      필수 필드입니다.

    • ROOT_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • ROOT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 보안 비밀의 공개 키를 Git 제공업체에 추가해야 합니다. 이 필드는 선택사항입니다.

    • ROOT_NO_SSL_VERIFY: SSL 인증서 확인을 중지하려면 이 필드를 true로 설정합니다. 기본값은 false입니다.

    • ROOT_CA_CERT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 Git 제공업체가 이 인증 기관(CA)에서 발급한 인증서를 사용해야 합니다. 보안 비밀에는 cert라는 키 아래에 CA 인증서가 포함되어야 합니다. 이 필드는 선택사항입니다.

      CA 인증서의 보안 비밀 객체를 구성하는 방법에 대한 자세한 내용은 인증 기관의 작업자 구성을 참조하세요.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    이 매니페스트는 Git를 소스로 사용하는 RootSync 객체를 만듭니다.

    OCI

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: oci
      sourceFormat: ROOT_FORMAT
      oci:
        image: ROOT_IMAGE
        dir: ROOT_DIRECTORY
        auth: ROOT_AUTH_TYPE
        gcpServiceAccountEmail: ROOT_EMAIL
    

    다음을 바꿉니다.

    • ROOT_SYNC_NAME: RootSync 객체의 이름을 추가합니다.
    • ROOT_FORMAT: unstructured를 추가하여 구조화되지 않은 저장소를 사용하거나 hierarchy를 추가하여 계층 구조의 저장소를 사용합니다. 이러한 값은 대소문자를 구분합니다. 이 필드는 선택사항이며 기본값은 hierarchy입니다. 이 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있기 때문에 unstructured를 추가하는 것이 좋습니다.
    • ROOT_IMAGE: 루트 저장소로 사용할 OCI 이미지의 URL입니다(예: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME). 기본적으로 이미지는 latest 태그에서 가져오지만 대신 TAG 또는 DIGEST로 이미지를 가져올 수 있습니다. PACKAGE_NAME에서 TAG 또는 DIGEST를 지정합니다.
      • TAG로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • DIGEST로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • ROOT_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 저장소의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 저장소의 루트 디렉터리(/)입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • ROOT_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    이 매니페스트는 OCI 이미지를 소스로 사용하는 RootSync 객체를 만듭니다.

    Helm

    # root-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: ROOT_SYNC_NAME
      namespace: config-management-system
    spec:
      sourceType: helm
      sourceFormat: ROOT_FORMAT
      helm:
        repo: ROOT_HELM_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: ROOT_AUTH_TYPE
          gcpServiceAccountEmail: ROOT_EMAIL
          secretRef:
            name: ROOT_SECRET_NAME
    

    다음을 바꿉니다.

    • ROOT_SYNC_NAME: RootSync 객체의 이름을 추가합니다.
    • ROOT_FORMAT: unstructured를 추가하여 구조화되지 않은 저장소를 사용하거나 hierarchy를 추가하여 계층 구조의 저장소를 사용합니다. 이러한 값은 대소문자를 구분합니다. 이 필드는 선택사항이며 기본값은 hierarchy입니다. 이 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있기 때문에 unstructured를 추가하는 것이 좋습니다.
    • ROOT_HELM_REPOSITORY: 루트 저장소로 사용할 Helm 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • HELM_CHART_NAME: Helm 차트의 이름을 추가합니다. 필수 필드입니다.
    • HELM_CHART_VERSION: 차트의 버전입니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 최신 버전이 사용됩니다.
    • HELM_RELEASE_NAME: Helm 출시 버전의 이름입니다. 이 필드는 선택사항입니다.
    • HELM_RELEASE_NAMESPACE: 출시 버전의 대상 네임스페이스입니다. 템플릿에 namespace: {{ .Release.Namespace }}이 포함된 리소스의 네임스페이스만 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 기본 네임스페이스 config-management-system이 사용됩니다.
    • HELM_INCLUDE_CRDS: Helm 템플릿에서 CustomResourceDefinition도 생성하도록 하려면 true로 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않을 경우 기본값은 false이며 CRD가 생성되지 않습니다.
    • VALUE: 차트에 포함되는 기본값 대신 사용할 값입니다. 이 필드의 형식을 Helm 차트의 values.yaml 파일과 동일하게 지정합니다. 이 필드는 선택사항입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • token: 사용자 이름과 비밀번호를 사용하여 비공개 Helm 저장소에 액세스합니다.
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • ROOT_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • ROOT_SECRET_NAME: tokenROOT_AUTH_TYPE이면 보안 비밀 이름을 추가합니다. 이 필드는 선택사항입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    이 매니페스트는 Helm을 소스로 사용하는 RootSync 객체를 만듭니다.

  2. 변경사항을 적용합니다.

    kubectl apply -f root-sync.yaml
    
  3. 두 개 이상의 루트 정보 소스를 구성해야 하는 경우 위 단계를 반복하면 됩니다.

네임스페이스 범위 정보 소스 제어

중앙 관리자 작업

중앙 관리자는 다음 작업을 완료합니다.

  1. 루트 정보 소스에서 네임스페이스 범위 소스의 namespace 구성을 선언합니다.

    # ROOT_REPO/namespaces/NAMESPACE/namespace.yaml
     apiVersion: v1
     kind: Namespace
     metadata:
       name: NAMESPACE
    

    NAMESPACE를 네임스페이스 이름으로 바꿉니다.

  2. 루트 정보 소스에서 RoleBinding을 선언하여 애플리케이션 연산자에 권한을 부여합니다. RBAC 에스컬레이션 방지를 사용하여 애플리케이션 연산자가 나중에 이 역할 결합에서 부여하지 않은 권한으로 역할 결합을 적용할 수 없도록 합니다.

    RoleBinding을 선언하려면 다음 매니페스트를 만듭니다.

    # ROOT_REPO/namespaces/NAMESPACE/operator-rolebinding.yaml
     kind: RoleBinding
     # Add RBAC escalation prevention
     apiVersion: rbac.authorization.k8s.io/v1
     metadata:
       name: operator
       namespace: NAMESPACE
     subjects:
     - kind: User
       name: USERNAME
       apiGroup: rbac.authorization.k8s.io
     roleRef:
       kind: ClusterRole
       name: OPERATOR_ROLE
       apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • NAMESPACE: 루트 정보 소스에서 만든 네임스페이스를 추가합니다.
    • USERNAME: 애플리케이션 연산자의 사용자 이름을 추가합니다.
    • OPERATOR_ROLE: 중앙 관리자로서 OPERATOR_ROLE을 설정하여 네임스페이스 소스에서 동기화할 수 있는 구성 유형을 적용할 수 있습니다. 다음 역할 중 하나를 선택할 수 있습니다.

      • 기본 ClusterRole:

        • admin
        • edit

        자세한 내용은 사용자에게 표시되는 역할을 참조하세요.

      • 루트 정보 소스에 선언된 사용자 정의 ClusterRole 또는 역할입니다. 이 역할은 세분화된 권한을 허용합니다.

  3. 루트 정보 소스에 대한 변경사항을 커밋합니다.

     git add .
     git commit -m 'Setting up new namespace-scoped source of truth.'
     git push
    

애플리케이션 연산자 작업

애플리케이션 운영자는 다음 태스크를 완료하여 네임스페이스 범위 소스를 제어할 수 있습니다.

  1. SERVICE_ACCOUNT_NAME 서비스 계정에 네임스페이스의 객체를 관리할 수 있는 권한을 부여하는 RoleBinding 구성을 선언합니다. RepoSync 구성이 클러스터에 동기화되면 구성 동기화는 자동으로 SERVICE_ACCOUNT_NAME 서비스 계정을 생성합니다.

    RoleBinding을 선언하려면 다음 매니페스트를 만듭니다.

    # sync-rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: syncs-repo
      namespace: NAMESPACE
    subjects:
    - kind: ServiceAccount
      name: SERVICE_ACCOUNT_NAME
      namespace: config-management-system
    roleRef:
      kind: ClusterRole
      name: RECONCILER_ROLE
      apiGroup: rbac.authorization.k8s.io
    

    다음을 바꿉니다.

    • NAMESPACE: 루트 정보 소스에서 만든 네임스페이스를 추가합니다.
    • SERVICE_ACCOUNT_NAME: 조정자의 서비스 계정 이름을 추가합니다. RepoSync 이름이 repo-sync이면 SERVICE_ACCOUNT_NAMEns-reconciler-NAMESPACE입니다. 그렇지 않은 경우 ns-reconciler-NAMESPACE-REPO_SYNC_NAME입니다.
    • RECONCILER_ROLE: 애플리케이션 연산자로서 RECONCILER_ROLE을 설정하여 네임스페이스 범위 소스에서 동기화할 수 있는 구성 유형을 적용할 수 있습니다. 중앙 관리자가 부여한 권한 집합만 추가로 제한할 수 있습니다. 따라서 이 역할은 이전 섹션에서 중앙 관리자가 이전에 선언한 OPERATOR_ROLE보다 많은 권한을 가질 수 없습니다.
  2. RoleBinding 구성을 적용합니다.

    kubectl apply -f sync-rolebinding.yaml
    
  3. 필요한 경우 원하는 인증 방법을 기준으로 보안 비밀을 만듭니다. none을 인증 유형으로 사용한 경우 이 단계를 건너뛸 수 있습니다.

    보안 비밀은 다음 요구사항을 충족해야 합니다.

    • RepoSync와 동일한 네임스페이스에 보안 비밀을 만듭니다.
    • 보안 비밀의 이름은 root-sync.yaml에 정의된 spec.git.secretRef 이름과 일치해야 합니다.
    • 보안 비밀의 공개 키를 Git 제공업체에 추가해야 합니다.
  4. RepoSync 구성을 선언합니다.

    Git

    #ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: git
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      git:
        repo: NAMESPACE_REPOSITORY
        revision: NAMESPACE_REVISION
        branch: NAMESPACE_BRANCH
        dir: "NAMESPACE_DIRECTORY"
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
        secretRef:
          name: NAMESPACE_SECRET_NAME
        noSSLVerify: NAMESPACE_NO_SSL_VERIFY
        caCertSecretRef:
          name: NAMESPACE_CA_CERT_SECRET_NAME
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_REPOSITORY: 네임스페이스 저장소로 사용할 Git 저장소의 URL을 추가합니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 프로토콜을 입력하지 않으면 URL이 HTTPS URL로 취급됩니다. 필수 필드입니다.
    • NAMESPACE_REVISION: 동기화할 Git 버전(태그 또는 해시)을 추가합니다. 이 필드는 선택사항이며 기본값은 HEAD입니다. 구성 동기화 버전 1.17.0부터는 revision 필드에 브랜치 이름을 지정할 수도 있습니다. 버전 1.17.0 이상에서 해시를 사용하는 경우 축약된 양식이 아닌 전체 해시 양식을 사용해야 합니다.
    • NAMESPACE_BRANCH: 동기화할 저장소의 브랜치를 추가합니다. 이 필드는 선택사항이며 기본값은 master입니다. 구성 동기화 버전 1.17.0부터는 간단히 revision 필드를 사용하여 브랜치 이름을 지정하는 것이 좋습니다. revision 필드와 branch 필드가 모두 지정된 경우 revisionbranch보다 우선 적용됩니다.
    • NAMESPACE_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • ssh: SSH 키 쌍 사용
      • cookiefile: cookiefile 사용
      • token: 토큰 사용
      • gcpserviceaccount: Google 서비스 계정을 사용하여 Cloud Source Repositories의 저장소에 액세스합니다.
      • gcenode: Google 서비스 계정을 사용하여 Cloud Source Repositories의 저장소에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.

        이러한 인증 유형에 대한 자세한 내용은 Git에 대한 읽기 전용 액세스 권한을 구성 동기화에 부여를 참조하세요.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountNAMESPACE_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • NAMESPACE_SECRET_NAME: 보안 비밀에 지정할 이름을 추가합니다. 이 필드는 선택사항입니다.

    • NAMESPACE_NO_SSL_VERIFY: SSL 인증서 확인을 중지하려면 이 필드를 true로 설정합니다. 기본값은 false입니다.

    • NAMESPACE_CA_CERT_SECRET_NAME: 보안 비밀의 이름을 추가합니다. 이 필드를 설정하면 Git 제공업체가 이 인증 기관(CA)에서 발급한 인증서를 사용해야 합니다. 보안 비밀에는 cert라는 키 아래에 CA 인증서가 포함되어야 합니다. 이 필드는 선택사항입니다.

      CA 인증서의 보안 비밀 객체를 구성하는 방법에 대한 자세한 내용은 인증 기관의 작업자 구성을 참조하세요.

    필드에 대한 설명과 spec 필드에 추가할 수 있는 전체 필드 목록은 RepoSync 필드를 참조하세요.

    OCI

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: oci
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      oci:
        image: NAMESPACE_IMAGE
        dir: NAMESPACE_DIRECTORY
        auth: NAMESPACE_AUTH_TYPE
        gcpServiceAccountEmail: NAMESPACE_EMAIL
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_IMAGE: 네임스페이스 소스로 사용할 OCI 이미지의 URL입니다(예: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME). 기본적으로 이미지는 latest 태그에서 가져오지만 대신 TAG 또는 DIGEST로 이미지를 가져올 수 있습니다. PACKAGE_NAME에서 TAG 또는 DIGEST를 지정합니다.

      • TAG로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME:TAG
      • DIGEST로 가져오려면: LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/PACKAGE_NAME@sha256:DIGEST
    • NAMESPACE_DIRECTORY: 동기화하려는 구성이 포함된 루트 디렉터리에 소스의 경로를 추가합니다. 이 필드는 선택사항이며 기본값은 소스의 루트 디렉터리(/)입니다.

    • NAMESPACE_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

    Helm

    # ROOT_SOURCE/namespaces/NAMESPACE/repo-sync.yaml
    apiVersion: configsync.gke.io/v1beta1
    kind: RepoSync
    metadata:
      name: REPO_SYNC_NAME
      namespace: NAMESPACE
    spec:
      sourceType: helm
      # Since this is for a namespace repository, the format is unstructured
      sourceFormat: unstructured
      helm:
        repo: NAMESPACE_REPOSITORY
        chart: HELM_CHART_NAME
        version: HELM_CHART_VERSION
        releaseName: HELM_RELEASE_NAME
        namespace: HELM_RELEASE_NAMESPACE
        values:
          foo:
            bar: VALUE_1
          baz:
          - qux: VALUE_2
            xyz: VALUE_3
        includeCRDs: HELM_INCLUDE_CRDS
        auth: NAMESPACE_AUTH_TYPE
          gcpServiceAccountEmail: NAMESPACE_EMAIL
          secretRef:
            name: NAMESPACE_SECRET_NAME
    

    다음을 바꿉니다.

    • REPO_SYNC_NAME: RepoSync 객체의 이름을 추가합니다. 이름은 네임스페이스에서 고유해야 합니다.
    • NAMESPACE: 네임스페이스 이름을 추가합니다.
    • NAMESPACE_REPOSITORY: 루트 저장소로 사용할 Helm 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어 https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 필수 필드입니다.
    • HELM_CHART_NAME: Helm 차트의 이름을 추가합니다. 필수 필드입니다.
    • HELM_CHART_VERSION: 차트의 버전입니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 최신 버전이 사용됩니다.
    • HELM_RELEASE_NAME: Helm 출시 버전의 이름입니다. 이 필드는 선택사항입니다.
    • HELM_RELEASE_NAMESPACE: 출시 버전의 대상 네임스페이스입니다. 템플릿에 namespace: {{ .Release.Namespace }}이 포함된 리소스의 네임스페이스만 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않으면 기본 네임스페이스 config-management-system이 사용됩니다.
    • HELM_INCLUDE_CRDS: Helm 템플릿에서 CustomResourceDefinition도 생성하도록 하려면 true로 설정합니다. 이 필드는 선택사항입니다. 값을 지정하지 않을 경우 기본값은 false이며 CRD가 생성되지 않습니다.
    • VALUE: 차트에 포함되는 기본값 대신 사용할 값입니다. 이 필드의 형식을 Helm 차트의 values.yaml 파일과 동일하게 지정합니다. 이 필드는 선택사항입니다.
    • ROOT_AUTH_TYPE: 다음 인증 유형 중 하나를 추가합니다.

      • none: 인증 사용 안함
      • token: 사용자 이름과 비밀번호를 사용하여 비공개 Helm 저장소에 액세스합니다.
      • gcenode: Compute Engine 기본 서비스 계정을 사용하여 Artifact Registry의 이미지에 액세스합니다. 워크로드 아이덴티티가 클러스터에 사용 설정되지 않은 경우에만 이 옵션을 선택합니다.
      • gcpserviceaccount: Google 서비스 계정을 사용하여 이미지에 액세스합니다.

      필수 필드입니다.

    • NAMESPACE_EMAIL: gcpserviceaccountROOT_AUTH_TYPE으로 추가한 경우 Google 서비스 계정 이메일 주소를 추가합니다. 예를 들면 acm@PROJECT_ID.iam.gserviceaccount.com입니다.

    • NAMESPACE_SECRET_NAME: tokenROOT_AUTH_TYPE이면 보안 비밀 이름을 추가합니다. 이 필드는 선택사항입니다.

    필드에 대한 설명 및 spec 필드에 추가할 수 있는 전체 필드 목록은 RootSync 필드를 참조하세요.

  5. RepoSync 구성을 적용합니다.

    kubectl apply -f repo-sync.yaml
    
  6. 구성을 확인하려면 네임스페이스 범위 소스의 객체 중 하나에서 kubectl get을 사용합니다. 예를 들면 다음과 같습니다.

    kubectl get rolebindings -n NAMESPACE
    
  7. 여러 네임스페이스 범위 정보 소스를 구성해야 하는 경우 위 단계를 반복하면 됩니다 .

정보 소스의 동기화 상태 확인

nomos status 명령어를 사용하여 정보 소스의 동기화 상태를 검사할 수 있습니다.

nomos status

다음과 비슷한 출력이 표시됩니다.

my_managed_cluster-1
  --------------------
  <root>   git@github.com:foo-corp/acme/admin@main
  SYNCED   f52a11e4
  --------------------
  bookstore  git@github.com:foo-corp/acme/bookstore@v1
  SYNCED     34d1a8c8

이 출력 예시에서 네임스페이스 범위 소스(이 경우에는 Git 저장소)는 bookstore라는 네임스페이스에 대해 구성됩니다.

RootSync 설치 확인

RootSync 객체를 만들면 구성 동기화에서 root-reconciler 프리픽스가 있는 조정자를 만듭니다. 조정자는 배포로 배포되는 포드입니다. 정보 소스의 매니페스트를 클러스터에 동기화합니다.

root-reconciler 배포의 상태를 확인하면 RootSync 객체가 올바르게 작동하는지 확인할 수 있습니다.

kubectl get -n config-management-system deployment \
    -l configsync.gke.io/sync-name=ROOT_SYNC_NAME

ROOT_SYNC_NAME을 RootSync 이름으로 바꿉니다.

다음과 비슷한 출력이 표시됩니다.

NAME              READY   UP-TO-DATE   AVAILABLE   AGE
root-reconciler   1/1     1            1           3h42m

RootSync 객체의 상태를 확인하는 추가 방법은 RootSync 및 RepoSync 객체 모니터링을 참조하세요.

RepoSync 설치 확인

RepoSync 객체를 만들면 구성 동기화에서 ns-reconciler-NAMESPACE 프리픽스가 있는 조정자를 만듭니다. 여기서 NAMESPACE는 RepoSync 객체를 만든 네임스페이스입니다.

네임스페이스 조정자 배포의 상태를 확인하면 RepoSync 객체가 올바르게 작동하는지 확인할 수 있습니다.

kubectl get -n config-management-system deployment \
  -l configsync.gke.io/sync-name=REPO_SYNC_NAME \
  -l configsync.gke.io/sync-namespace=NAMESPACE

REPO_SYNC_NAME을 RepoSync의 이름으로 바꾸고 NAMESPACE를 네임스페이스 범위 정보 소스를 만든 네임스페이스로 바꿉니다.

RepoSync 객체 상태를 확인하는 추가 방법은 RootSync 및 RepoSync 객체 탐색을 참조하세요.

정보 소스 삭제

중앙 제어 방식 또는 Kubernetes API 방식 탭을 선택하여 관련 안내를 확인합니다.

중앙 제어 방식

루트 정보 소스의 정보 소스 제어 방식을 사용한 경우에는 중앙 관리자가 다음 두 단계에 따라 정보 소스를 삭제할 수 있습니다.

  1. RootSync 및 RepoSync 객체를 통해 관리되는 리소스를 삭제할지 아니면 유지할지 결정합니다.

    • RootSync 또는 RepoSync 객체가 관리하는 모든 리소스를 삭제하려면 RootSync 또는 RepoSync 객체를 빈 소스에 동기화합니다. 구성이 없는 GitHub 저장소를 예로 들 수 있습니다. RootSync 또는 RepoSync 객체에 다른 RootSync 또는 RepoSync 객체가 포함된 경우 내부 RootSync 또는 RepoSync가 먼저 빈 Git 저장소에 동기화되어야 합니다.

    • 웹훅을 사용 설정하고 리소스를 유지하려면 문제 해결 안내에 따라 리소스를 관리 해제합니다. 웹훅을 사용 설정하지 않았으면 리소스를 유지하기 위해 추가 단계를 수행할 필요가 없습니다.

  2. 정보 소스에서 RootSync 또는 RepoSync 객체를 삭제합니다.

Kubernetes API 방식

Kubernetes API를 사용한 네임스페이스 범위 정보 소스 제어 메서드를 사용한 경우 애플리케이션 연산자는 다음 단계를 사용하여 네임스페이스 범위 정보 소스를 삭제할 수 있습니다.

  1. RootSync 및 RepoSync 객체를 통해 관리되는 리소스를 삭제할지 아니면 유지할지 결정합니다.

    • RootSync 또는 RepoSync 객체가 관리하는 모든 리소스를 삭제하려면 RootSync 또는 RepoSync 객체를 빈 소스에 동기화합니다. 구성이 없는 GitHub 저장소를 예로 들 수 있습니다. RootSync 또는 RepoSync 객체에 다른 RootSync 또는 RepoSync 객체가 포함된 경우 내부 RootSync 또는 RepoSync가 먼저 빈 Git 저장소에 동기화되어야 합니다.

    • 웹훅을 사용 설정했고 리소스를 유지하려면 문제 해결 안내에 따라 리소스를 관리 해제합니다. 웹훅을 사용 설정하지 않았으면 리소스를 유지하기 위해 추가 단계를 수행할 필요가 없습니다.

  2. 다음 명령어를 실행하여 RootSync 또는 RepoSync 객체를 삭제합니다.

    kubectl delete -f FILE_NAME
    

    FILE_NAME을 RootSync 또는 RepoSync 구성 파일 이름으로 바꿉니다. 예를 들면 root-sync.yaml입니다.

다음 단계