IaaS/퍼블릭클라우드

(AWS) EKS를 ekscli로 Private Subnet으로 구축하기

armyost 2022. 3. 17. 16:45
728x90

EKS를 구축하는데 있어 콘솔을 사용하거나 ekscli의 기본적인 옵션을 사용하는 Case가 대다수인것 같다. 물론 콘솔로 생성하게 Config하는것도 좋은방법이긴 하나, YAML로 IaC를 해놓으면 실수할 염려도 적고 인적종속성도 탈피된다. 

 

EKS를 Private Subnet에 YAML로 구축하면서 얻은 몇가지 노하우를 공유코자 한다. 

 

EKS ControlPlane과 WorkerNode를 Private 네트워크에 구축하고 싶다면 다음의 필수요소가 있다.

 

1. 해당 Subnet은 Private Subnet이어야 한다 : 당연한 내용으로 보이지만 많이 실수하는 부분이다. Private Subnet이 아니면 YAML에 WorkerNode를 Private으로 정의해도 Public으로 물고옴

- PrivateSubnet에 InternetGW가 연결되면 안됨(IGW가 있을경우 PublicNetwork로 간주)

- PrivateSubnet에 Outbount는 통신할 수 있게 NatGW는 연결필요(EKS Node 컴포넌트를 온라인으로 Download 필요한듯) 

 

2. YAML에 다음 Metadata를 추가하자.

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: test1-docker
  region: ap-northeast-2
  version: "1.21"

vpc:
  subnets:
    private:
      ap-northeast-2a: { id: subnet-################ }
      ap-northeast-2b: { id: subnet-################ }
      ap-northeast-2c: { id: subnet-################ }
    public:
      ap-northeast-2a: { id: subnet-################ }
      ap-northeast-2b: { id: subnet-################ }
      ap-northeast-2c: { id: subnet-################ }
  clusterEndpoints:
    publicAccess: false  #여기! 
    privateAccess: true  #여기!

managedNodeGroups:
  - name: ng-1-workers
    labels: { role: workers }
    instanceType: t3.medium
    desiredCapacity: 2
    minSize: 2
    maxSize: 4
    privateNetworking: true #여기!
    iam:
      withAddonPolicies:
        ImageBuilder: true
        albIngress: true
        cloudWatch: true
        autoScaler: true
    ssh:
      publicKeyName: ####


3. 이제 ekscli를 사용해서 구축하자

$ eksctl create cluster -f cluster.yaml

$ aws eks update-kubeconfig --name test1-docker

$ eksctl create nodegroup -f cluster.yaml