개요
k8s의 설정 파일인 kubeconfig의 구조 분석 및 필요 성을 알아보겠습니다.
파일의 위치
kubeadmn으로 설치를 하였다면 kubeconfig파일의 위치는 아래와 같습니다.
원본 파일
/etc/kubernetes/admin.conf
복사된 파일
kubectl은 기본적으로 아래 경로에있는 설정 파일을 사용합니다. 그래서 kubeadm로 설치시 마지막에 원본파일을 아래 경로에 복사하게 합니다.
$HOME/.kube/config
kubeconfig 목적
kubectl이 다양한 사용자 및 cluster의 조합을 사용하여 k8s 접근을 위해서 사용하는 설정 파일입니다.
kubeconfig 주요 정보
cluster 연결 정보 제공
cluster의 API 서버 주소 및 CA 인증서 정보를 제공합니다.
인증 정보 제공
cluster에 접근하기 위한 사용자의 인증 정보 (예: 인증서, 토큰, 사용자명/비밀번호)를 저장합니다.
context 관리
여러 cluster 및 사용자에 대한 접근을 관리하며, 어떤 cluster를 어떤 사용자의 인증 정보로 접근할지 결정합니다.
기본 설정 정의
현재 사용 중인 cluster, 사용자, 네임스페이스 등을 지정하여 kubectl 명령어의 기본 동작을 정의합니다.
kubeconfig 구조
아래 명령을 사용하면 kubeconfig 파일의 내용을 간약하게 볼 수 있습니다.
kubectl config view
$HOME/.kube/config 파일의 내용에서 인증서 관련 정보만 요약하여 보여주는 정보입니다.
파일 내용
cat ~/.kube/config 파일 내용
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: DATA+OMITTED
server: https://192.168.0.26:6443
name: kubernetes
contexts:
- context:
cluster: kubernetes
namespace: default
user: kubernetes-admin
name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
user:
client-certificate-data: REDACTED
client-key-data: REDACTED
파일 주요 내용 분석
clusters
cluster에 대한 연결 정보를 포함합니다.
name
cluster의 이름
server
cluster의 API 서버 주소.
certificate-authority-data
cluster의 CA base64 정보
/etc/kubernetes/pki/ca.crt 를 base64로 encoding한 값입니다.
base64 -w0 /etc/kubernetes/pki/ca.crt
contexts
cluster와 사용자의 조합을 포함하여 `kubectl`이 어떻게 동작해야 하는지를 정의합니다.
name
context의 이름.
cluster
사용할 cluster의 이름.
user
사용할 사용자의 이름.
namespace
기본 네임스페이스.
current-context
현재 사용 중인 context의 이름. 이 context는 `kubectl` 명령어를 실행할 때 기본적으로 사용됩니다.
users
cluster에 접근하기 위한 사용자의 인증 정보를 포함합니다.
name
사용자의 이름.
client-certificate-data
cluster의 CA base64 정보
/etc/kubernetes/pki/ca.crt 를 base64로 encoding한 값입니다.
base64 -w0 /etc/kubernetes/pki/ca.crt
client-key
키의 경로.
token
bearer token.
username
기본 인증에 사용되는 사용자명
password
기본 인증에 사용되는 비밀번호.
이 외에도 `kubeconfig` 파일에는 기타 설정과 확장 가능한 기능을 위한 여러 옵션이 포함될 수 있습니다. 파일은 YAML 형식으로 작성되며, 한 개 이상의 `kubeconfig` 파일을 병합하여 사용할 수도 있습니다.
kubeconfig 파일 내용 간의 관계
unser와 cluster 관계
kubeconfig 파일에서 cluster와 user의 관계는 context가 연결해 줍니다.
context - name을 보면 연결관계를 알 수 있습니다.
{user-name}@{cluster name}
관계입니다.
그리고 현재 용 중인 context는 current-context로 확인이 가능합니다.
namespace 지정
context를 통해서 사용하려는 기본 namespace 또한 지정이 가능합니다.
kubeconfig 관리 명령어
kubeconfig 파일은 kubectl을 통하여 관리가 가능합니다. 다음은 kubeconfig관련하여 유용한 명령어입니다.
사용 중인 kubeconfig 파일 확인
kubectl config view
현재 context의 cluseter와 user 확인
kubectl config current-context
모든 context 목록 확인
kubectl config get-contexts
특정 context로 전환
kubectl config use-context [CONTEXT_NAME]
새로운 context추가
kubectl config set-context [CONTEXT_NAME] --cluster=[CLUSTER_NAME] --user=[USER_NAME] --namespace=[NAMESPACE]
context 이름 변경
kubectl config rename-context [OLD_NAME] [NEW_NAME]
context 삭제
kubectl config delete-context [CONTEXT_NAME]
cluster 정보 설정
kubectl config set-cluster [CLUSTER_NAME] --server=[API_SERVER_URL] --certificate-authority=[CA_FILE_PATH]
user 정보 추가
kubectl config set-credentials [USER_NAME] --client-certificate=[CERT_FILE_PATH] --client-key=[KEY_FILE_PATH]
특정 namespace를 context의 기본값으로 설정
kubectl config set-context --current --namespace=[NAMESPACE]
kubeconfig 파일 병합
여러 kubeconfig 파일들을 하나로 병합하려면 KUBECONFIG 환경 변수를 사용하면 됩니다.
export KUBECONFIG=~/.kube/config:~/.kube/kubconfig2
kubectl config view --flatten > ~/.kube/merged_kubeconfig
다른 kubeconfig 파일 확인
기본 kubeconfig 파일이 아닌 다른 kubeconfig파일의 내용을 보려면 --kubeconfig {파일명} 을 사용하면 됩니다.
kubectl config --kubeconfig ./my-kube-config get-clusters
정리
kubeconfig 파일은 kubelet이 cluster를 사용하기 편하게 하기 위한 설명 파일이다.
kubeoncifg의 구조는 cluster, user, context로 이루어져 있는데. context를 통하여 cluster와 user를 연결하는 구조로 되어있다.
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 41. Authorization (권한부여) (0) | 2023.10.28 |
---|---|
[CKA] 40. API 그룹과 목적 (0) | 2023.10.28 |
[CKA] 38. k8s에서 사용자 추가 및 권한 제어 (0) | 2023.10.15 |
[CKA] 37. k8s에서의 상호 인증 원리 (0) | 2023.10.13 |
[CKA] 36. Security - TLS 통신과정 (0) | 2023.09.21 |