Anthos Config Management 1.3에 대한 문서를 보고 있습니다. 이 버전을 계속 사용하거나 현재 버전을 사용할 수 있습니다.

네임스페이스와 네임스페이스 범위 객체 구성

이 주제에서는 Anthos Config Management를 사용하여 네임스페이스와 네임스페이스 범위 객체를 관리하는 방법을 설명합니다. 클러스터 및 클러스터 범위 객체 구성도 참조하세요.

네임스페이스 구성

네임스페이스와 네임스페이스 범위 객체의 구성은 모두 저장소namespaces/ 디렉터리와 하위 디렉터리에 있습니다.

다음 단계를 수행하여 각 등록된 클러스터에 audit라는 네임스페이스를 구성합니다.

  1. 저장소의 로컬 클론에서 네임스페이스 디렉터리를 만듭니다. 네임스페이스 디렉터리에는 네임스페이스 구성이 포함됩니다. 네임스페이스 디렉터리 이름은 네임스페이스 이름과 일치해야 합니다. 이 예시에서 디렉터리는 namespaces/audit라고 합니다.

    mkdir namespaces/audit
    
  2. 네임스페이스 디렉터리에서 다음 콘텐츠가 있는 audit.yaml 파일을 만듭니다. metadata.name은 네임스페이스 이름 및 네임스페이스 디렉터리 이름과 일치해야 합니다.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: audit
    
  3. audit.yaml 구성이 포함된 커밋을 만들고 원격 저장소로 내보냅니다.

    git add namespaces/audit/audit.yaml
    git commit -m "Created audit namespace config"
    git push [NAME-OF-REMOTE] [BRANCH-NAME]
    
  4. 잠시 후 등록된 각 클러스터에 audit 네임스페이스가 생성됩니다. 확인하려면 네임스페이스에 대한 설명을 입력합니다.

    kubectl describe namespace audit
    
  5. 구성을 삭제하고 등록된 클러스터에서 audit 네임스페이스를 삭제하려면 파일을 삭제하는 새 커밋을 만들어 원격 저장소로 내보냅니다.

추상 네임스페이스 구성

이 예시에서는 audit 네임스페이스 디렉터리를 audit 네임스페이스에서 상속한 추가 구성이 포함된 추상 네임스페이스로 이동하여 네임스페이스 구성의 예시를 확장합니다.

  1. 저장소의 로컬 클론에서 regulatory라는 추상 네임스페이스 디렉터리를 만듭니다. 추상 네임스페이스 디렉터리에는 네임스페이스의 구성이 없지만 하위 네임스페이스 디렉터리에는 구성이 포함되어 있습니다.

    mkdir namespaces/regulatory
    
  2. regulatory 추상 네임스페이스 디렉터리에서 regulator라는 Role의 구성을 만들어 이 Role을 상속받는 네임스페이스의 모든 리소스에 getlist 권한을 부여합니다.

    # namespaces/regulatory/regulator_role.yaml
    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: regulator
    rules:
    - apiGroups: [""]
      resources: ["*"]
      verbs: ["get", "list"]
    
  3. regulator Role을 regulators@example.com 그룹에 결합하는 regulatory-admin이라는 RoleBinding의 구성을 만듭니다.

    # namespaces/regulatory/regulator_rolebinding.yaml
    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: regulatory-admin
    subjects:
    - kind: Group
      name: regulators@example.com
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: Role
      name: regulator
      apiGroup: rbac.authorization.k8s.io
    
  4. audit 네임스페이스 디렉터리를 namespaces/에서 namespaces/regulatory/ 디렉터리로 이동합니다.

    mv namespaces/audit/ namespaces/regulatory/
    
  5. 모든 변경사항을 커밋하고 저장소의 원격으로 내보냅니다.

Config Management Operator는 변경사항을 감지하고 새 Role과 RoleBinding을 등록된 모든 클러스터의 audit 네임스페이스에 적용합니다.

구성을 삭제하고 등록된 클러스터에서 audit 네임스페이스를 삭제하려면 전체 regulatory 추상 네임스페이스를 삭제하는 새 커밋을 만들고 원격 저장소로 내보내면 됩니다.

구성 영향을 받는 클러스터 제한

일반적으로 Anthos Config Management는 등록된 각 클러스터에 구성을 적용합니다. 구성이 namespaces/ 하위 디렉터리 내에 있으면 Anthos Config Management는 먼저 각 클러스터에 네임스페이스를 만든 후 상속된 모든 구성을 네임스페이스에 적용합니다.

특정 구성이 각 클러스터의 라벨에 따라 영향을 주는 클러스터를 제한하려면 클러스터의 하위 집합에 구성 적용을 참조하세요.

구성 영향을 받는 네임스페이스 제한

NamespaceSelector는 Kubernetes labelSelector를 사용하는 특수 유형의 구성입니다. namespaces/의 구성과 함께 NamespaceSelector를 사용하여 구성을 상속할 수 있는 네임스페이스를 제한할 수 있습니다.

다음 구성은 sre-supported라는 NamespaceSelector를 만듭니다. 다른 구성이 이 NamespaceSelector를 참조하면 구성은 env: prod 라벨이 있는 네임스페이스의 객체에만 적용될 수 있습니다.

kind: NamespaceSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: sre-supported
spec:
  selector:
    matchLabels:
      env: prod

구성에서 NamespaceSelector를 참조하려면 NamespaceSelector 이름에 configmanagement.gke.io/namespace-selector 주석을 설정합니다.

NamespaceSelector는 다른 구성에서 참조될 때까지 어떠한 영향도 주지 않습니다. sre-supported NamespaceSelector가 다음 RoleBinding인 sre-admin과 동일한 계층 구조에 있으면 RoleBinding은 env: prod 라벨이 있는 네임스페이스에서만 생성됩니다.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: sre-admin
  annotations:
    configmanagement.gke.io/namespace-selector: sre-supported
subjects:
- kind: Group
  name: sre@foo-corp.com
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: admin
  apiGroup: rbac.authorization.k8s.io

요약하면 다음과 같은 3단계로 NamespaceSelector를 사용할 수 있습니다.

  1. 네임스페이스에 라벨을 추가합니다.
  2. NamespaceSelector 구성을 만듭니다.
  3. 다른 구성에서 NamespaceSelector 객체를 참조합니다.

객체 유형에 상속 중지

hierarchyMode 필드를 none으로 설정하면 모든 구성의 상속을 선택적으로 중지할 수 있습니다. HierarchyConfig는 저장소의 system/ 디렉터리에 저장됩니다. 이 예시에서는 RoleBinding의 상속을 중지합니다.

# system/hierarchy-config.yaml
kind: HierarchyConfig
apiVersion: configmanagement.gke.io/v1
metadata:
  name: rbac
spec:
  resources:
  # Configure Role to only be allowed in leaf namespaces.
  - group: rbac.authorization.k8s.io
    kinds: [ "RoleBinding" ]
    hierarchyMode: none

다음 단계