AWS 환경에서 쿠버네티스를 사용하고 싶었다👀
EKS라는 단어는 많이 들어 보았지만 구축은 처음이었다. 그 과정을 공유한다 🔥🔥🔥
나의 경우 개발용으로 계속 사용하던 루트 권한이 부여된 IAM User를 그대로 사용했다.
배스천 호스트에 대해 처음 알게 되었다.
외부에서 내부 네트워크에 접근할 수 있는 유일한 통로인 셈이다 🤔
AWS 환경에서는 Bastion 서버를 EC2 인스턴스로 설정하고, 이를 통해 VPC 내의 다른 EC2 인스턴스, 데이터베이스, 애플리케이션 서버 등에 안전하게 접근 가능하다.
나의 경우 RHEL 환경으로 인스턴스를 만들었다.
인스턴스 유형은 t3.small 추천한다.
프리티어는 라이브러리 몇 개 설치하다 보면 용량이 꽉 차서 못쓴다 🤣
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.28.5/2024-01-04/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
kubectl version --client
eksctl
을 사용하려면 AWS user의 credential 설정이 필요하다.
설정을 위해선 aws cli가 필요하다.
sudo yum install unzip
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
위에서 만들었던 IAM User을 등록하자
$ aws configure
AWS Access Key ID [None]: 당신의 Access Key
AWS Secret Access Key [None]: 당신의 Secret Key
Default region name [None]: ap-northeast-2
Default output format [None]: json
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl version
eksctl? 🔥
eksctl create cluster \
--version 1.28 \
--name eks-demo \
--vpc-nat-mode HighlyAvailable \
--region ap-northeast-2 \
--node-type t3.small \
--nodes 1 \
--with-oidc \
--ssh-access \
--ssh-public-key k8s_test \
--managed
--version
: 클러스터에서 사용할 k8s 버전 (kubectl의 버전과 맞춰야 클러스터 생성이 되는 것 같음)--vpc-nat-mode
: kubernetes의 모든 outbound는 nat gateway를 통해 나가게 되는게 default option 은 single 이라 하나만 생성된다. 개발 환경에서는 상관없을거 같지만 운영에서는 각 subnet 마다 하나씩 만드는 HighAvailable
옵션을 사용한다.node-type
: 생성될 node의 instance 타입nodes
: 생성 될 node의 갯수-with-oidc
: OpenID Connect (OIDC) 공급자를 클러스터와 함께 생성하도록 설정한다. OIDC는 AWS 리소스에 대한 액세스를 관리하기 위해 Kubernetes 서비스 어카운트와 IAM 역할을 연결하는 데 사용될 수 있다.-ssh-access
: 클러스터의 노드에 대한 SSH 접근을 허용한다. 이를 통해 관리자는 노드에 대한 접근 및 트러블슈팅 작업을 수행할 수 있다.-ssh-public-key
: 클러스터 노드에 대한 SSH 접근을 위해 사용할 공개 키의 이름을 지정한다. (나의 경우 k8s_test
라는 이름의 키를 AWS에 미리 등록한 상태)-managed
: 이 옵션을 사용하면 Amazon EKS에서 관리하는 노드 그룹을 생성한다. 관리형 노드 그룹은 AWS가 노드의 프로비저닝, 스케일링, 업데이트를 자동으로 관리한다.eks-cluster.yaml
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eks-dev
region: ap-northeast-2
version: "1.28"
vpc:
nat:
gateway: HighlyAvailable
iam:
withOIDC: true
managedNodeGroups:
- name: managed-ng-1
instanceType: t3.small
desiredCapacity: 1
ssh:
allow: true
publicKeyName: k8s_test
kubectl apply -f eks-cluster.yaml
명령을 통해 eks cluster를 생성 👍
$ kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ip-192-168-105-142.ap-northeast-2.compute.internal Ready <none> 10m v1.28.5-eks-5e0fdde 192.168.105.142 <none> Amazon Linux 2 5.10.210-201.855.amzn2.x86_64 containerd://1.7.11
설정한 노드의 갯수에 따라 노드를 확인할 수 있다 🔥🔥🔥
EC2에서도 생성된 노드 확인 가능!