GDC용 VM 런타임은 VM과 관련된 다양한 리소스를 관리합니다. 이러한 리소스에는 Google Kubernetes Engine(GKE) Enterprise 버전 정의 리소스, KubeVirt 정의 리소스, Kubernetes 리소스가 포함됩니다. GDC용 VM 런타임은 역할 기반 액세스 제어 (RBAC)를 사용하여 관리형 리소스의 권한을 설정하고 적용합니다. 이러한 리소스 작업을 지원하고 VM을 관리하기 위해 4개의 사전 구성된 ClusterRole이 제공됩니다.
kubevm.admin
kubevm.edit
kubevm.view
kubevm.cluster.view
이러한 기본 제공되는 역할은 GDC용 VM 런타임과 관련된 커스텀 리소스에 대해 일반화된 액세스 모델을 제공합니다. 각 역할에는 리소스 작업을 위해 사전 설정된 권한이 포함되어 있습니다. 이 문서는 클러스터 관리자가 자체 액세스 모델을 맞춤설정할 수 있도록 GDC용 VM 런타임이 관리하는 리소스에 대한 정보를 제공합니다.
사전 정의된 ClusterRole
이 섹션에서는 사전 정의된 각 ClusterRole에 대해 설명합니다. 이러한 ClusterRole은 GDC용 VM 런타임이 사용 설정된 경우에만 사용할 수 있습니다.
- GDC용 VM 런타임이 사용 설정되면 사전 정의된 4개의 ClusterRole이 자동으로 생성됩니다.
- GDC용 VM 런타임이 사용 중지되면 사전 정의된 4개의 ClusterRole이 삭제됩니다.
다음 표에서는 클러스터 역할 및 관련 권한을 보여줍니다.
클러스터 역할 | 설명 | 액세스 동사 |
---|---|---|
kubevm.admin |
모든 Google Kubernetes Engine(GKE) Enterprise 버전 리소스에 대한 전체 액세스 권한을 부여합니다. |
|
kubevm.edit |
모든 Google Kubernetes Engine(GKE) Enterprise 버전 리소스에 대한 읽기/쓰기 액세스 권한을 부여합니다. |
|
kubevm.view |
모든 Google Kubernetes Engine(GKE) Enterprise 버전 리소스에 대한 읽기 액세스 권한을 부여합니다. |
|
kubevm.cluster.view |
클러스터별 리소스에 대해 읽기 액세스 권한을 부여합니다. 이 클러스터 역할은 클러스터별 리소스에 대한 액세스가 필요하지만 수정/보기 역할이 네임스페이스에 바인딩된 경우에 필요합니다. |
|
집계된 ClusterRole
kubevm.admin
, kubevm.view
, kubevm.edit
ClusterRole은 직접 사용되지 않습니다. 대신 이 세 가지 역할이 Kubernetes 기본 admin
, view
, edit
ClusterRole에 각각 집계됩니다. 이러한 집계는 기본 Kubernetes 역할을 확장하므로 이를 사용해 Google Kubernetes Engine(GKE) Enterprise 버전 리소스를 관리할 수 있습니다. 집계된 ClusterRole이 있으면 Kubernetes 기본 역할을 사용하여 Google Kubernetes Engine(GKE) Enterprise 버전 리소스에 대한 액세스 권한을 관리하거나 사전 정의된 ClusterRole을 기반으로 자체 역할을 만들 수 있습니다.
집계 라벨 예시
kubevm.edit
ClusterRole에는 Kubernetes edit
ClusterRole로 집계되는 rbac.authorization.k8s.io/aggregate-to-edit: "true"
라벨이 있습니다. kubevm.edit
ClusterRole의 권한은 Kubernetes 기본 edit
역할에 부여됩니다. kubevm.admin
및 kubevm.view
ClusterRole은 aggregate-to-admin
또는 aggregate-to-view
주석과 비슷하게 집계됩니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: kubevm.edit
labels:
kubevm: kubevm.edit
rbac.authorization.k8s.io/aggregate-to-edit: "true"
...
일반 사용자 시나리오
다음 시나리오에서는 RoleBinding 및 ClusterRoleBinding을 사용하여 사전 정의된 ClusterRole에 지정된 권한을 사용자 또는 사용자 집합에 부여하는 방법을 설명합니다.
클러스터 관리자
사용자 또는 사용자 집합에 관리자 권한을 부여하려면 Kubernetes 기본 admin
ClusterRole을 사용하여 ClusterRoleBinding을 만듭니다.
ClusterRoleBinding 예시
다음 admin-charlie
ClusterRoleBinding 예시는 사용자에게 charlie
관리자 권한을 부여합니다. ClusterRoleBinding은 집계를 통해 사전 정의된 kubevm.admin
ClusterRole의 권한이 포함된 기본 Kubernetes admin
ClusterRole의 권한을 사용합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-charlie
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
클러스터 뷰어
사용자 또는 사용자 집합에 뷰어 권한을 부여하려면 Kubernetes 기본 view
ClusterRole을 사용하여 ClusterRoleBinding을 만듭니다. 비슷한 ClusterRoleBinding 예시는 ClusterRoleBinding 예시를 참조하세요.
클러스터 편집자
사용자 또는 사용자 집합에 편집자 권한을 부여하려면 Kubernetes 기본 edit
ClusterRole을 사용하여 ClusterRoleBinding을 만듭니다. 비슷한 ClusterRoleBinding 예시는 ClusterRoleBinding 예시를 참조하세요.
네임스페이스 편집자
사용자 또는 사용자 집합에 네임스페이스 편집자 권한을 부여하려면 두 개의 개별 바인딩을 만들어야 합니다.
네임스페이스에 RoleBinding을 만들고 기본 Kubernetes
edit
ClusterRole을 참조합니다.사전 정의된
kubevm.cluster.view
ClusterRole을 참조하는 ClusterRoleBinding을 만듭니다.virtualmachinetypes
및storageclasses
와 같은 일부 리소스가 네임스페이스되지 않기 때문에 이 ClusterRoleBinding이 필요합니다.
역할 바인딩 예시(네임스페이스 편집자)
다음 RoleBinding 및 ClusterRoleBinding 예시는 charlie
사용자 default
에게 네임스페이스의 리소스에 대한 편집자 권한을 부여합니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: edit-charlie
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: edit
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubevm-cluster-view-charlie
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubevm.cluster.view
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: User
name: charlie
네임스페이스 뷰어
사용자 또는 사용자 집합에 네임스페이스 뷰어 권한을 부여하려면 두 개의 개별 바인딩을 만들어야 합니다.
네임스페이스에 RoleBinding을 만들고 기본 Kubernetes
view
ClusterRole을 참조합니다.사전 정의된
kubevm.cluster.view
ClusterRole을 참조하는 ClusterRoleBinding을 만듭니다.
비슷한 RoleBinding 및 ClusterRoleBinding 예시는 역할 바인딩 예시(네임스페이스 편집자)를 참조하세요.
GDC용 VM 런타임에서 사용하는 리소스
다음 섹션에는 GDC용 VM 런타임에서 사용하는 리소스 테이블이 포함되어 있습니다. 이 섹션은 정보 제공 목적으로만 사용됩니다. 앞에 표시된 섹션에 설명된 일반적인 사용자 시나리오에서 사전 정의된 역할을 사용하려는 경우 이 정보는 정해진 특정 용도가 없습니다.
그러나 사전 정의된 역할을 사용하지 않으려면 이 리소스 정보에 따라 자신의 맞춤설정된 역할을 만들 수 있습니다.
Google Kubernetes Engine(GKE) Enterprise 버전 정의 리소스
사전 정의된 ClusterRole은 Google Kubernetes Engine(GKE) Enterprise 버전 정의 리소스에 대한 액세스에 중점을 둡니다. 다음 표에는 사전 정의된 각 ClusterRole에 따라 부여되는 Google Kubernetes Engine(GKE) Enterprise 버전 리소스와 해당 액세스 권한이 나와 있습니다.
리소스 | 생성됨 | 클러스터별 | kubevm.admin |
kubevm.view |
kubevm.edit |
kubevm.cluster.view |
---|---|---|---|---|---|---|
virtualmachineaccessrequests |
– | – | 전체 | 읽기 | 읽기 쓰기 겸용 | – |
virtualmachinedisks |
– | – | 전체 | 읽기 | 읽기 쓰기 겸용 | – |
virtualmachines |
– | – | 전체 | 읽기 | 읽기 쓰기 겸용 | – |
gpuallocations |
– | – | 전체 | 읽기 | 읽기 쓰기 겸용 | – |
guestenvironmentdata |
예 | – | 전체 | 읽기 | 읽기 쓰기 겸용 | – |
vmruntimes |
– | 예 | 전체 | 읽기 | 읽기 쓰기 겸용 | 읽기 |
virtualmachinetypes |
– | 예 | 전체 | 읽기 | 읽기 쓰기 겸용 | 읽기 |
vmhighavailabilitypolicies |
– | 예 | 전체 | 읽기 | 읽기 쓰기 겸용 | 읽기 |
networkinterfaces |
예 | – | 전체 | 읽기 | 읽기 쓰기 겸용 | – |
networks |
– | 예 | 전체 | 읽기 | 읽기 쓰기 겸용 | 읽기 |
KubeVirt 리소스
GDC용 VM 런타임은 KubeVirt 오픈소스 프로젝트를 기반으로 합니다. 기본적으로 KubeVirt 리소스의 권한은 Google Kubernetes Engine(GKE) Enterprise 버전 관리형 리소스와 비슷하게 기본 Kubernetes 역할에 자동으로 집계됩니다. 다음 표의 리소스 정보에 따라 자체 맞춤설정된 역할을 만듭니다.
리소스 | 생성됨 | 클러스터별 |
---|---|---|
virtualmachineinstances /console |
– | – |
virtualmachineinstances /vnc |
– | – |
virtualmachineinstances /portforward |
– | – |
virtualmachineinstances /start |
– | – |
virtualmachineinstances /stop |
– | – |
virtualmachineinstances /restart |
– | – |
virtualmachines |
예 | – |
virtualmachineinstances |
예 | – |
datavolumes |
– | – |
storageprofiles |
– | 예 |
cdiconfigs |
– | 예 |
Kubernetes 리소스
GDC용 VM 런타임 및 VM으로 작업할 경우 다음 Kubernetes 리소스에 대한 액세스를 관리해야 할 수 있습니다. 다음 표의 리소스 정보에 따라 자체 맞춤설정된 역할을 만듭니다.
리소스 | 생성됨 | 클러스터별 |
---|---|---|
pods |
예 | – |
services |
– | – |
persistentvolumeclaims |
– | – |
secrets |
– | – |
nodes |
– | 예 |
storageclasses |
– | 예 |
configmaps |
– | – |
ClusterRole YAML 예시
다음 kubectl
명령어를 사용하여 ClusterRole에 대해 YAML을 검색할 수 있습니다.
kubectl get ClusterRole CLUSTERROLE_NAME -o yaml --kubeconfig KUBECONFIG_PATH
다음을 바꿉니다.
CLUSTERROLE_NAME
: ClusterRole의 이름입니다(예:kubevm.cluster.view
).KUBECONFIG_PATH
: 클러스터의 kubeconfig 파일 경로입니다.
다음은 4개의 사전 정의된 각 ClusterRole에 대한 명령어 출력 예시입니다.
kubevm.admin
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.admin rbac.authorization.k8s.io/aggregate-to-admin: "true" name: kubevm.admin resourceVersion: "16654950" uid: 3296c279-6e85-4ea6-b250-548bf0c3e935 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - delete - create - update - patch - list - watch - deletecollection - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - delete - create - update - patch - list - watch - deletecollection
kubevm.edit
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.edit rbac.authorization.k8s.io/aggregate-to-edit: "true" name: kubevm.edit resourceVersion: "16654951" uid: 237bf9ae-b2c8-4303-94dc-e6425a2df331 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - delete - create - update - patch - list - watch - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - delete - create - update - patch - list - watch
kubevm.view
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.view rbac.authorization.k8s.io/aggregate-to-view: "true" name: kubevm.view resourceVersion: "16654953" uid: b5b54e2d-0097-4698-abbd-aeac212d0a34 rules: - apiGroups: - vm.cluster.gke.io resources: - virtualmachineaccessrequests - virtualmachinedisks - virtualmachines - gpuallocations - guestenvironmentdata - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - list - watch - apiGroups: - networking.gke.io resources: - networkinterfaces - networks verbs: - get - list - watch
kubevm.cluster.view
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: "2022-10-11T21:10:31Z" labels: kubevm: kubevm.cluster.view name: kubevm.cluster.view resourceVersion: "16654956" uid: b25dde64-67da-488b-81d2-1a08f9a4a7c1 rules: - apiGroups: - vm.cluster.gke.io resources: - vmruntimes - virtualmachinetypes - vmhighavailabilitypolicies verbs: - get - list - watch - apiGroups: - networking.gke.io resources: - networks verbs: - get - list - watch