Post

Section 7-2. KubeCofig

udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests 강의 및 쿠버네티스 인 액션 (마르코 룩샤)를 참고하여 정리한 글입니다.

Section07. Security

KubeConfig

  • 쿠버네티스의 설정 파일로 쿠버네티스 클러스터에 접속하기 위한 설정·인증서 정보를 저장하고 있는 파일이다.
    • kubeconfig를 사용하지 않을 경우 쿠버네티스 클러스터에 접속하기 위해서는 인증서와 키를 옵션으로 전달해야한다.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      
      #### curl 사용 ####
      $ curl https://my-kube-playground:6443/api/v1/pods \
        --key admin.key
        --cert admin.crt
        --cacert ca.crt
          
      #### kubectl 사용 ####
      $ kubectl get pods
        --server my-kube-playground:6443
        --client-key admin.key
        --client-certtificate admin.crt
        --certificate-authority ca.crt
      
    • kubeconfig는 지정한 인증 정보를 파일로 저장한 뒤 해당 파일을 파라미터로 지정하여 사용할 수 있다.
      1
      
      $ kubectl get pods --kubeconfig {config 파일}
      

KubeConfig 파일의 기본 위치

  • 기본적으로 kubectl은 $HOME/.kube/config 파일을 참조한다. kubeadm 등을 통하여 클러스터를 구축할 경우 기본적으로 이와 같이 설정 파일 경로를 기본값으로 구성하므로 사용자는 –kubeconfig 옵션을 추가하지 않고도 kubectl 명령어를 사용할 수 있다.

KubeConfig 구조

1
2
3
4
5
6
7
8
9
10
11
12
## 옵션                               ## 들어가는 위치
--server my-kube-playground:6443   => clusters
--client-key admin.key             => users
--client-certtificate admin.crt    => users
--certificate-authority ca.crt     => clusters
+--------------+        +-------------------+        +--------------+
|              |        |                   |        |              |
|  Development |        |  Admin@Production |        |  Admin       |
|  Production  |   =>   |  Dev@Google       |   <=   |  Dev User    |
|  Google      |        |                   |        |  Prod User   |
|              |        |                   |        |              |
+-- Clusters --+        +----- Contexts ----+        +---- Users ---+
  • clusters : 접속할 클러스터의 주소 정보
  • contexts : 어떤 유저가 어떤 클러스터에 접속할지 정의한 정보 (clusters 필드와 users 필드를 매칭)
  • users : 클러스터에 접속할 유저 정보

KubeConfig File 구조

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: v1
kind: Config
current-context: dev-user@google
clusters:
- name: my-kube-playground
  cluster:
    certificate-authority: ca.crt   # 혹은 fullpath 입력 (/etc/kubernetes/pki/ca.crt)
    server: https://my-kube-playground:6443
contexts:
- name: my-kube-admin@my-kube-playground
  context:
    cluster: my-kube-playground
    user: admin
users:
- name: my-kube-admin
  user:
    client-certificate: admin.crt   # 혹은 fullpath 입력 (/etc/kubernetes/pki/users/admin.crt)
    client-key: admin.key   # 혹은 fullpath 입력 (/etc/kubernetes/pki/users/admin.key)
  • 여러 개의 cluster/user 가 존재하고 여러 개의 context 쌍이 서술될 수 있다.
  • current-context 에는 현재 context 값이 저장되며, 만약 사용자가 kubectl config use-context 명령어로 context를 변경할 경우 이 파일의 값 또한 자동으로 변경된다.
  • ca.crt, admin.crt, admin.key 파일을 상대 경로로 지정하였는데, 이 경로는 절대 경로로 지정할 수도 있다.
  • cluster.certificate-authority에 특정 경로 대신 직접 파일 내용을 넣어줄 수도 있다.
    • $ cat ca.crt | base64로 인코딩 한 값을 넣는다.

KubeConfig 내용 확인

1
$ kubectl config view
  • 기본 경로에 설정한 config를 확인할 수 있다.
1
$ kubectl config view --kubeconfig=[경로]
  • 기본 경로에 위치한 config가 아닌 경우 경로를 입력하여 확인할 수 있다.

context 변경

  • 컨텍스트 목록 확인
    1
    
    $ kubectl config get-contexts
    
  • 현재 컨텍스트 확인
    1
    
    $ kubectl config current-context
    
  • 컨텍스트 변경
    1
    
    $ kubectl config use-context [컨텍스트]
    
This post is licensed under CC BY 4.0 by the author.