728x90
Kubernetes ServiceAccount로 kubeconfig 파일 생성
kubernetes에서 ServiceAccount를 생성하여, kubeconfig 파일을 생성하는 방법입니다. ServiceAccount를 사용하여 kubernetes 클러스터 외부에서 접근시 활용할 수 있습니다.
ServiceAccount 생성
아래의 명령어를 사용하여 ServiceAccount를 생성합니다. ServiceAccount를 생성하면 service-account-token이 secret에 생성됩니다.
# serviceaccount 생성
$ kubectl create sa test-sa -n default
# serviceaccount 조회
$ ktest get sa test-sa -n default -o yaml
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: "2022-09-19T23:55:11Z"
name: test-sa
namespace: default
resourceVersion: "196396539"
uid: d0d43af0-e222-4ec3-83d8-2e472a696bad
secrets:
# serviceaccount에 할당된 token을 가진 secret입니다.
- name: test-sa-token-79rvs
RBAC 권한설정
kubernetes에서 다른 리소스에 접근하기위해서 권한설정을 해주셔야합니다. 아래의 예제는 cluster-admin 권한을 설정하였습니다. 예제작성을위해 cluster-admin권한을 설정하였지만, 최소권한으로 설정하는걸 추천드립니다.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: test-sa-clusterrolebinding
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: test-sa
namespace: default
kubeconfig 파일 생성
아래의 스크립트를 저장해서 실행하면 kubeconfig 파일이 생성됩니다.
#!/bin/bash
API_SERVER_URL=$1
NAMESPACE=$2
SERVICEACCOUNT=$3
if [ -z "${API_SERVER_URL}" ]; then
echo "requried API_SERVER_URL"
echo "usage: make_kubeconfig.sh API_SERVER_URL NAMESPACE SERVICEACCOUNT"
exit 1
fi
if [ -z "${NAMESPACE}" ]; then
echo "requried NAMESPACE"
echo "usage: make_kubeconfig.sh API_SERVER_URL NAMESPACE SERVICEACCOUNT"
exit 1
fi
if [ -z "${SERVICEACCOUNT}" ]; then
echo "requried SERVICEACCOUNT"
echo "usage: make_kubeconfig.sh API_SERVER_URL NAMESPACE SERVICEACCOUNT"
exit 1
fi
SECRET_NAME=$(kubectl -n $NAMESPACE get serviceaccount $SERVICEACCOUNT -o jsonpath='{.secrets[].name}')
CA=$(kubectl -n $NAMESPACE get secret $SECRET_NAME -o jsonpath='{.data.ca\.crt}')
TOKEN=$(kubectl -n $NAMESPACE get secret $SECRET_NAME -o jsonpath='{.data.token}' | base64 --decode)
echo "
apiVersion: v1
kind: Config
clusters:
- name: default-cluster
cluster:
certificate-authority-data: ${CA}
server: ${API_SERVER_URL}
contexts:
- name: default-context
context:
cluster: default-cluster
namespace: ${NAMESPACE}
user: ${SERVICEACCOUNT}
current-context: default-context
users:
- name: ${SERVICEACCOUNT}
user:
token: ${TOKEN}
"
728x90
'Kubernetes' 카테고리의 다른 글
Amazon EFS CSI Driver (0) | 2022.09.23 |
---|---|
Kubernetes RBAC 알아보기 (0) | 2022.09.22 |
CoreDNS NXDOMAIN 오류 해결 (0) | 2022.09.21 |
Resizing StatefulSet Persistent Volumes with zero downtime (2) | 2022.09.20 |
Amazon EBS CSI driver (4) | 2022.09.19 |