4.8. 비 클러스터 관리자가 Operator를 설치하도록 허용


클러스터 관리자는 Operator 그룹을 사용하여 일반 사용자가 Operator를 설치하도록 허용할 수 있습니다.

4.8.1. Operator 설치 정책 이해

Operator를 실행하는 데 광범위한 권한이 필요할 수 있으며 필요한 권한이 버전에 따라 다를 수 있습니다. OLM(Operator Lifecycle Manager)은 cluster-admin 권한으로 실행됩니다. 기본적으로 운영자 작성자는 클러스터 서비스 버전(CSV)에서 모든 권한 집합을 지정할 수 있으며, OLM은 이를 운영자에게 부여합니다.

운영자가 클러스터 범위 권한을 획득하지 못하고 사용자가 OLM을 사용하여 권한을 확대할 수 없도록 하려면 클러스터 관리자가 운영자를 클러스터에 추가하기 전에 수동으로 감사해야 합니다. 클러스터 관리자에게는 서비스 계정을 사용하여 Operator를 설치 또는 업그레이드하는 동안 수행할 수 있는 작업을 결정하고 제한하는 툴도 제공됩니다.

클러스터 관리자는 운영자 그룹을 해당 그룹에 부여된 권한 집합이 있는 서비스 계정과 연결할 수 있습니다. 서비스 계정은 역할 기반 액세스 제어(RBAC) 규칙을 사용하여 운영자가 사전에 정의된 경계 내에서만 실행되도록 정책을 설정합니다. 결과적으로 운영자는 해당 규칙에서 명시적으로 허용되지 않은 작업을 수행할 수 없습니다.

운영자 그룹을 사용하면 충분한 권한이 있는 사용자가 제한된 범위의 운영자를 설치할 수 있습니다. 결과적으로 더 많은 사용자에게 Operator Framework 도구를 안전하게 제공할 수 있으며, Operator를 사용하여 애플리케이션을 구축할 때 더욱 풍부한 경험을 제공할 수 있습니다.

참고

구독 개체에 대한 역할 기반 액세스 제어(RBAC)는 네임스페이스에서 편집 또는 관리 역할이 있는 모든 사용자에게 자동으로 부여됩니다. 하지만 OperatorGroup 객체에는 RBAC가 존재하지 않습니다. 이러한 부재로 인해 일반 사용자는 Operator를 설치할 수 없습니다. Operator 그룹을 미리 설치하면 실제로 설치 권한이 부여됩니다.

서비스 계정과 운영자 그룹을 연결할 때 다음 사항을 명심하세요.

  • APIServiceCustomResourceDefinition 리소스는 항상 cluster-admin 역할을 사용하여 OLM에 의해 생성됩니다. Operator group과 연결된 서비스 계정에는 이러한 리소스를 작성할 수 있는 권한을 부여해서는 안 됩니다.
  • 이제 Operator group에 연결된 모든 Operator의 권한이 지정된 서비스 계정에 부여된 권한으로 제한됩니다. 운영자가 서비스 계정의 범위를 벗어나는 권한을 요청하면 해당 오류가 발생하여 설치가 실패하므로 클러스터 관리자가 문제를 해결해야 합니다.

4.8.1.1. 설치 시나리오

Operator를 클러스터에서 설치하거나 업그레이드할 수 있는지 결정하는 경우 OLM(Operator Lifecycle Manager)은 다음 시나리오를 고려합니다.

  • 클러스터 관리자가 새 Operator group을 생성하고 서비스 계정을 지정합니다. 이 Operator group과 연결된 모든 Operator가 설치되고 서비스 계정에 부여된 권한에 따라 실행됩니다.
  • 클러스터 관리자가 새 Operator group을 생성하고 서비스 계정을 지정하지 않습니다. OpenShift Container Platform은 이전 버전과의 호환성을 유지하므로 기본 동작은 그대로 유지되면서 Operator 설치 및 업그레이드가 허용됩니다.
  • 서비스 계정을 지정하지 않는 기존 Operator group의 경우 기본 동작은 그대로 유지되면서 Operator 설치 및 업그레이드가 허용됩니다.
  • 클러스터 관리자가 기존 Operator group을 업데이트하고 서비스 계정을 지정합니다. OLM을 사용하면 현재 권한을 사용하여 기존 Operator를 계속 실행될 수 있습니다. 이러한 기존 Operator에서 업그레이드를 수행하면 기존 Operator가 새 Operator와 같이 서비스 계정에 부여된 권한에 따라 다시 설치되어 실행됩니다.
  • 권한을 추가하거나 제거함으로써 Operator group에서 지정하는 서비스 계정이 변경되거나 기존 서비스 계정을 새 서비스 계정과 교체합니다. 기존 Operator에서 업그레이드를 수행하면 기존 Operator가 새 Operator와 같이 업데이트된 서비스 계정에 부여된 권한에 따라 다시 설치되어 실행됩니다.
  • 클러스터 관리자는 Operator group에서 서비스 계정을 제거합니다. 기본 동작은 유지되고 Operator 설치 및 업그레이드는 허용됩니다.

4.8.1.2. 설치 워크플로

Operator group이 서비스 계정에 연결되고 Operator가 설치 또는 업그레이드되면 OLM(Operator Lifecycle Manager)에서 다음과 같은 워크플로를 사용합니다.

  1. OLM에서 지정된 Subscription 오브젝트를 선택합니다.
  2. OLM에서 이 서브스크립션에 연결된 Operator group을 가져옵니다.
  3. OLM에서 Operator group에 서비스 계정이 지정되었는지 확인합니다.
  4. OLM에서 서비스 계정에 대한 클라이언트 범위를 생성하고 범위가 지정된 클라이언트를 사용하여 Operator를 설치합니다. 이렇게 하면 Operator에서 요청한 모든 권한이 항상 Operator group 서비스 계정의 권한으로 제한됩니다.
  5. OLM은 CSV에 지정된 권한 세트를 사용하여 새 서비스 계정을 생성하고 Operator에 할당합니다. Operator는 할당된 서비스 계정으로 실행됩니다.

4.8.2. Operator 설치 범위 지정

OLM(Operator Lifecycle Manager)의 Operator 설치 및 업그레이드에 대한 범위 지정 규칙을 제공하려면 서비스 계정을 Operator group에 연결합니다.

클러스터 관리자는 다음 예제를 통해 일련의 Operator를 지정된 네임스페이스로 제한할 수 있습니다.

사전 요구 사항

  • cluster-admin 역할의 사용자로 클러스터에 액세스할 수 있어야 합니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 새 네임스페이스를 생성합니다.

    예 4.9. 네임스페이스 객체를 생성하는 예제 명령

    $ cat <<EOF | oc create -f -
    apiVersion: v1
    kind: Namespace
    metadata:
      name: scoped
    EOF
    Copy to Clipboard Toggle word wrap
  2. Operator를 제한할 권한을 할당합니다. 여기에는 새로 생성된 지정된 네임스페이스에서 새 서비스 계정, 관련 역할 및 역할 바인딩을 만드는 작업이 포함됩니다.

    1. 다음 명령을 실행하여 서비스 계정을 만듭니다.

      예 4.10. ServiceAccount 객체를 생성하는 예제 명령

      $ cat <<EOF | oc create -f -
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: scoped
        namespace: scoped
      EOF
      Copy to Clipboard Toggle word wrap
    2. 다음 명령을 실행하여 비밀을 생성합니다.

      예 4.11. 장기 API 토큰 Secret 객체를 생성하는 예제 명령

      $ cat <<EOF | oc create -f -
      apiVersion: v1
      kind: Secret
      type: kubernetes.io/service-account-token 
      1
      
      metadata:
        name: scoped
        namespace: scoped
        annotations:
          kubernetes.io/service-account.name: scoped
      EOF
      Copy to Clipboard Toggle word wrap
      1
      비밀은 서비스 계정에서 사용되는 장기 API 토큰이어야 합니다.
    3. 다음 명령을 실행하여 역할을 만듭니다.

      주의

      이 예에서 역할은 데모 목적으로만 지정된 네임스페이스에서 모든 작업을 수행할 수 있는 권한을 서비스 계정에 부여합니다. 프로덕션 환경에서는 보다 세분화된 권한 집합을 만들어야 합니다. 자세한 내용은 "세분화된 권한"을 참조하세요.

      예 4.12. RoleRoleBinding 객체를 생성하는 예제 명령

      $ cat <<EOF | oc create -f -
      apiVersion: rbac.authorization.k8s.io/v1
      kind: Role
      metadata:
        name: scoped
        namespace: scoped
      rules:
      - apiGroups: ["*"]
        resources: ["*"]
        verbs: ["*"]
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: RoleBinding
      metadata:
        name: scoped-bindings
        namespace: scoped
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: Role
        name: scoped
      subjects:
      - kind: ServiceAccount
        name: scoped
        namespace: scoped
      EOF
      Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 지정된 네임스페이스에 OperatorGroup 객체를 만듭니다. 이 Operator group은 지정된 네임스페이스를 대상으로 하여 테넌시가 제한되도록 합니다. 또한 Operator group에서는 사용자가 서비스 계정을 지정할 수 있습니다.

    예 4.13. OperatorGroup 객체를 생성하는 예제 명령

    $ cat <<EOF | oc create -f -
    apiVersion: operators.coreos.com/v1
    kind: OperatorGroup
    metadata:
      name: scoped
      namespace: scoped
    spec:
      serviceAccountName: scoped 
    1
    
      targetNamespaces:
      - scoped
    EOF
    Copy to Clipboard Toggle word wrap
    1
    이전 단계에서 만든 서비스 계정을 지정합니다. 지정된 네임스페이스에 설치된 Operator는 모두 이 Operator group 및 지정된 서비스 계정에 연결됩니다.
  4. 지정된 네임스페이스에 Subscription 오브젝트를 생성하여 Operator를 설치합니다.

    예 4.14. 구독 객체를 생성하는 예제 명령

    $ cat <<EOF | oc create -f -
    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-cert-manager-operator
      namespace: scoped
    spec:
      channel: stable-v1
      name: openshift-cert-manager-operator
      source: <catalog_source_name> 
    1
    
      sourceNamespace: <catalog_source_namespace> 
    2
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    지정된 네임스페이스에 이미 존재하는 카탈로그 소스나 글로벌 카탈로그 네임스페이스에 있는 카탈로그 소스(예: redhat-operators ) 를 지정합니다.
    2
    예를 들어, redhat-operators 카탈로그의 경우 openshift-marketplace 와 같이 카탈로그 소스가 생성된 네임스페이스를 지정합니다.

    Operator group에 연결된 모든 Operator의 권한이 지정된 서비스 계정에 부여된 권한으로 제한됩니다. Operator에서 서비스 계정 외부에 있는 권한을 요청하는 경우 설치가 실패하고 관련 오류가 표시됩니다.

4.8.2.1. 세분화된 권한

OLM(Operator Lifecycle Manager)은 Operator group에 지정된 서비스 계정을 사용하여 설치 중인 Operator와 관련하여 다음 리소스를 생성하거나 업데이트합니다.

  • ClusterServiceVersion
  • 서브스크립션
  • Secret
  • ServiceAccount
  • Service
  • ClusterRoleClusterRoleBinding
  • RoleRoleBinding

Operator를 지정된 네임스페이스로 제한하려면 클러스터 관리자가 서비스 계정에 다음 권한을 부여하여 시작하면 됩니다.

참고

다음 역할은 일반적인 예이며 특정 Operator를 기반으로 추가 규칙이 필요할 수 있습니다.

kind: Role
rules:
- apiGroups: ["operators.coreos.com"]
  resources: ["subscriptions", "clusterserviceversions"]
  verbs: ["get", "create", "update", "patch"]
- apiGroups: [""]
  resources: ["services", "serviceaccounts"]
  verbs: ["get", "create", "update", "patch"]
- apiGroups: ["rbac.authorization.k8s.io"]
  resources: ["roles", "rolebindings"]
  verbs: ["get", "create", "update", "patch"]
- apiGroups: ["apps"] 
1

  resources: ["deployments"]
  verbs: ["list", "watch", "get", "create", "update", "patch", "delete"]
- apiGroups: [""] 
2

  resources: ["pods"]
  verbs: ["list", "watch", "get", "create", "update", "patch", "delete"]
Copy to Clipboard Toggle word wrap
1 2
여기에 표시된 배포 및 Pod와 같은 기타 리소스를 생성하는 권한을 추가합니다.

또한 Operator에서 가져오기 보안을 지정하는 경우 다음 권한도 추가해야 합니다.

kind: ClusterRole 
1

rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get"]
---
kind: Role
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create", "update", "patch"]
Copy to Clipboard Toggle word wrap
1
OLM 네임스페이스에서 보안을 가져오는 데 필요합니다.

4.8.3. 운영자 카탈로그 액세스 제어

글로벌 카탈로그 네임스페이스인 openshift-marketplace 에 Operator 카탈로그가 생성되면 카탈로그의 Operator는 모든 네임스페이스에서 클러스터 전체에서 사용할 수 있게 됩니다. 다른 네임스페이스에서 생성된 카탈로그는 해당 카탈로그의 동일한 네임스페이스에서만 해당 연산자를 사용할 수 있도록 합니다.

클러스터 관리자가 아닌 사용자에게 운영자 설치 권한이 위임된 클러스터에서 클러스터 관리자는 해당 사용자가 설치할 수 있는 운영자 집합을 추가로 제어하거나 제한하려고 할 수 있습니다. 다음 작업을 통해 이를 달성할 수 있습니다.

  1. 모든 기본 글로벌 카탈로그를 비활성화합니다.
  2. 관련 운영자 그룹이 사전 설치된 동일한 네임스페이스에서 사용자 정의되고 큐레이팅된 카탈로그를 활성화합니다.

4.8.4. 권한 장애 문제 해결

권한 부족으로 인해 Operator 설치가 실패하는 경우 다음 절차를 사용하여 오류를 확인합니다.

프로세스

  1. Subscription 오브젝트를 검토합니다. 해당 상태에는 Operator에 필요한 [Cluster]Role[Binding] 오브젝트를 생성하는 InstallPlan 오브젝트를 가리키는 오브젝트 참조 installPlanRef가 있습니다.

    apiVersion: operators.coreos.com/v1
    kind: Subscription
    metadata:
      name: etcd
      namespace: scoped
    status:
      installPlanRef:
        apiVersion: operators.coreos.com/v1
        kind: InstallPlan
        name: install-4plp8
        namespace: scoped
        resourceVersion: "117359"
        uid: 2c1df80e-afea-11e9-bce3-5254009c9c23
    Copy to Clipboard Toggle word wrap
  2. InstallPlan 오브젝트의 상태에 오류가 있는지 확인합니다.

    apiVersion: operators.coreos.com/v1
    kind: InstallPlan
    status:
      conditions:
      - lastTransitionTime: "2019-07-26T21:13:10Z"
        lastUpdateTime: "2019-07-26T21:13:10Z"
        message: 'error creating clusterrole etcdoperator.v0.9.4-clusterwide-dsfx4: clusterroles.rbac.authorization.k8s.io
          is forbidden: User "system:serviceaccount:scoped:scoped" cannot create resource
          "clusterroles" in API group "rbac.authorization.k8s.io" at the cluster scope'
        reason: InstallComponentFailed
        status: "False"
        type: Installed
      phase: Failed
    Copy to Clipboard Toggle word wrap

    오류 메시지에는 다음이 표시됩니다.

    • 리소스의 API 그룹을 포함하여 생성할 수 없는 리소스 유형. 이 경우 rbac.authorization.k8s.io 그룹의 clusterroles입니다.
    • 리소스의 이름.
    • 오류 유형 is forbidden은 사용자에게 작업을 수행할 수 있는 권한이 충분하지 않음을 나타냅니다.
    • 리소스를 생성하거나 업데이트하려고 시도한 사용자의 이름. 이 경우 Operator group에 지정된 서비스 계정을 나타냅니다.
    • 작업 범위: cluster scope 여부

      사용자는 서비스 계정에 누락된 권한을 추가한 다음 다시 수행할 수 있습니다.

      참고

      OLM(Operator Lifecycle Manager)은 현재 첫 번째 시도에서 전체 오류 목록을 제공하지 않습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat