1. 서비스 어카운트 생성
    $ sudo kubectl create serviceaccount registry -n aipub
    serviceaccount/registry created
    
  2. 클러스터 역할 생성

    먼저 clusterrole.yaml 파일을 생성하고 다음의 내용을 넣습니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: registry
rules:
  - apiGroups:
      - '*'
    resources:
      - '*'
    verbs:
      - 'get'
      - 'watch'
      - 'list'
      - 'create'
      - 'update'
      - 'patch'
      - 'delete'

그리고 명령어를 이용해 클러스터 역할을 생성합니다.

$ sudo kubectl apply -f clusterrole.yaml
clusterrole.rbac.authorization.k8s.io/registry created
  1. 클러스터 역할 바인딩

clusterrolebinding.yaml 파일을 생성하고 다음의 내용을 넣습니다:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: registry
subjects:
  - kind: ServiceAccount
    name: registry
    namespace: aipub
roleRef:
  kind: ClusterRole
  name: registry
  apiGroup: rbac.authorization.k8s.io

그리고 명령어를 이용해 클러스터 역할을 바인딩합니다.

$ kubectl apply -f clusterrolebinding.yaml
clusterrolebinding.rbac.authorization.k8s.io/registry created
  1. 서비스 어카운트를 사용하여 파드 배포

아래는 예시 Deployment입니다. serviceAccountName: registry를 작성합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: registry-deployment
  labels:
    app: registry
spec:
  replicas: 1
  selector:
    matchLabels:
      app: registry
  template:
    metadata:
      labels:
        app: registry
    spec:
      serviceAccountName: registry
      containers:
      - name: registry-container
        image: <your image>
  1. 파이썬 클라이언트에서 서비스 어카운트의 토큰을 사용해 인증

파이썬 쿠버네티스 클라이언트에서는 쿠버네티스 파일 시스템에 저장된 서비스 어카운트의 토큰을 읽어서 인증할 수 있습니다.

from kubernetes import client as k8s_client

config = k8s_client.Configuration()   
config.api_key["authorization"] = open("/var/run/secrets/kubernetes.io/serviceaccount/token").read()

추가로 파드 내에서 쿠버네티스 API에 접근하기 위한 방법 중에 REST API에 직접 접근하는 방법이 있습니다. default 네임스페이스에서 kubernetes 서비스를 통해 접근 가능합니다.

또한 인증서 번들은 각 컨테이너의 파일시스템 트리의 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt에 배치됩니다. 공식문서를 참고하면 해당 내용과 권장사항을 참고할 수 있습니다.

파드 내에서 쿠버네티스 API에 접근

class K8sHandler:
    def __init__(self):
        config = client.Configuration()
        config.host = "https://kubernetes.default"
        config.ssl_ca_cert = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
        config.verify_ssl = True
        config.api_key["authorization"] = open("/var/run/secrets/kubernetes.io/serviceaccount/token").read()
        config.api_key_prefix["authorization"] = "Bearer"
  1. 토큰 파일 확인

쿠버네티스가 설치된 커맨드라인에서 아래와 같이 토큰 파일을 확인할 수 있다.

$ sudo kubectl exec -it lyj-remote-66947fbfff-7bzwx -n aipub -- /bin/bash

root@lyj-remote-66947fbfff-7bzwx:/# cat /var/run/secrets/kubernetes.io/serviceaccount/token
eyJhbGciOiJSUzI1NiIsImtpZCI6IjA2SDZnUzUybFRuR2RYdHRaSzlnUldMRlJHZThTWDNPdFZRUk5BZFA5bVkifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNzE5MDM4NTU3LCJpYXQiOjE2ODc1MDI1NTcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuY...

Source