Certificated 도전/CKAD- Kubernetes

[CKAD] Service Account도 한 문제는 나온다고 함!

지추월자 2025. 1. 24. 11:50
반응형

Kubernetes에서 Service Account는 Pod가 API 서버와 상호작용할 때 사용하는 권한과 인증 정보를 제공하는 객체입니다. 여기서 API서버는 컨트롤플레인의 API서버라는 것을 잊지마세요. 참고로 Kubernetes에서 모든 작업은 API 서버를 통해 수행되며, 이는 클러스터의 "중앙 허브" 역할하는 것이 API서버죠! 


1. Service Account란?

  • 기본적으로 Pod는 Kubernetes API 서버와 상호작용할 때 인증 정보를 요구합니다.
  • Service Account는 Pod가 Kubernetes 리소스에 접근할 수 있도록 API 호출 권한을 제공하는 데 사용됩니다.
  • 각 Service Account는 토큰(secret)을 포함하며, 이 토큰은 Pod 내에서 API 요청 시 사용됩니다.

2. 기본 Service Account

  • Kubernetes는 각 네임스페이스에 기본적으로 default라는 Service Account를 생성합니다.
  • 만약 Pod에 Service Account를 지정하지 않으면, 기본적으로 default Service Account가 자동으로 연결됩니다.
kubectl get serviceaccounts -n <namespace>

3. Service Account 생성

Service Account를 수동으로 생성하려면 다음과 같이 YAML 파일을 작성합니다.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: my-service-account
  namespace: default

생성 명령:

kubectl apply -f service-account.yaml

4. Pod에 Service Account 할당

Pod에서 특정 Service Account를 사용하려면 serviceAccountName 필드를 설정해야 합니다.

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  namespace: default
spec:
  serviceAccountName: my-service-account
  containers:
  - name: my-container
    image: nginx

5. Service Account와 RBAC

Service Account는 RBAC(Role-Based Access Control)와 함께 사용되어 권한을 세분화합니다.

  • Role/ClusterRole: 리소스에 대한 접근 권한 정의.
  • RoleBinding/ClusterRoleBinding: Role을 Service Account에 연결.

예: 특정 네임스페이스에서 Pod 조회 권한 부여

  1. Role 정의:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
  1. RoleBinding 생성:
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods-binding
  namespace: default
subjects:
- kind: ServiceAccount
  name: my-service-account
  namespace: default
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io

6. Service Account의 Secret 확인

Service Account는 Pod에 자동으로 마운트된 Secret을 통해 인증 정보를 제공합니다.

  1. Secret 확인:
kubectl get secret -n default
  1. 특정 Service Account에 연결된 Secret 찾기:
kubectl describe serviceaccount my-service-account -n default
  1. Secret 내용 확인:
kubectl get secret <secret-name> -o yaml

Pod에서 특정 Service Account를 사용하려면 serviceAccountName 필드를 설정해야 한다는 포인트 기억하고 있기! 

반응형