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

aws bastion 접속없이 로컬에서 kubectl 사용하기

# 보안상의 이유로 다음과 같이 aws bastion 을 사용한다.
# aws private <-> aws bastion <-> 외부(local...)
# 그래서 기본적으로는 다음과 같이 aws eks 클러스터에 kubectl 명령은 bastion 에 접속 후 사용해야 한다.
ssh -i aws-ysoftman.pem ec2-user@xxxx.ap-northeast-2.compute.amazonaws.com
[ec2-user@ip-xxxxxx ~]$ kubectl get ns

# ssh tunneling 으로 로컬에서 bastion 통해 바로 kubectl 을 사용(연결)할 수 있다.
# -f 백그라운드 실행, 추후 필요없으면 ssh 프로세스 kill 필요, -f 없이 사용해도 되고,이러면 ctrl+c 로 종료
# -N 원격 명령을 실행하지 않는다. 포트 포워딩할때 같이 사용
# -L 로컬포트->특정호스트:포트로 바인딩
# alias 로 만들어 사용하자.
alias aws-prod-start-tunnel='ssh -fNL 29443:xxx.ap-northeast-2.eks.amazonaws.com:443 -i ~/.ssh/aws-ysoftman.pem ec2-user@xxx.ap-northeast-2.compute.amazonaws.com'
alias aws-prod-stop-tunnel="ps -ef | grep 'ssh -fNL' | grep -v grep | awk '{print \$2}' | xargs kill -9"


# 로컬 호스트에 도메인 추가한다.
sudo vi /etc/hosts
127.0.0.1     kubernetes.default

# 참고로 k8s 허용하지 않는 도메인을 사용하면 다음과 같은 에러가 발생한다.
Unable to connect to the server: x509: certificate is valid for xxx.ap-northeast-2.eks.amazonaws.com, xxx.ap-northeast-2.compute.internal, kubernetes, kubernetes.default, kubernetes.default.svc, kubernetes.default.svc.cluster.local, not aws-ysoftman

# 이 에러를 무시하려면 다음과 같이 매번 옵션을 명시해 실행할 순 있다.
# kubectl get ns --insecure-skip-tls-verify

# aws cli 로 kubectl 접속 설정 파일을 생성한다.
aws eks update-kubeconfig --region ap-northeast-2 --name ysoftman-k8s --kubeconfig ~/.kube/kubeconfig-aws-ysoftman.yaml

# 접속 설정 파일 중 server 부분을 다음과 같이 변경한다.
vi ~/.kube/kubeconfig-aws-ysoftman.yaml
apiVersion: v1
clusters:
  - cluster:
      server: https://kubernetes.default:29443

# 이제 (ssh 연결된 상태니) 로컬에서 kubectl 응답을 받을 수 있다.
kubectl get ns