쿠버네티스 - ServiceAccount

목차

참고

ServiceAccount

ServiceAccount 는 쿠버네티스 API 서버와 통신하고 클러스터 내의 다른 리소스에 접근하기 위한 인증 정보를 제공합니다.

ServiceAccount 는 Pod 가 Kubernetes API Server 에 인증 하기 위한 Account 입니다. 때문에 Pod 를 생성할때 ServiceAccount 를 할당해야 하며 지정하지 않을 경우 default 가 자동으로 할당됩니다.

Rule 과 RuleBinding 을 이용해 ServiceAccount 에 권한을 부여함으로써 Pod 가 다른 리소스에 접근할 수 있게 해줍니다.

ServiceAccount 는 Namespace 단위로 생성되는 리소스며 다른 Namespace 에서 정의된 ServiceAccount 를 사용할 수 없습니다.

ServiceAccount 생성하기

매니페스트 내 kind: ServiceAccount 를 사용하여 ServiceAccount를 생성할 수 있습니다.

apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
description: ServiceAccount 대한 설명
name: <ServiceAccount 이름>
namespace: <ServiceAccount 사용할 Namespace>

Token 생성

v1.22 이전 버전의 쿠버네티스 버전은 쿠버네티스 API에 액세스하기 위한 장기 자격 증명을 자동으로 생성했다. 이 이전 메커니즘은 실행 중인 파드에 마운트할 수 있는 토큰 시크릿을 생성하는 것을 기반으로 했다. 쿠버네티스 v1.27을 포함한 최신 버전에서는, API 자격 증명이 토큰리퀘스트 API를 사용하여 직접 획득되고, 예상 볼륨을 사용하여 파드에 마운트된다. 이 방법을 사용하여 획득한 토큰은 수명이 제한되어 있으며, 마운트된 파드가 삭제되면 자동으로 무효화된다.

예를 들어 만료되지 않는 토큰이 필요한 경우 서비스 어카운트 토큰 시크릿을 수동으로 생성할 수 있다. 그러나 대신 TokenRequest 서브리소스를 사용하여 API에 액세스하기 위한 토큰을 얻는 것을 권장한다.

kubectl create token <ServiceAccount Name>

Secret 생성

apiVersion: v1
kind: Secret
metadata:
name: <Secret Name>
namespace: mbc-add-dev
annotations:
kubernetes.io/service-account.name: <ServiceAccount Name>
type: kubernetes.io/service-account-token

Rule

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: kubectl-prometheus-alertmanager-role
namespace: mbc-add-dev
rules:
- apiGroups:
- apps
resourceNames:
- prometheus-alertmanager
- alertmanager
resources:
- statefulsets
- statefulsets/scale
verbs:
- get
- patch
- list
- watch
- update

RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubectl-prometheus-alertmanager-rolebinding
namespace: mbc-add-dev
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: <Role Name>
subjects:
- kind: ServiceAccount
name: <Service Account Name>
namespace: mbc-add-dev
Share