KubeConfig
인증서를 통한 쿠버네티스 API 서버에 대한 접근을 구성파일을 통해 명시하고 사용하는 방식
* 아래와 같이 kubectl 명령어를 통해서 사용하던 방식을 파일로 저장
* KubeConfig 파일은 명시하지 않을시에 쿠버네티스의 디폴트 위치에 있는 파일을 사용하기 때문에 따로 명시하지 않아도 사용
* /root/.kube/config에 존재
KubeConfig File 구성요소
1. Clusters : 개발환경 , 배포환경 등 쿠버네티스 기본 환경에 관한 내용
2. Users : 유저에 대한 정보 , 구분 ,인증 정보
3. Contexts : Users와 Clusters에 대한 정보를 연결해주는 Context 정보
생성 예시
apiVersion: v1
kind: Config
clusters:
- cluster:
proxy-url: http://proxy.example.org:3128
server: https://k8s.example.org/k8s/clusters/c-xxyyzz
name: development
users:
- name: developer
user:
clinet-certificate: admin.crt
client-key: adimn.key
contexts:
- context:
name: development
user:developer
- 클러스터에서 쿠버네티스 서버 정보를 명시
- 유저에서 유저 정보와 인증관련 정보를 명시
- Contexts에서 둘을 연결하는 정보를 명시
* proxy-url를 사용하여 kubectl이 각 클러스터마다 프록시를 거치도록 설정할 수 있다.
* clusters, users, contexts는 모두 배열로 저장해서 더 다양한 인증 구성을 만들 수 있다.
* Contexts는 아래와 같이 간단하게 작성 할 수 있다.
users:
- name: developer@development
* Context에 Namespace를 명시
contexts:
- context:
name: development
user: developer
namespace: example
Practice
1. I would like to use the dev-user to access test-cluster-1. Set the current context to the right one so I can do that.
1) 사용하려는 config 파일 확인
contexts:
- context:
cluster: kubernetes-on-aws
user: aws-user
name: aws-user@kubernetes-on-aws
- context:
cluster: test-cluster-1
user: dev-user
name: research
- context:
cluster: development
user: test-user
name: test-user@development
- context:
cluster: production
user: test-user
name: test-user@production
research context를 사용해야 dev-user로 test-cluster-1에 접근 할 수 있음.
- kubectl config --kubeconfig=/root/my-kube-config use-context research
2) 변경 확인
- kubectl config use-context
controlplane ~ ➜ kubectl config --kubeconfig=/root/my-kube-config use-context research
Switched to context "research".
controlplane ~ ➜ kubectl config use-context
Set the current-context in a kubeconfig file.
Aliases:
use-context, use
Examples:
# Use the context for the minikube cluster
kubectl config use-context minikube
Usage:
kubectl config use-context CONTEXT_NAME [options]
Use "kubectl options" for a list of global command-line options (applies to all
commands).
error: Unexpected args: []
2. We don't want to have to specify the kubeconfig file option on each command. Make the my-kube-config file the default kubeconfig.
my-kube-config로 디폴트 config 변경
* 현재는 설정 파일을 생성시에 아무것도 사용하지 않으면 쿠버네티스 내부에 있는 config를 사용한다.( /root/.kube/config )
* 해당 파일을 변경
controlplane ~ ➜ mv /root/my-kube-config /root/.kube/config
controlplane ~ ➜ cat /root/.kube/config
apiVersion: v1
clusters:
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: https://controlplane:6443
name: development
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: https://controlplane:6443
name: kubernetes-on-aws
- cluster:
certificate-authority: /etc/kubernetes/pki/ca.crt
server: https://controlplane:6443
3. With the current-context set to research, we are trying to access the cluster. However something seems to be wrong. Identify and fix the issue.
1) kubectl api를 호출하여 문제를 확인
controlplane ~ ➜ kubectl get pods
error: unable to read client-cert /etc/kubernetes/pki/users/dev-user/developer-user.crt for dev-user due to open /etc/kubernetes/pki/users/dev-user/developer-user.crt: no such file or directory
developer-user.crt가 존재 하지 않아서 인증을 받지 못하고 있다.
2. 해당 파일의 위치로 이동후 확인
controlplane ~ ➜ cd /etc/kubernetes/pki/users/
controlplane kubernetes/pki/users ➜ ls
aws-user dev-user test-user
developer-user가 아니라 dev-user로 저장되어 있음을 확인
3. config 파일 변경
users:
- name: aws-user
user:
client-certificate: /etc/kubernetes/pki/users/aws-user/aws-user.crt
client-key: /etc/kubernetes/pki/users/aws-user/aws-user.key
- name: dev-user
user:
client-certificate: /etc/kubernetes/pki/users/dev-user/dev-user.crt
client-key: /etc/kubernetes/pki/users/dev-user/dev-user.key
- name: test-user
user:
client-certificate: /etc/kubernetes/pki/users/test-user/test-user.crt
client-key: /etc/kubernetes/pki/users/test-user/test-user.key
'Tools > K8S' 카테고리의 다른 글
Kubernetes Deployment (0) | 2023.07.01 |
---|---|
Kubernetes ReplicaSet (0) | 2023.07.01 |
Kubernetes Scheduling (0) | 2023.03.20 |
Kubernetes namespace (0) | 2023.03.19 |
Kubernetes Services (0) | 2023.03.19 |