Tools/K8S

Kubernetes Config

칼쵸쵸 2023. 6. 17. 22:41

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