kubectl config로 여러 Kubernetes 클러스터 관리 가이드

kubectl 컨텍스트, kubeconfig 파일, 네임스페이스 및 안전한 전환 명령을 사용하여 여러 Kubernetes 클러스터를 관리합니다.

kubectl config로 여러 Kubernetes 클러스터 관리 가이드

개발, 스테이징, 프로덕션 환경이나 여러 클라우드에 클러스터가 있으면 여러 Kubernetes 클러스터를 관리하는 것이 일반적입니다. 위험은 간단합니다. 컨텍스트가 명확하지 않으면 한 명령이 잘못된 클러스터에 적용될 수 있습니다.

이 가이드에서는 kubectl config를 사용하여 컨텍스트를 검사하고, 클러스터를 전환하고, 네임스페이스를 설정하고, 여러 kubeconfig 파일을 구성하는 방법을 보여줍니다.

Kubeconfig 파일 이해하기

kubectl config 명령을 다루기 전에 kubeconfig 파일을 이해하는 것이 중요합니다. 이 파일은 클러스터, 사용자 및 이들을 연결하는 컨텍스트에 대한 정보를 저장합니다. kubectl은 이 파일을 사용하여 인증하고 상호 작용할 클러스터를 지정합니다. 기본적으로 kubectl$HOME/.kube/config에서 kubeconfig 파일을 찾습니다.

이 파일 안에는 세 가지 주요 섹션이 있습니다:

  • clusters: Kubernetes 클러스터를 정의하며, API 서버 엔드포인트와 인증 기관을 포함합니다.
  • users: 클라이언트 인증서 및 토큰과 같은 인증 자격 증명을 저장합니다.
  • contexts: 클러스터, 사용자 및 선택적으로 네임스페이스를 연결합니다. 컨텍스트는 이러한 구성을 그룹화하는 편리한 방법을 제공하여 kubectl이 다른 클러스터/사용자 조합 간에 쉽게 전환할 수 있도록 합니다.

kubectl config로 컨텍스트 관리하기

컨텍스트는 kubectl이 다른 Kubernetes 클러스터에 대한 연결을 관리하는 기본 방법입니다. 이들은 단일 명령으로 전환할 수 있는 바로 가기 역할을 합니다.

사용 가능한 컨텍스트 보기

현재 kubeconfig 파일에서 사용 가능한 모든 컨텍스트를 보려면 다음 명령을 사용하세요:

kubectl config get-contexts

이 명령은 각 컨텍스트와 연결된 클러스터, 사용자 및 네임스페이스 목록을 출력합니다. 현재 활성 컨텍스트는 별표(*)로 표시됩니다.

예제 출력:

CURRENT   NAME                 CLUSTER              AUTHINFO       NAMESPACE
*         my-dev-context       my-dev-cluster       dev-user       default
          my-prod-context      my-prod-cluster      prod-user      production
          staging-context      staging-cluster      staging-user   staging

현재 컨텍스트 확인하기

현재 사용 중인 컨텍스트를 빠르게 확인하려면 다음을 실행하세요:

kubectl config current-context

이 명령은 활성 컨텍스트의 이름을 출력합니다.

컨텍스트 전환하기

다른 컨텍스트로 전환하는 것은 간단합니다. use-context 하위 명령 다음에 활성화하려는 컨텍스트 이름을 사용하세요:

kubectl config use-context <context-name>

예를 들어, 위 예제에서 my-prod-context로 전환하려면:

kubectl config use-context my-prod-context

이 명령을 실행한 후, 후속 kubectl 명령은 my-prod-context에 지정된 클러스터로 전달됩니다.

컨텍스트 설정하기

클러스터와 사용자에 대한 특정 컨텍스트를 설정할 수 있으며, 반드시 기본값으로 만들 필요는 없습니다. 이는 임시 작업에 유용합니다.

kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace-name>

--namespace를 생략하면 클러스터의 기본 네임스페이스가 사용됩니다.

클러스터 및 사용자 관리하기

컨텍스트는 전환에 사용되지만, 컨텍스트가 참조하는 클러스터 및 사용자 구성을 직접 관리할 수도 있습니다.

클러스터 정보 보기

구성된 모든 클러스터를 나열하려면:

kubectl config get-clusters

특정 클러스터의 세부 정보를 보려면:

kubectl config view --minify -o jsonpath='{.clusters[?(@.name=="<cluster-name>")].cluster}'

<cluster-name>을 실제 클러스터 이름으로 바꾸세요.

사용자 정보 보기

구성된 모든 사용자를 나열하려면:

kubectl config get-users

구성 추가 및 수정하기

새 클러스터, 사용자 및 컨텍스트를 추가하거나 기존 항목을 수정할 수 있습니다:

  • 새 클러스터 추가:
    kubectl config set-cluster <cluster-name> --server=<api-server-url> --certificate-authority=<path-to-ca-file> --embed-certs=true
    
  • 새 사용자 추가:
    kubectl config set-credentials <user-name> --client-certificate=<path-to-cert-file> --client-key=<path-to-key-file> --embed-certs=true
    
  • 새 컨텍스트 추가:
    kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace-name>
    

여러 Kubeconfig 파일 관리하기

특히 많은 클러스터나 민감한 자격 증명을 다룰 때 보안과 구성을 강화하기 위해 kubeconfig 파일을 분리하여 유지하는 것이 좋습니다. kubectlKUBECONFIG 환경 변수나 --kubeconfig 플래그를 사용하여 여러 kubeconfig 파일을 관리할 수 있습니다.

KUBECONFIG 환경 변수 사용하기

로드할 kubeconfig 파일 목록을 지정할 수 있습니다. kubectl은 이러한 파일을 병합합니다. 동일한 이름의 클러스터, 사용자 또는 컨텍스트가 둘 이상의 파일에 나타나면 병합 우선 순위는 KUBECONFIG의 파일 순서에 따라 달라지므로 예기치 않은 상황을 피하기 위해 고유한 이름을 사용하세요.

현재 셸 세션에 이 변수를 설정하려면:

export KUBECONFIG=~/.kube/config:~/.kube/config-dev:~/.kube/config-prod

이 설정을 영구적으로 유지하려면 셸의 프로필 파일(예: ~/.bashrc, ~/.zshrc)에 export 줄을 추가하세요.

--kubeconfig 플래그 사용하기

또는 단일 kubectl 명령에 대해 특정 kubeconfig 파일을 지정할 수 있습니다:

kubectl --kubeconfig=~/.kube/config-dev get pods

이는 일회성 명령이나 어떤 파일이 사용되고 있는지 확실히 확인하려는 경우에 유용합니다.

다중 클러스터 관리를 위한 모범 사례

  • 별도 파일 사용: 다른 환경(dev, staging, prod)이나 클라우드 제공업체에 대한 구성을 별도의 kubeconfig 파일(예: config-dev, config-staging, config-prod)에 저장하세요.
  • KUBECONFIG 활용: 셸 프로필에서 KUBECONFIG 환경 변수를 설정하여 수동 병합 없이 여러 파일을 쉽게 병합하고 관리하세요.
  • 설명적인 컨텍스트 이름: 혼동을 피하기 위해 컨텍스트에 명확하고 설명적인 이름(예: aws-prod-us-east-1, gke-dev-eu-west-2)을 사용하세요.
  • 네임스페이스 인식: 작업 중인 네임스페이스를 항상 인식하세요. 올바른 네임스페이스를 대상으로 하려면 --namespace 플래그를 사용하거나 컨텍스트에 설정하세요.
  • 정기적 감사: 컨텍스트와 클러스터 구성을 정기적으로 검토하여 최신 상태이고 안전한지 확인하세요.
  • Kubeconfig 보안: kubeconfig 파일을 민감한 자격 증명으로 취급하세요. 파일 권한을 제한하고 버전 제어에 커밋하지 마세요.

최종 요점

컨텍스트 확인을 워크플로우의 일부로 만드세요. 위험한 명령 전에 kubectl config current-context를 실행하고, 설명적인 컨텍스트 이름을 사용하고, 의도적으로 네임스페이스를 설정하고, 필요하지 않을 때는 프로덕션 자격 증명을 일반 셸 세션에서 멀리하세요.