728x90

매일 매일 하지 않으면 다 까먹는게 k8s인 것 같습니다. 
여느 오픈소스들과 마찬가지로 마이너버전 업데이트가 이루어지더라도
여러가지 변경되는 점들이 워낙 많기 때문일 것 같습니다.

그 중에서도! 
ServiceAccount를 생성했을 때 같이 생성되던 Token이 만들어지지 않는 것은
분명 꼼꼼히 이것저것 살피지 않았다면 빠지기 쉬운 함정인 것 같습니다 ㅠㅠ

한 줄 요약 : k8s 1.24 버전 이후부터는 ServiceAccount 생성시 자동으로 Token이 생성되지 않습니다!

 

네, 1.24 버전 이후의 k8s를 사용한 클러스터로 작업중이라면 
ServiceAccount와 함께 수동으로 Token을 위한 Secret을 생성해야 합니다. 
예를 들어 보겠습니다. 

apiVersion: v1
kind: ServiceAccount
metadata:
  namespace: default
  name: drone-bot

1.24 버전까지는 위와 같이 ServiceAccount를 생성하면 
`drone-bot-token-j13b7`와 같은 스타일의 토큰이 자동으로 생성되었습니다. 

1.24 이후 버전부터는 보안 강화를 위해 토큰을 자동으로 생성하지 않습니다. 
따라서 아래와 같이 별도로 Secret 오브젝트를 생성해 줘야 합니다. 

apiVersion: v1
kind: Secret
metadata:
  name: drone-bot-secret
  namespace: default
  annotations:
    kubernetes.io/service-account.name: drone-bot
type: kubernetes.io/service-account-token

이렇게 하고나면 ServiceAccount에 대한 Token을 획득할 수 있습니다. 

% k get secret drone-bot-secret -n default
NAME               TYPE                                  DATA   AGE
drone-bot-secret   kubernetes.io/service-account-token   3      15s

% k get secret drone-bot-secret -n default -o yaml
apiVersion: v1
data:
  ca.crt: LS0tLS1CRUdJTi...
  namespace: ...
  token: ZX...
...

왜 자동으로 Token이 생성되지 않는지 한참 헤메였는데...
알게 모르게 k8s 버전이 1.25로 바뀌었는데 그걸 모르고 클러스터 만들고 삽질을 했었네요...
여러분은 삽질하지 마시라고 공유해 드립니다!

 

728x90

+ Recent posts