KuberNetes/졸과

kube-apiserver 사용해보기

브리오 2024. 7. 1. 02:13

API 서버 호출

kubectl cluster-info

root@k8s-master:~# kubectl cluster-info
Kubernetes control plane is running at https://10.178.0.2:6443
CoreDNS is running at https://10.178.0.2:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

 

certificate-authority-data

아무런 설정없이 crul IP 이렇게 하면 에러가 발생한다API서버가 사용자의 서버에서 사용하는 인증서가 공식 CA가 아님을 확인하기 때문이다

kubeconfig에서 자체 CA를 제공하기 때문에 이를 발급받아 접근해야 한다

그것을 kubeconfig의 certificate-authority-data property라고 한다

사용자 인증

CA가 있다 하더라도 쿠버네티스  API서버는 기본적으로 사용자 인증을 진행하기 때문에 권한이 필요하다

JWT

일반적으로 security를 설정하기 가장 간단한 방법은 JWT토큰을 사용하는것이다

JWT란 서버가 서명한 JSON object로써, JWT를 가지고 있다는 말은 서버가 인증한 비밀번호를 가지는 것이다.

 

계속 anonymous인 경우

kubectl get serviceaccount default
#serviceaccount 확인하고

TOKEN=$(kubectl get secret $(kubectl get sa default \
    -ojsonpath="{.secrets[0].name}") \
    -ojsonpath="{.data.token}" | base64 -d)
echo $TOKEN
#토큰 설정하고

curl -k -H "Authorization: Bearer $TOKEN" ...
#토큰 값을 이용하여 API서버에 호출한다

이렇게 했는데도 계속 serviceaccount:anonymous라고 표시되었다

그 이유가 뭘까 했는데

root@k8s-master:~# kubectl get serviceaccount default

NAME SECRETS AGE

default 0 4h48m

 

이렇게 secret이 존재하지 않았다

kubernetes 1.24이후에는 자동으로 secret이 생성되지 않는다

SecretAccount에는 일반적으로 토큰을 보관하는 Secret이 있어야 한다

https://devocean.sk.com/blog/techBoardDetail.do?ID=165215&boardType=techBlog

default에 맞게 변형필요

secret 생성, role 바인딩, secretaccount와 연동 까지 필요

토큰 받아오고 다시 권한 부여

TOKEN=$(kubectl get secret $(kubectl get sa default \
    -ojsonpath="{.secrets[0].name}") \
    -ojsonpath="{.data.token}" | base64 -d)
echo $TOKEN

kubectl create clusterrolebinding default-cluster-admin --clusterrole cluster-admin --serviceaccount default:default

curl -k -H "Authorization: Bearer $TOKEN" https:

API 사용

curl을 이용해서 열심히 사용하자

끝!

 

ref

https://coffeewhale.com/apiserver

 

쿠버네티스 API서버는 정말 그냥 API서버라구욧

쿠버네티스 API서버에 대해서 한층 더 가까워지는 시간을 가져봅시다.

coffeewhale.com