Joo's
반응형

지금 AWS 쿠버네티스, GCP 쿠버네티스를 사용중인다.

 

쿠버네티스에 접근하려면 kubeconfig 파일이 필요하다.

이 파일에 쿠버네티스 접근하기 위한 클러스터 정보, 인증 정보들이 들어 있다.

 

아래는 kubeconfig 예시이다.

클러스터 1개, 유저 1개가 있고 이걸 context로 묶어놨다.

여기에서 중요한 건 current-context: aws-context 이 부분이다.

kubectl 같은 명령어를 사용하면 저기에 설정된 클러스터로 명령을 보낸다.

apiVersion: v1
kind: Config

clusters:
- name: my-aws-cluster
  cluster:
    server: https://ABCD1234.gr7.us-west-2.eks.amazonaws.com
    certificate-authority-data: LS0tLS1...

users:
- name: aws-user
  user:
    exec:
      apiVersion: "client.authentication.k8s.io/v1beta1"
      command: "aws"
      args:
        - "eks"
        - "get-token"
        - "--cluster-name"
        - "my-aws-cluster"

contexts:
- name: aws-context
  context:
    cluster: my-aws-cluster
    user: aws-user

current-context: aws-context

만약 내가 kubeconfig에 여러 개의 클러스터 정보를 넣었다고 하자.

AWS, GCP, AZURE 정보를 넣었다.(값은 대충 넣었으니 참고만 할 것)

아래처럼 클러스터, 유저를 여러 개 넣을 수 있고 이것을 조합해서 context를 만들 수 있다.

current-context: aws-context 부분을 current-context: gcp-context와 같이 다르게 넣고

저장하면 gcp 클러스터로 접속하는 구조이다.

apiVersion: v1
kind: Config

clusters:
- name: my-aws-cluster
  cluster:
    server: https://ABCD1234.gr7.us-west-2.eks.amazonaws.com
    certificate-authority-data: LS0tLS1...
    
clusters:
- name: my-gcp-cluster
  cluster:
    server: https://ABCD1234.gr7.us-west-2.eks.amazonaws.com
    certificate-authority-data: LS0tLS1...
    
clusters:
- name: my-azure-cluster
  cluster:
    server: https://ABCD1234.gr7.us-west-2.eks.amazonaws.com
    certificate-authority-data: LS0tLS1...

users:
- name: aws-user
  user:
    exec:
      apiVersion: "client.authentication.k8s.io/v1beta1"
      command: "aws"
      args:
        - "eks"
        - "get-token"
        - "--cluster-name"
        - "my-aws-cluster"
        
users:
- name: gpc-user
  user:
    exec:
      apiVersion: "client.authentication.k8s.io/v1beta1"
      command: "gcp"
      args:
        - "eks"
        - "get-token"
        - "--cluster-name"
        - "my-aws-cluster"

users:
- name: azure-user
  user:
    exec:
      apiVersion: "client.authentication.k8s.io/v1beta1"
      command: "azure"
      args:
        - "eks"
        - "get-token"
        - "--cluster-name"
        - "my-aws-cluster"
        
contexts:
- name: aws-context
  context:
    cluster: my-aws-cluster
    user: aws-user

contexts:
- name: gcp-context
  context:
    cluster: my-gcp-cluster
    user: gcp-user
   
contexts:
- name: azure-context
  context:
    cluster: my-azure-cluster
    user: azure-user
    
current-context: aws-context

근데 매번 이 kubeconfig를 바꿀 수는 없다.

 

그래서 kubeconfig를 서로 다르게 여러 개 만들어서 사용하면 훨씬 편하게 작업할 수 있다.

먼저 kubeconfig에서 current-context 부분을 다르게 만들어서 3개 파일을 만들자.

 

예를 들어, kubeconfig_aws, kubeconfig_gcp, kubeconfig_azure와 같이 클라우드 공급자에 따라 파일을 다르게 만들어 준다.

각 파일은 current-context: aws-context, current-context: gcp-context, current-context: azure-context처럼 current-context만 다른 상태이다.

 

가장 기본적인 방법은 --kubeconfig 옵션 사용을 사용하는 방법이다.

명령어를 입력할 때마다 kubeconfig 파일 경로를 지정한다.

# GCP 클러스터에 접근
kubectl --kubeconfig ~/.kube/config-gcp get pods

# AWS 클러스터에 접근
kubectl --kubeconfig ~/.kube/config-aws get pods

근데 이 방법은 너무 귀찮다.

맥북에서 alias를 이용해서 간단하게 사용할 수 있다.

iterm에서 아래 명령어로 alias를 지정한다.

물론 kubeconfig 경로는 자기 경로에 맞게 지정해야 한다.

맥북에서 파일 경로 확인법

파일을 선택 후 Command (⌘) + Option (⌥) + C 누른 후 다른 곳에 붙여넣기 하면 경로가 복사된다.

alias kaws='kubectl --kubeconfig ~/.kube/config-aws'
alias kgcp='kubectl --kubeconfig ~/.kube/config-gcp'

지정하고 난 다음에는 간단하게 사용 가능하다.

 

이렇게 하면 iterm을 새로 열면 해당 내용이 없다.

따라서 alias를 쉘 설정 파일에 추가해야 한다.

# vi로 설정 파일 수정하기
vi ~/.zshrc
# 아래 2줄을 추가한다.
alias kaws='kubectl --kubeconfig ~/.kube/config-aws'
alias kgcp='kubectl --kubeconfig ~/.kube/config-gcp'
# 변경 사항을 적용한다.
source ~/.zshrc

이렇게하면 새로운 iterm을 열어도 사용 가능하다.

 

아래 명령어가 잘 되는지 확인하기.

kaws get nodes
kgcp get pods

 

반응형
profile

Joo's

@JooJY

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!