본문 바로가기
[AWS-SM]/EKS 구축

[중요][워커노드] EKS Cluster 구축 - 3. Worker Node Group, Security Group 설정

by SAMSUNG Metaverse-Cloud 2023. 3. 6.
728x90

 

 

EKS CLUSTER가 모두 완성되었기 때문에 Node Group을 추가해보도록 하겠습니다.

서브넷을 Private만 선택하여서 실제 서비스는 Private Network에만 구성되도록 하겠습니다.

 

 

인트로에서 말씀드렸듯 EC2 Type에 따라서 Pod수의 제한이 있습니다

원활한 구성을 위해서 t3.large를 골라주도록 하겠습니다.

Type별 Pod제한을 통해서 체크해주세요

 

 


 

이제 구성이 끝나면 Security Group 설정을 아래와 같이 해주시면 되겠습니다.

 

Cluster를 Security Group 설정 없이 그냥 구축하게 되면

eks-cluster-~~~ 라 나오는 것이 Cluster SG이고,

remoteAccess-~~~가 WorkerNode SG입니다.

 

다큐링크를 참고하셔서 구성하시면 됩니다.

 

저는 아래와 같이 구성하였고 하나의 퍼블릭 Bastion 서버를 두고 Priavte Jenkins서버에서만 접근할 수 있게하였습니다.

 

Cluster Security Group

Worker Node Security Group


 

 

 

이제 쿠버를 컨트롤 할 bastion 세팅을 해주면 되는데, 세팅은 다음 세개를 해주셔야합니다.

1. kubectl install

2. IAM-Authenticator install

3. kubeconfig

 

이 부분은 위의 다큐를 보고 수행하셔도 되고, 다음 쉘 스크립트들을 Bastion -> Jenkins서버에서 수행하셔도 됩니다.

 

Jenkins Pipeline에서 배포를 해야하기 때문에 kubectl 명령어를 수행할 수 있도록 구성하시는게 편해서

저는 Jenkins 서버에 세팅을 하도록 하겠습니다.

Bastion서버 Jenkins 서버세팅은 AWS 기본 구성 게시글과 CICD 게시글을 참고해주시면 됩니다.

 

 

 

자 이제 Jenkins 서버에서 아래 쉘스크립트를 하나씩 수행해주세요

 

1. kubectl 설치

curl -o kubectl https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$HOME/bin:$PATH
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
kubectl version --short --client

 

아래와 같이 수행되면 정상입니다.

 

2. IAM Authenticator 설치

curl -o aws-iam-authenticator https://amazon-eks.s3-us-west-2.amazonaws.com/1.14.6/2019-08-22/bin/linux/amd64/aws-iam-authenticator
chmod +x ./aws-iam-authenticator
mkdir -p $HOME/bin && cp ./aws-iam-authenticator $HOME/bin/aws-iam-authenticator && export PATH=$HOME/bin:$PATH
echo 'export PATH=$HOME/bin:$PATH' >> ~/.bashrc
aws-iam-authenticator help

 

아래와 같이 수행되면 정상입니다.

 

3. kubeconfig 생성

[중요] EKS Cluster를 생성했던 IAM에게만 마스터 권한이 있기 때문에 생성하셨던 IAM 계정을 aws configure에 설정해주세요. (Bastion 작업 성공)

만약 다른 계정을 aws configure를 통해 설정하시고 싶다면, 아래 링크를 참조해서 설정해주시면 되겠습니다.

다른 IAM 사용자에게 권한 주기

aws sts get-caller-identity
aws eks --region region update-kubeconfig --name cluster_name
kubectl get svc

 

아래와 같이 수행되면 정상입니다.

 

 

 

 

 


 

자 이렇게 되면 쿠버네티스를 사용하기 위한 클러스터 구성이 끝났습니다.

이제 다음 포스트 부터 ECR에 올려놓은 컨테이너 이미지를 가지고 Pod 즉, 서비스를 띄운 후

 

각 카테고리별로 Kubernetes와 관련된 오픈소스들을 EKS에서 어떻게 사용하는 것인지 알아보도록 하겠습니다.

 

 

출처: https://aws-diary.tistory.com/m/45

 

 

================================================================

 

 

 

 

 

kubectl을 통해서 쿠버네티스 클러스터에 접속하려 할 때 다음과 같은 에러 메시지가 발생하는 경우가 종종 있다.

 

The connection to the server localhost:8080 was refused - did you specify the right host or port?

 

해당 메시지가 발생하는 경우는 보통 쿠버네티스 컨피그 파일이 $HOME/.kube 디렉토리 밑에 없거나, 현재 유저정보가 쿠버네티스 컨피그 파일에 반영되지 않은 경우에 발생한다.

 

따라서 해당 문제는 다음 명령어를 통해 해결 가능하다.

 

 

1. AWS EKS로 구축한 클러스터에 접근할 때 발생한 경우

다음 명령어를 통해 AWS EKS 클러스터 접근을 위한 컨피그 파일을 생성해준다(물론 해당 명령어를 사용하기 전에 aws configure 명령어를 통해 AWS EKS 접근 가능한 계정으로 셋팅이 되어 있어야 한다)

$ aws eks --region [클러스터 리전] update-kubeconfig --name [클러스터 이름]

 

예를 들면 :

$ aws eks --region ap-northeast-2 update-kubeconfig --name cloud-eks

 

이런식으로 명령어를 사용하게 되면 $HOME/.kube 디렉토리 밑에 컨피그 파일이 생성된다.

 


 

2. kubeadmin으로 구축한 클러스터에 접근할 때 발생한 경우

1) 마스터 노드에서 에러가 발생한 경우 : /etc/kubernetes/admin.conf 파일을 $HOME/.kube/config로 복사 후 소유자 변경을 해준다.

$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config

 

2) 마스터노드가 아닌 곳에서 에러가 발생한 경우 : 마스터노드(서버)에 생성된 $HOME/.kube/config 파일을 접근을 시도하는 서버의 $HOME/.kube 디렉토리로 가져온 후, chwon 명령어를 통해 소유자를 변경해준다(위 명령어와 동일) 

 

 

 

 

출처 : https://twofootdog.tistory.com/82

728x90