kubeconfig파일을 사용하여 클러스터 접근 구성
개요
kubeconfig사용법을 찾아보다가, kubernetes공식 사이트에서 제공하는 가이드 보았고,
이를 직접 번역하여 포스팅하게 되었다.
(원문 링크: https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/)
kubeconfig 파일을 사용하여 클러스터 접근 구성
kubeconfig 파일을 사용하여 클러스터, 유저, 네임스페이스 및 인증 메커니즘 정보를 구성해보자.
kubectl 명령줄 도구는 kubeconfig 파일을 사용하여 클러스터를 선택하고 API 서버와 통신하는 데 필요한 정보를 찾는다.
참고: kubeconfig파일은 클러스터에 대한 액세스를 구성하는 데 사용되는 파일을 호출한다. 이것은 구성 파일을 참조하는 일반적인 방법이다. 그렇다고 kubeconfig라는 파일이 있다는 의미는 아니다.
경고: 신뢰할 수 있는 원본의 kubeconfig 파일만 사용해야 한다. 특수하게 조작된 kubeconfig파일을 사용하면 악성 코드가 실행되거나 파일이 노출될 수 있다. 신뢰할 수 없는 kubeconfig 파일을 사용해야 하는 경우 shell 스크립트와 마찬가지로 먼저 신중하게 검사해야 한다.
기본적으로, kubectl은 $HOME/.kube 디렉터리에서 config라는 이름의 파일로 존재한다.
만일 다른 kubeconfig를 지정하고 싶다면 KUBECONFIG 환경 변수를 설정하거나 --kubeconfig 플래그를 주어 지정할 수 있다.
kubeconfig 파일을 만들고 지정하는 단계별 지침은 이사이트를 참고하자.
여러 클러스터와 유저, 인증 메커니즘을 지원
클러스터가 여러 개 있고 사용자와 인증 컴포넌트가 다양한 방법으로 있다고 가정한다.
예를 들어,
- 실행 중인 kubelet은 인증서를 사용하여 인증할 수 있다.
- 사용자는 토큰을 사용하여 인증할 수 있다.
- 관리자는 개별 사용자에게 제공하는 인증서 세트를 가지고 있을 수 있다.
kubeconfig파일을 사용하여 클러스터, 사용자 및 네임스페이스를 구성할 수 있다. 또한 빠르고 쉽게 클러스터 및 네임스페이스를 전환할 수 있는 컨텍스트를 정의할 수 있다.
컨텍스트(Context)
kubeconfig 파일의 context요소는 액세스 매개 변수를 편리한 이름으로 그룹화하는 데 사용된다. 각각의 context는 세가지 파라미터를 가진다. (cluster, namespace, user)
기본적으로, kubectl 명령줄 도구는 클러스터와 소통할 현재 컨텍스트를 매개변수로 사용한다.
현재 컨텍스트를 고르기 위해 다음과 같이 한다.
kubectl config use-context
KUBECONFIG 환경변수
KUBECONFIG 환경변수는 kubeconfig 파일 목록을 갖는다.
Linux와 Mac에서는 리스트가 콜론(:)으로 구분되고, Window에서는 세미 콜론(;)으로 구분된다. KUBECONFIG환경변수는 요구되지 않는다. 만약 KUBECONFIG환경변수가 존재하지 않으면, kubectl은 기본 kubeconfig파일($HOME/.kube/config)을 사용한다.
만약 KUBECONFIG환경 변수가 있다면, kubectl은 KUBECONFIG 환경 변수에 나열된 파일을 병합한 결과인 효과적인 구성을 사용한다.
kubeconfig파일 합치기
구성을 확인하려면, 다음 명령어를 입력한다.
$ kubectl config view
앞에서 설명한 것처럼 출력은 단일 kubeconfig파일에서 나오거나 여러 kubeconfig파일을 병합한 결과일 수 있다.
kubectl이 kubeconfig파일을 합쳐 사용할 때의 규칙은 다음과 같다.
1. 만일 --kubeconfig플래그를 설정한다면, 지정된 파일만 사용하고, 병합하지 않는다. 오직 하나의 인스턴스만 플래그로 지정할 수 있다.
그렇지 않고 KUBECONFIG 환경 변수가 설정 되어 있으면 병합해야 하는 파일 목록으로 사용한다. 다음 규칙에 따라 KUBECONFIG 환경 변수에 나열된 파일을 병합한다.
- 빈 파일이름은 무시한다.
- 역직렬화할 수 없는 콘텐츠가 있는 파일에 대해 오류를 생성한다.
- 특정 값을 설정하거나 키를 매핑하는 첫 번째 파일이 우선한다.
- 절대 값이나 맵 키를 변경하지 않아야 한다.
- 예) 현재 컨텍스트를 설정하기 위해 첫 번째 파일의 컨텍스트를 유지한다.
- 예) 두 파일이 red-user를 지정하는 경우 첫번째 파일의 red-user값만 사용해야한다. 두 번째 파일에 red-user 아래에 충돌하지 않는 항목이 있더라도 해당 항목을 버린다.
KUBECONFIG 환경 변수 설정의 예는 이 사이트를 참조하자.
그렇지 않으면 병합하지 않고 기본 kubeconfig 파일인 $HOME/.kube/config를 사용한다.
2. 이 다음 경우 중 첫 번째로 적중하는 것을 사용할 context로 결정한다.
- --context 명령줄 플래그가 있을 시 이를 사용한다.
- 병합한 kubeconfig 파일중에 current-context값을 사용한다.
이 때, 빈 context가 허용된다.
3. cluster와 user를 결정한다. 이 시점에서 context가 있을 수도 있고 없을 수도 있다. 두 번 실행되는 아래 경우 중의 첫 번째로 적중하는 것으로 클러스터와 사용자를 결정한다. (한 번은 사용자용이고 다른 한 번은 클러스터용이다.)
- --user 또는 —cluster와 같은 명령줄 플래그가 있으면 사용한다.
- context가 비어있지 않으면, context에서 user와 cluster를 가져온다.
이 때, user와 cluter는 빈 값이 허용된다.
4. 사용할 실제 클러스터 정보를 결정한다. 이 때, 클러스터 정보가 있을 수도 있고 없을 수도 있다. 아래의 경우 중 첫 번째로 적중하는 것으로 각 클러스터 정보를 구축한다.
- --server, --certificate-authority, --insecure-skip-tls-verify 명령줄 플래그가 존재하는경우, 이를 사용한다.
- 병합된 kubeconfig 파일에 클러스터 정보 속성이 있으면, 이를 사용한다.
- 서버 위치 정보가 없으면, 실패한다.
5. 사용할 실제 사용자 정보를 결정한다. 클러스터 정보와 동일한 규칙을 사용하여 사용자 정보를 작성한다. 단, 사용자당 하나의 인증 기술만 허용된다.
- --client-certificate, --client-key, --username, --password, --token과 같은 명령줄 플래그가 있으면 사용한다.
- 병합된 kubeconfig파일에 user필드가 있으면 사용한다.
- 두가지 상충하는 기술이 있으면, 실패한다.
6. 위와 같이 했음에도 누락된 정보가 있을 경우 기본 값을 사용하고 잠재적으로 인증 정보를 묻는 메시지를 표시한다.
파일 참조
kubeconfig파일의 파일 및 경로 참조는 kubeconfig파일의 위치에 상대적이다. 명령줄의 파일 참조는 현재 작업 디렉터리에 상대적이다. $HOME/.kube/config에는 상대 경로가 상대적으로 저장되고 절대 경로가 절대적으로 저장된다.
Proxy
다음과 같이 kubeconfig 파일에서 proxy-url을 사용하여 각 클러스터마다 프록시를 사용하도록 kubectl을 구성할 수 있다.
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
contexts:
- context:
name: development
#Reference
https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/