본문 바로가기

카테고리 없음

RBAC

root@k8s-master-00:~# kubectl api-resources
NAME                              SHORTNAMES                                      APIVERSION                        NAMESPACED   KIND
bindings                                                                          v1                                true         Binding
componentstatuses                 cs                                              v1                                false        ComponentStatus
configmaps                        cm                                              v1                                true         ConfigMap
endpoints                         ep                                              v1                                true         Endpoints
events                            ev                                              v1                                true         Event
limitranges                       limits                                          v1                                true         LimitRange
namespaces                        ns                                              v1                                false        Namespace
nodes                             no                                              v1                                false        Node
persistentvolumeclaims            pvc                                             v1                                true         PersistentVolumeClaim
persistentvolumes                 pv                                              v1                                false        PersistentVolume
pods                              po                                              v1                                true         Pod
podtemplates                                                                      v1                                true         PodTemplate
replicationcontrollers            rc                                              v1                                true         ReplicationController
resourcequotas                    quota                                           v1                                true         ResourceQuota
secrets                                                                           v1                                true         Secret
serviceaccounts                   sa                                              v1                                true         ServiceAccount
services                          svc                                             v1                                true         Service
mutatingwebhookconfigurations                                                     admissionregistration.k8s.io/v1   false        MutatingWebhookConfiguration
validatingwebhookconfigurations                                                   admissionregistration.k8s.io/v1   false        ValidatingWebhookConfiguration
customresourcedefinitions         crd,crds                                        apiextensions.k8s.io/v1           false        CustomResourceDefinition
apiservices                                                                       apiregistration.k8s.io/v1         false        APIService
controllerrevisions                                                               apps/v1                           true         ControllerRevision
daemonsets                        ds                                              apps/v1                           true         DaemonSet
deployments                       deploy                                          apps/v1                           true         Deployment
replicasets                       rs                                              apps/v1                           true         ReplicaSet
statefulsets                      sts                                             apps/v1                           true         StatefulSet
selfsubjectreviews                                                                authentication.k8s.io/v1          false        SelfSubjectReview
tokenreviews                                                                      authentication.k8s.io/v1          false        TokenReview
localsubjectaccessreviews                                                         authorization.k8s.io/v1           true         LocalSubjectAccessReview
selfsubjectaccessreviews                                                          authorization.k8s.io/v1           false        SelfSubjectAccessReview
selfsubjectrulesreviews                                                           authorization.k8s.io/v1           false        SelfSubjectRulesReview
subjectaccessreviews                                                              authorization.k8s.io/v1           false        SubjectAccessReview
horizontalpodautoscalers          hpa                                             autoscaling/v2                    true         HorizontalPodAutoscaler
cronjobs                          cj                                              batch/v1                          true         CronJob
jobs                                                                              batch/v1                          true         Job
certificatesigningrequests        csr                                             certificates.k8s.io/v1            false        CertificateSigningRequest
leases                                                                            coordination.k8s.io/v1            true         Lease
bgpconfigurations                                                                 crd.projectcalico.org/v1          false        BGPConfiguration
bgpfilters                                                                        crd.projectcalico.org/v1          false        BGPFilter
bgppeers                                                                          crd.projectcalico.org/v1          false        BGPPeer
blockaffinities                                                                   crd.projectcalico.org/v1          false        BlockAffinity
caliconodestatuses                                                                crd.projectcalico.org/v1          false        CalicoNodeStatus
clusterinformations                                                               crd.projectcalico.org/v1          false        ClusterInformation
felixconfigurations                                                               crd.projectcalico.org/v1          false        FelixConfiguration
globalnetworkpolicies                                                             crd.projectcalico.org/v1          false        GlobalNetworkPolicy
globalnetworksets                                                                 crd.projectcalico.org/v1          false        GlobalNetworkSet
hostendpoints                                                                     crd.projectcalico.org/v1          false        HostEndpoint
ipamblocks                                                                        crd.projectcalico.org/v1          false        IPAMBlock
ipamconfigs                                                                       crd.projectcalico.org/v1          false        IPAMConfig
ipamhandles                                                                       crd.projectcalico.org/v1          false        IPAMHandle
ippools                                                                           crd.projectcalico.org/v1          false        IPPool
ipreservations                                                                    crd.projectcalico.org/v1          false        IPReservation
kubecontrollersconfigurations                                                     crd.projectcalico.org/v1          false        KubeControllersConfiguration
networkpolicies                                                                   crd.projectcalico.org/v1          true         NetworkPolicy
networksets                                                                       crd.projectcalico.org/v1          true         NetworkSet
endpointslices                                                                    discovery.k8s.io/v1               true         EndpointSlice
events                            ev                                              events.k8s.io/v1                  true         Event
flowschemas                                                                       flowcontrol.apiserver.k8s.io/v1   false        FlowSchema
prioritylevelconfigurations                                                       flowcontrol.apiserver.k8s.io/v1   false        PriorityLevelConfiguration
ingressclasses                                                                    networking.k8s.io/v1              false        IngressClass
ingresses                         ing                                             networking.k8s.io/v1              true         Ingress
networkpolicies                   netpol                                          networking.k8s.io/v1              true         NetworkPolicy
runtimeclasses                                                                    node.k8s.io/v1                    false        RuntimeClass
apiservers                                                                        operator.tigera.io/v1             false        APIServer
imagesets                                                                         operator.tigera.io/v1             false        ImageSet
installations                                                                     operator.tigera.io/v1             false        Installation
tigerastatuses                                                                    operator.tigera.io/v1             false        TigeraStatus
poddisruptionbudgets              pdb                                             policy/v1                         true         PodDisruptionBudget
bgpconfigurations                 bgpconfig,bgpconfigs                            projectcalico.org/v3              false        BGPConfiguration
bgpfilters                                                                        projectcalico.org/v3              false        BGPFilter
bgppeers                                                                          projectcalico.org/v3              false        BGPPeer
blockaffinities                   blockaffinity,affinity,affinities               projectcalico.org/v3              false        BlockAffinity
caliconodestatuses                caliconodestatus                                projectcalico.org/v3              false        CalicoNodeStatus
clusterinformations               clusterinfo                                     projectcalico.org/v3              false        ClusterInformation
felixconfigurations               felixconfig,felixconfigs                        projectcalico.org/v3              false        FelixConfiguration
globalnetworkpolicies             gnp,cgnp,calicoglobalnetworkpolicies            projectcalico.org/v3              false        GlobalNetworkPolicy
globalnetworksets                                                                 projectcalico.org/v3              false        GlobalNetworkSet
hostendpoints                     hep,heps                                        projectcalico.org/v3              false        HostEndpoint
ipamconfigurations                ipamconfig                                      projectcalico.org/v3              false        IPAMConfiguration
ippools                                                                           projectcalico.org/v3              false        IPPool
ipreservations                                                                    projectcalico.org/v3              false        IPReservation
kubecontrollersconfigurations                                                     projectcalico.org/v3              false        KubeControllersConfiguration
networkpolicies                   cnp,caliconetworkpolicy,caliconetworkpolicies   projectcalico.org/v3              true         NetworkPolicy
networksets                       netsets                                         projectcalico.org/v3              true         NetworkSet
profiles                                                                          projectcalico.org/v3              false        Profile
clusterrolebindings                                                               rbac.authorization.k8s.io/v1      false        ClusterRoleBinding
clusterroles                                                                      rbac.authorization.k8s.io/v1      false        ClusterRole
rolebindings                                                                      rbac.authorization.k8s.io/v1      true         RoleBinding
roles                                                                             rbac.authorization.k8s.io/v1      true         Role
priorityclasses                   pc                                              scheduling.k8s.io/v1              false        PriorityClass
csidrivers                                                                        storage.k8s.io/v1                 false        CSIDriver
csinodes                                                                          storage.k8s.io/v1                 false        CSINode
csistoragecapacities                                                              storage.k8s.io/v1                 true         CSIStorageCapacity
storageclasses                    sc                                              storage.k8s.io/v1                 false        StorageClass
volumeattachments                                                                 storage.k8s.io/v1                 false        VolumeAttachment
root@k8s-master-00:~# kubectl get role -A
NAMESPACE     NAME                                             CREATED AT
kube-public   kubeadm:bootstrap-signer-clusterinfo             2024-05-24T01:02:45Z
kube-public   system:controller:bootstrap-signer               2024-05-24T01:02:43Z
kube-system   extension-apiserver-authentication-reader        2024-05-24T01:02:43Z
kube-system   kube-proxy                                       2024-05-24T01:02:45Z
kube-system   kubeadm:kubelet-config                           2024-05-24T01:02:43Z
kube-system   kubeadm:nodes-kubeadm-config                     2024-05-24T01:02:43Z
kube-system   system::leader-locking-kube-controller-manager   2024-05-24T01:02:43Z
kube-system   system::leader-locking-kube-scheduler            2024-05-24T01:02:43Z
kube-system   system:controller:bootstrap-signer               2024-05-24T01:02:43Z
kube-system   system:controller:cloud-provider                 2024-05-24T01:02:43Z
kube-system   system:controller:token-cleaner                  2024-05-24T01:02:43Z

root@k8s-master-00:~# kubectl get rolebinding -A
NAMESPACE     NAME                                                ROLE                                                  AGE
kube-public   kubeadm:bootstrap-signer-clusterinfo                Role/kubeadm:bootstrap-signer-clusterinfo             6d4h
kube-public   system:controller:bootstrap-signer                  Role/system:controller:bootstrap-signer               6d4h
kube-system   calico-apiserver-auth-reader                        Role/extension-apiserver-authentication-reader        6d4h
kube-system   kube-proxy                                          Role/kube-proxy                                       6d4h
kube-system   kubeadm:kubelet-config                              Role/kubeadm:kubelet-config                           6d4h
kube-system   kubeadm:nodes-kubeadm-config                        Role/kubeadm:nodes-kubeadm-config                     6d4h
kube-system   system::extension-apiserver-authentication-reader   Role/extension-apiserver-authentication-reader        6d4h
kube-system   system::leader-locking-kube-controller-manager      Role/system::leader-locking-kube-controller-manager   6d4h
kube-system   system::leader-locking-kube-scheduler               Role/system::leader-locking-kube-scheduler            6d4h
kube-system   system:controller:bootstrap-signer                  Role/system:controller:bootstrap-signer               6d4h
kube-system   system:controller:cloud-provider                    Role/system:controller:cloud-provider                 6d4h
kube-system   system:controller:token-cleaner                     Role/system:controller:token-cleaner                  6d4h

root@k8s-master-00:~# kubectl describe rolebinding system::leader-locking-kube-scheduler -n kube-system
Name:         system::leader-locking-kube-scheduler
Labels:       kubernetes.io/bootstrapping=rbac-defaults
Annotations:  rbac.authorization.kubernetes.io/autoupdate: true
Role:
  Kind:  Role
  Name:  system::leader-locking-kube-scheduler
Subjects:
  Kind            Name                   Namespace
  ----            ----                   ---------
  User            system:kube-scheduler
  ServiceAccount  kube-scheduler         kube-system

root@k8s-master-00:~# kubectl describe role system::leader-locking-kube-scheduler -n kube-system
Name:         system::leader-locking-kube-scheduler
Labels:       kubernetes.io/bootstrapping=rbac-defaults
Annotations:  rbac.authorization.kubernetes.io/autoupdate: true
PolicyRule:
  Resources   Non-Resource URLs  Resource Names    Verbs
  ---------   -----------------  --------------    -----
  configmaps  []                 [kube-scheduler]  [get update]
  configmaps  []                 []                [watch]
--namespace 생성
root@k8s-master-00:~# kubectl create namespace account
namespace/account created
root@k8s-master-00:~# kubectl get ns
NAME               STATUS   AGE
account            Active   25s
calico-apiserver   Active   6d4h
calico-system      Active   6d4h
default            Active   6d5h
kube-node-lease    Active   6d5h
kube-public        Active   6d5h
kube-system        Active   6d5h
tigera-operator    Active   6d4h

--서비스 어카운트 생성 
-- api-service-account 라는 서비스어카운트를 account 네임스페이스에 생성
root@k8s-master-00:~# kubectl create serviceaccount api-service-account -n account
serviceaccount/api-service-account created

root@k8s-master-00:~# kubectl get serviceaccount
NAME      SECRETS   AGE
default   0         6d5h

root@k8s-master-00:~# kubectl get serviceaccount -n account
NAME                  SECRETS   AGE
api-service-account   0         52s
default               0         2m5s

--클러스터 역할(role) 생성 : 특정 네임스페이스에 한정된 정책 
root@k8s-master-00:~# vim api-cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: api-cluster-role
  namespace: account  # 앞에서 정의한 네임스페이스 지정
rules:   
  - apiGroups:        # 역할이 사용할 API 그룹들
        - ""
        - apps
        - autoscaling
        - batch
        - extensions
        - policy
        - rbac.authorization.k8s.io
    resources:        # 클러스터의 어떤 리소스(예, 파드, 볼륨 등)에 접근가능한지 지정
      - pods
      - componentstatuses
      - configmaps
      - daemonsets
      - deployments
      - events
      - endpoints
      - horizontalpodautoscalers
      - ingress
      - jobs
      - limitranges
      - namespaces
      - nodes
      - pods
      - persistentvolumes
      - persistentvolumeclaims
      - resourcequotas
      - replicasets
      - replicationcontrollers
      - serviceaccounts
      - services
    verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]    # 리소스에 접속해서 어떤 것들을 수행할 수 있을지에 대한 행위(verbs)를 지정
    
root@k8s-master-00:~# kubectl apply -f api-cluster-role.yaml
clusterrole.rbac.authorization.k8s.io/api-cluster-role created

--클러스터 역할 바인딩:  역할이 특정 네임스페이스에 한정된 정책을 따르도록 적용
root@k8s-master-00:~# vim api-cluster-role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: api-cluster-role-binding
subjects:    # 주체는 서비스 어카운트입니다
- namespace: account
  kind: ServiceAccount
  name: api-service-account
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: api-cluster-role    # api-cluster-role을 api-service-account에 매핑

root@k8s-master-00:~# kubectl apply -f api-cluster-role-binding.yaml
clusterrolebinding.rbac.authorization.k8s.io/api-cluster-role-binding created

--서비스 계정 접속 검증
root@k8s-master-00:~# kubectl auth can-i get pods --as=system:serviceaccount:account:api-service-account
yes
root@k8s-master-00:~# kubectl auth can-i get deploy --as=system:serviceaccount:account:api-service-account
yes

--pod 주석처리 후 확인
root@k8s-master-00:~# vim api-cluster-role.yaml
      #- pods
      - componentstatuses
      - configmaps
      - daemonsets
      - deployments
      - events
      - endpoints
      - horizontalpodautoscalers
      - ingress
      - jobs
      - limitranges
      - namespaces
      - nodes
      #- pods
~~

root@k8s-master-00:~# kubectl apply -f api-cluster-role.yaml
clusterrole.rbac.authorization.k8s.io/api-cluster-role configured
root@k8s-master-00:~# kubectl auth can-i get pods --as=system:serviceaccount:account:api-service-account
no
root@k8s-master-00:~# kubectl auth can-i get deploy --as=system:serviceaccount:account:api-service-account
yes