레이블이 kubeconfig인 게시물을 표시합니다. 모든 게시물 표시
레이블이 kubeconfig인 게시물을 표시합니다. 모든 게시물 표시

kubectl config 파일 통합

# kubectl 은 기본 ~/.kube/config 설정 파일을 사용한다.
# (참고 config 설정은 k8s 노드의 /etc/kubernetes/admin.conf 에 있다.)
# 특정 클러스터 접속 정보를 yaml 파일로 제공하는 경우
# 다음과 같이 KUBECONFIG 환경변수에 명시해 사용한다.
export KUBECONFIG=~/.kube/config:~/.kube/test-config.yaml 

# 그런데 kubectx (https://github.com/ahmetb/kubectx) 사용시 
# 멀티 yaml 설정이 지원되지 않아 다음과 같은 에러가 발생했다.
error: kubeconfig error: failed to load: cannot determine kubeconfig path: multiple files in KUBECONFIG are currently not supported

# 다음과 같이 ~/.kube/config 하나로 통합할 수 있다.
mv -v ~/.kube/config ~/.kube/config.bak
KUBECONFIG=${HOME}/.kube/config.bak:${HOME}/.kube/test-config.yaml kubectl config view --flatten > ${HOME}/.kube/config

# 참고
# ~/.kube 에 아래 파일들이 있고 파일하나가 클러스터 정보 하나를 가지고 있는 상태에서 KUBECONFIG 에 설정
config
lemon.yaml
apple.yml
banana.yml
- kubectl config use-context lemon-context 수행시
  - touch config.lock 만들고 config.lock: file exists 에러 발생
  - touch lemon.yaml.lock 만들면 lemon.yaml.lock: file exists 에러 발생
- KUBECONFIG 에서 config 를 제외하면 config.lock 파일이 있어도 상관없음 
- kubectl config use-context lemon-context 로 변경하면 config 파일이 변경됨(KUBECONFIG 에 첫번째로 설정된 파일의 current-context 가 변경됨)


#####


# fzf 가 설치되어 있다면 kubectx 실행시 fzf 선택 메뉴가 나타난다.
# fzf 메뉴 없이 kubectx 로 리스트만 보려면
KUBECTX_IGNORE_FZF=1 kubectx
# 또는
kubectx | cat

# kubectx -d 로 context 를 삭제할 수 있지만
# 해당 context 에서 설정된 user, cluster 정보는 남아 있다.
kubectx -d ysoftman_test_context

aws eks 접속 토큰

# aws eks 에 생성한 클러스터 접근시
# 다음과 같이 접속 정보를 설정할 수 있다.
# --kubeconfig 가 없으면 ~/.kube/config 에 추가된다.
aws eks update-kubeconfig --region ap-northeast-2 --name ysoftman-cluster --kubeconfig ~/.kube/aws-ysoftman.yaml

# KUBECONFIG 환경변수 설정
export KUBECONFIG=~/.kube/config:~/.kube/aws-ysoftman.yaml 

# 그런데 실제 접속 정보를 보면 사용자 token: 값 대신
# 다음과 같이 aws eks get-token 으로 새 토큰을 얻는 명령 수행 방식으로 설정된다.
vi ~/.kube/kubeconfig-aws-ysoftman.yaml
... 생략 ...
users:
- name: arn:aws:eks:ap-northeast-2:1111111111:cluster/ysoftman-cluster
  user:
    exec:
      apiVersion: client.authentication.k8s.io/v1alpha1
      args:
      - --region
      - ap-northeast-2
      - eks
      - get-token
      - --cluster-name
      - ysoftman-cluster
      command: aws

# 에 보면 get-token 으로 얻은 토큰은 TTL(time to live)이 15분이라
# 15분마다 새 토큰으로 갱신이 필요한데,
# 클라이언트가 kubectl 인 경우 위 설정으로 자동 갱신을 해준다.

# 그런데 서버의 설정에는 고정 토큰 값으로 k8s api 을 사용하고 있다.
# 위의 명령을 다음과 같이 실행해 토큰 값을 파악할 수 있지만,
# 서버 설정 파일에 토큰을 설정하면 15분뒤에는 연결이 끊어진다.
aws --region ap-northeast-2 eks get-token --cluster-name ysoftman-cluster | jq .status.token

# 아래 사이트에서 k8s dashboard 설치시 service-account 를 추가하거나
# 다음과 같이 admin(service-account) 토큰 값을 파악해 
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin | awk '{print $1}')

# ~/.kube/kubeconfig-aws-ysoftman.yaml 를 다음과 같이 고정하면 만료 없이 사용할 수 있긴 하다.
users:
- name: arn:aws:eks:ap-northeast-2:1111111111:cluster/ysoftman-cluster
  user:
    token: "위에서 파악한 토큰값"