서비스 어카운트와 클러스터 역할 설정하여 쿠버네티스 인증하기
- 서비스 어카운트 생성
$ sudo kubectl create serviceaccount registry -n aipub serviceaccount/registry created
-
클러스터 역할 생성
먼저
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
- 클러스터 역할 바인딩
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
- 서비스 어카운트를 사용하여 파드 배포
아래는 예시 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>
- 파이썬 클라이언트에서 서비스 어카운트의 토큰을 사용해 인증
파이썬 쿠버네티스 클라이언트에서는 쿠버네티스 파일 시스템에 저장된 서비스 어카운트의 토큰을 읽어서 인증할 수 있습니다.
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에 배치됩니다. 공식문서를 참고하면 해당 내용과 권장사항을 참고할 수 있습니다.
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"
- 토큰 파일 확인
쿠버네티스가 설치된 커맨드라인에서 아래와 같이 토큰 파일을 확인할 수 있다.
$ 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...