쿠버네티스(Kubernetes, 이하 k8s)는 컨테이너 오케스트레이션 플랫폼으로서 인기를 얻고 있는데, 그 이유는 이 플랫폼이 애플리케이션 배포, 스케일링 및 관리에 많은 편의성을 제공하기 때문입니다. 이 글에서는 k8s에서 중요한 요소 중 하나인 서비스 어카운트(ServiceAccounts)에 대해 상세하게 살펴보겠습니다.
서비스 어카운트는 k8s에서 애플리케이션의 인증 및 권한 관리를 담당하는 객체입니다. 쿠버네티스 클러스터 내에서 실행되는 애플리케이션은 기본적으로 API 서버와 상호 작용해야 하는데, 이 때 서비스 어카운트를 사용해 API에 접근 권한을 부여받습니다. 서비스 어카운트는 애플리케이션에 필요한 인증 및 권한 관리를 효과적으로 수행하며, 보안상의 이슈를 최소화할 수 있습니다.
서비스 어카운트를 생성하는 가장 간단한 방법은 kubectl 명령어를 사용하는 것입니다. 다음 명령어를 사용하면 새로운 서비스 어카운트를 생성할 수 있습니다.
kubectl create serviceaccount [서비스어카운트명]
서비스 어카운트가 생성되면, 이에 적절한 권한을 부여하기 위해 롤(Role) 또는 클러스터롤(ClusterRole)을 바인딩해야 합니다. 롤 바인딩(RoleBinding)을 사용하여 특정 네임스페이스에 권한을 부여하거나, 클러스터롤 바인딩(ClusterRoleBinding)을 사용하여 전체 클러스터에 권한을 부여할 수 있습니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: [롤바인딩명]
namespace: [네임스페이스]
subjects:
- kind: ServiceAccount
name: [서비스어카운트명]
namespace: [네임스페이스]
roleRef:
kind: Role
name: [롤 이름]
apiGroup: rbac.authorization.k8s.io
서비스 어카운트를 사용하려면, 파드 매니페스트에서 spec.template.spec.serviceAccountName 필드에 서비스 어카운트 이름을 지정해야 합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
serviceAccountName: [서비스어카운트명]
containers:
- name: my-container
image: my-image
서비스 어카운트에 대한 정보를 확인하거나 수정하려면, kubectl 명령어를 사용할 수 있습니다.
kubectl get serviceaccounts
kubectl describe serviceaccount [서비스어카운트명]
kubectl edit serviceaccount [서비스어카운트명]
kubectl delete serviceaccount [서비스어카운트명]