1장. GitOps의 멀티 테넌시 지원
멀티 테넌시는 단일 소프트웨어 인스턴스가 여러 개별 사용자 그룹 또는 테넌트를 제공하는 소프트웨어 아키텍처입니다. 멀티 테넌시를 사용하면 단일 Argo CD 인스턴스를 공유하여 사용자 간에 격리를 유지하면서 리소스를 배포할 수 있습니다. 이 섹션에서는 클러스터 관리자가 Argo CD 인스턴스 범위 및 특정 모드를 선택할 시기를 이해하는 데 도움이 됩니다.
OpenShift Container Platform의 Red Hat OpenShift GitOps Operator를 사용하여 클러스터 관리자는 애플리케이션 제공 팀(테넌트)을 위해 클러스터에 대한 다중 테넌트 액세스 권한을 제공할 수 있습니다. 테넌트가 관리 권한 없이 사용자 정의 네임스페이스에서 전용 Argo CD 인스턴스를 생성하고 관리할 수 있도록 허용할 수 있습니다. 테넌트에는 완전한 자율성이 있으며 다른 테넌트를 방해하지 않고 이 인스턴스를 요구 사항 및 요구 사항에 맞게 조정할 수 있습니다.
다중 테넌트 클러스터의 경우 Argo CD 인스턴스를 관리하는 사람이 클러스터 및 해당 사용자를 관리하는 사람이 아닐 수 있습니다. 따라서 Argo CD 애플리케이션 컨트롤러(argocd-application-controller
구성 요소)를 클러스터의 슈퍼유저로 사용할 수 없습니다.
Argo CD 애플리케이션 컨트롤러는 관리 클러스터의 리소스를 조정합니다. 따라서 사용 사례, 테넌트 및 요구 사항에 따라 GitOps Operator에서 멀티 테넌시를 사용하려면 특정 작업을 수행하기 위해 Argo CD 인스턴스, 애플리케이션 및 원격 클러스터에 명시적으로 특정 권한을 구성, 부여, 확장 또는 제한해야 합니다.
1.1. Argo CD 인스턴스 범위 링크 복사링크가 클립보드에 복사되었습니다!
Red Hat OpenShift GitOps Operator는 멀티 테넌시를 지원하는 다음 모드로 광범위하게 분류할 수 있는 인스턴스를 생성합니다.
- 네임스페이스 범위 인스턴스(애플리케이션 제공 인스턴스)
- 클러스터 범위 인스턴스
- 기본 클러스터 범위 인스턴스
1.1.1. 네임스페이스 범위 인스턴스(애플리케이션 제공 인스턴스) 링크 복사링크가 클립보드에 복사되었습니다!
네임스페이스 중 하나에서 Argo CD CR(사용자 정의 리소스)을 생성한 후 GitOps Operator는 이 네임스페이스에서 Argo CD를 시작하여 애플리케이션 전달에 사용할 수 있습니다. 초기 상태에서 이 인스턴스에는 설치된 동일한 네임스페이스에만 리소스를 배포할 수 있는 권한이 있습니다. 그러나 특정 요구 사항을 충족하도록 인스턴스를 구성해야 할 수도 있습니다.
GitOps Operator를 사용하면 Argo CD 인스턴스의 권한을 확장하여 Argo CD 애플리케이션 컨트롤러에서 리소스를 설치된 위치와 별도로 다른 네임스페이스에 배포할 수 있습니다.
네임스페이스의 GitOps Operator가 생성하는 역할은 네임스페이스 범위이며 네임스페이스 리소스에 대한 액세스 권한만 있습니다. Operator는 관리하는 네임스페이스 외부에서 모든 작업을 수행할 수 없습니다.
이 방법은 어떻게 작동합니까?
GitOps Operator를 사용하면 네임스페이스의 argoproj.io/v1alpha1
또는 argoproj.io/v1beta1
API에서 Argo CD 리소스를 생성할 수 있는 권한이 있는 경우 네임스페이스에서 Argo CD 인스턴스를 인스턴스화할 수 있습니다. 현재 네임스페이스 범위 인스턴스에는 관리하는 네임스페이스 또는 여러 네임스페이스에 대한 전체 관리 권한이 있으며, 해당 네임스페이스 내의 모든 리소스에 대한 모든 동사를 허용하는 것과 유사합니다.
Argo CD 애플리케이션 컨트롤러가 리소스를 다른 네임스페이스에 배포하려면 라벨을 지정하려면 Kubernetes 역할 및 역할 바인딩이 필요하며 네임스페이스 범위 인스턴스에서 관리할 네임스페이스를 지정합니다. GitOps Operator는 argocd.argoproj.io/managed-by
레이블을 사용하여 이러한 역할 및 역할 바인딩을 자동으로 생성할 수 있습니다. 이 레이블을 사용하고 값을 설정하여 관리되는 네임스페이스를 나타냅니다. 그런 다음 argocd.argoproj.io/managed-by
레이블을 사용하면 네임스페이스 범위 인스턴스 모드에서 GitOps Operator를 배포할 때 인스턴스에서 관리하는 모든 네임스페이스에 역할 및 역할 바인딩 세트가 생성됩니다.
argocd.argoproj.io/managed-by
레이블은 GitOps Operator와 동일한 클러스터의 네임스페이스에 대해서만 작동합니다. 원격 클러스터의 경우 권한을 수동으로 정의해야 합니다.
기본적으로 managed-by
레이블을 사용하여 네임스페이스에 레이블을 지정할 때 GitOps Operator는 레이블이 지정된 네임스페이스의 Kubernetes 기본 admin
클러스터 역할과 동일한 Argo CD Application Controller 권한을 부여합니다. 그러나 Operator의 Subscription
리소스에서 각각 CONTROLLER_CLUSTER_ROLE
및 CONTROLLER_SERVER_ROLE
환경 변수를 사용하여 컨트롤러 및 서버 구성 요소에 사용되는 대체 클러스터 역할을 정의할 수 있습니다. 이러한 변수를 제공할 때 Operator는 네임스페이스에 기본 역할을 생성하지 않고 해당 클러스터 역할의 네임스페이스에 역할 바인딩만 생성합니다. 관리자는 권한을 완전히 제어할 수 있는 클러스터 역할을 생성할 수 있습니다.
-
역할을 정의할 때 Argo CD는 모든 리소스와 상호 작용을 시도합니다. 따라서 사용자 정의 클러스터 역할의 모든 리소스를
보고
가져오고
, 조사할 수 있는 권한을 제공하거나, 역할에 정의된resourceInclusions
또는resourceExclusions
필드를 통해 특정 리소스를 포함하거나 제외하도록 Argo CD CR을 구성해야 합니다. - 네임스페이스, CRD(사용자 정의 리소스 정의) 또는 네임스페이스 범위 인스턴스를 사용하여 클러스터 범위 리소스를 관리할 수 없습니다.
1.1.2. 클러스터 범위 인스턴스 링크 복사링크가 클립보드에 복사되었습니다!
클러스터 범위 인스턴스는 클러스터 전체에 리소스를 배포하고 관리하기 위한 것입니다.
네임스페이스 기능에서 애플리케이션을 사용하려면 Argo CD 인스턴스 범위의 모드를 클러스터 범위 인스턴스로 선택합니다.
클러스터 범위 인스턴스는 클러스터 수준 리소스에 액세스할 수 있으므로 일반적으로 클러스터 구성에 사용되는 것은 아닙니다. 특정 네임스페이스 범위의 Argo CD 인스턴스를 클러스터 범위가 되도록 선택할 수 있습니다. 인스턴스를 준비하려면 GitOps Operator의 Subscription
리소스를 수정해야 합니다.
- 인스턴스를 확장하는 동안 신중하게 고려해야 합니다.
- 애플리케이션 제공 팀에서 자체 관리하는 인스턴스를 설정하지 마십시오. 이 작업을 수행하면 사용자가 자체 관리 인스턴스 클러스터 관리자가 되고 권한을 완전히 제어할 수 있으므로 이러한 인스턴스가 클러스터에 심각한 보안 위험이 발생할 수 있습니다.
Argo CD 내에서 멀티 테넌시 구성을 설정할 때 많은 주의를 기울여야 합니다. 예를 들어 클러스터 관리자가 여러 애플리케이션 제공 팀 간에 공유되고 클러스터 관리자가 관리하는 Argo CD 인스턴스를 설정하려는 사용 사례에서 사용자 지정 클러스터 범위 인스턴스가 필요할 수 있습니다.
이 방법은 어떻게 작동합니까?
사용자가 cluster-admin
권한을 사용하여 Argo CD 인스턴스를 배포하지 못하도록 하려면 Subscription
리소스에서 ARGOCD_CLUSTER_CONFIG_NAMESPACES
환경 변수를 사용하여 클러스터 권한으로 네임스페이스를 식별해야 합니다.
비 클러스터 관리자는 서브스크립션
리소스에 액세스할 수 없으므로 인스턴스의 권한을 승격하고 클러스터 보안을 우회할 수 없습니다.
인스턴스가 클러스터 범위로 지정되면 Operator는 해당 네임스페이스에서 Argo CD Application Controller 및 서버 서비스 계정에 대한 클러스터 역할 및 클러스터 역할 바인딩 세트를 자동으로 생성합니다. 이 기본 역할은 표준 cluster-admin
역할과 동등하지 않습니다. 훨씬 더 작은 권한 세트가 제공됩니다. 이러한 권한은 필요에 따라 추가 클러스터 역할 또는 클러스터 역할 바인딩을 생성하여 확장할 수 있습니다.
1.1.3. 기본 클러스터 범위 인스턴스 링크 복사링크가 클립보드에 복사되었습니다!
GitOps Operator를 설치한 후 기본적으로 openshift-gitops
네임스페이스에서 클러스터 범위 인스턴스를 인스턴스화합니다. 이 인스턴스는 매우 신중하게 설정되며 클러스터 관리자가 특정 클러스터 구성 리소스를 관리할 수 있도록 하기 위한 것입니다.
- 애플리케이션 제공과 같은 다른 용도로 기본 클러스터 범위 인스턴스를 사용하지 마십시오.
-
기본 클러스터 범위 인스턴스에 액세스할 수 있는
cluster-admin
역할이 없는 사용자에게 권한을 부여하지 마십시오.
기본 인스턴스에는 전체 cluster-admin
권한이 없습니다. 클러스터의 모든 리소스에 대한 읽기 액세스 권한이 있지만 제한된 리소스 세트만 배포할 수 있습니다.
클러스터 구성에 있는 openshift-gitops
네임스페이스에서 기본 Argo CD 인스턴스를 사용하고 테넌트 사용 사례를 다른 네임스페이스의 하나 이상의 개별 인스턴스에 위임합니다.