본문 바로가기
AWS/EKS

[AWS/EKS] 콘솔로 생성하는 EKS - ② EKS Cluster 생성, OIDC 구성

by 삼콩 2022. 1. 10.

앞선 포스팅의 네트워크 고려사항이 다 만족되었다면 EKS Cluster를 생성할 준비가 되었다.

Kubernetes는 아래와같이 Control Plane과 Data Plane으로 나뉜다.

  • Control Plane: master node, pod 스케쥴링과 kubernetes의 진입점 (API 서버) 등을 제공
  • Data Plane: worker node, pod가 실제 생성되어 작업을 수행

EKS는 EKS Cluster와 Node Group으로 구성되며 EKS Cluster는 Control Plane, Node Group은 Data Plane의 역할을 수행한다. 이번 포스팅에서는 EKS Cluster 생성과 생성에 필요한 IAM 역할, VPC CNI 설정을 다룬다.

 

1. EKS Cluster IAM 역할 생성

EKS Cluster는 Node Group에 속해있는 인스턴스 (EC2) 관리와 노드 대수 조정 (AutoScaling), 서비스 구성 (ELB)을 위해 AWS 리소스에 접근/관리 할 권한이 필요하다. 이러한 역할을 생성하여 EKS Cluster에 적용하여야 한다.

  • 역할 생성 > AWS 서비스 > EKS 선택
  • 사용 사례 선택 > EKS 선택
    * EKS - Cluster 선택시 IAM 역할 이름 지정 불가
 
  • 권한: AmazonEKSClusterPolicy 선택 > 생성
    역할 생성 후 Policy 확인

2. EKS Cluster 생성

역할 생성이 완료되었으면 EKS 서비스에서 클러스터 생성을 선택하고 다음 과정을 따른다.

 

2.1 Configure cluster

  • Name: EKS Cluster 이름 입력
  • Kubernetes version: 1.18, 1.19, 1.20, 1.21 (2022.01.06 기준)
  • Cluster Service Role: EKS의 Control plane의 AWS 리소스 관리를 위한 역할 (1에서 생성한 EKSClusterRole 선택)

 

2.2 Specify Networking

  • VPC: 클러스터를 생성할 VPC 선택 (앞의 고려사항이 적용되어있는 VPC 선택)
  • Subnet: 클러스터를 구성할 서브넷 선택 (본 포스팅: public+private 서브넷)
    - Public + Private subnet: 퍼블릭 2개, 프라이빗 2개가 요구되며, 각 서브넷은 다른 가용영역에 배포되어있어야 함
    - Public Only: 다른 가용영역에 3개의 퍼블릭 서브넷 배포
    - Private Only: 다른 가용영역에 3개의 프라이빗 서브넷 배포 (NAT GW 혹은 vpce 설정 필요)
  • Security groups: 추가 보안그룹 (Additional Security Group = Control Plane Security group), ENI에 적용될 보안그룹
  • kubernetes API 서버 접근 엔드포인트 (kubectl 활용 用)
  • Public / Public and private / Private 제공 => 이번 구성에서는 VPC 내에 별도의 인스턴스가 존재하지 않으므로 private을 사용할 수 없다. 그러므로 Public만 선택하면된다. 이 옵션은 구축 후 변경 가능하니, 나중에 private 테스트가 필요하다면 VPC 내에 인스턴스를 생성하고 옵션을 의도에 맞게 변경하면 된다.

2.3 Add-on과 Control plane 로깅

추가기능(Add-on)과 로깅은 각자 환경에 맞게 선택한다. 이때 로깅의 경우에는 Cloudwatch logs에 저장되며 EKS Cluster가 동작하는 내내 많은 로그가 쌓인다. Cloudwatch logs의 로그 보존 기본 값이 '만료 없음'이므로 시간이 지날수록 많이 과금될 수 있다. 따라서 로깅 기능을 사용하기로 했다면 반드시 만료 기간을 정해줘야한다.

Add-on 선택 예. 나중에 Add-on 버전을 올릴때에는 1단계씩 업그레이드 가능함을 기억하자

 

3. AWS에 대한 OIDC (OpenID Connect) 공급자 생성

EKS에서는 kubernetes가 VPC IP 대역을 사용하여 pod, service 등을 생성할 수 있도록 VPC_CNI를 제공한다. 이 때 kuberentes 서비스 계정이 AWS IAM 리소스에 액세스하고 다룰 수 있도록 OIDC 값으로 IAM Identity Provider를 생성해줘야 한다. 생성된 IAM Identity Provider는 VPC_CNI 뿐 아니라 AWS LoadBalancer Controller, Cluster Autoscaler 등에서 사용된다. (이 부분은 클러스터를 새로 만들 때 마다 그 값이 변경되는데, 매번 OIDC와 관련 역할의 신뢰 관계 설정이 번거로워 최근에는 terraform을 활용하고있다)

 

3.1 OIDC 공급자 확인

OIDC는 EKS Cluster가 생성되면 다음 위치에서 그 값을 확인 할 수 있다.

Cluster Configuration > Details >  OpenID  connect provider URL  복사

 

3.2 IAM Identity Provider 생성

  • IAM 자격증명 공급자 (Identity Provider) > OpenID Connect 선택 
  • Provider URL: 복사한 URL 입력 > Get thumprint
OIDC 생성 예

 

4. VPC-CNI 설정

클러스터 생성시 EKS는 VPC-CNI, CoreDNS, kube-proxy를 기본으로 제공하며, 이 중 VPC-CNI는 kubernetes pod의 주소를 VPC 네트워크 내 IP 주소로 할당하기 위한 플러그인이다. EKS Cluster에 EC2를 worker node로 사용하려면 VPC-CNI가 필요하며, 이 추가 기능은 AWS EC2에 대한 권한이 필요하다. 초기 클러스터 생성시 VPC-CNI는 생성되나 OIDC 공급자가 연결된 역할로 변경이 필요함을 기억해야 한다. 권한은 IAM Role을 생성하여 VPC-CNI 추가 기능에 적용하는 방법과 EKS Cluster에 조인할 node의 역할에 추가하는 방법이 있는데, 본 포스팅은 IAM Role을 생성하여 VPC-CNI 추가 기능에 적용하는 방법으로 진행한다.

EKS Cluster Add-ons 확인

4.1 VPC-CNI Role 생성

  • IAM > 역할 생성 > Web identity 객체 선택
  • Identity provider: 3에서 생성한 OIDC 자격증명 공급자 선택
  • AWS 관리형 정책 선택: AmazonEKS_CNI_Policy

 

4.2 신뢰 관계 편집

생성된 역할에 들어가, 다음과 신뢰 관계를 편집한다.

  • 변경 전 (신뢰관계 일부)
"oidc.eks.ap-northeast-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"
  • 변경 후 (신뢰관계 일부)
     - region-code: ap-northeast-2 (리전에 따라 선택)
     - EXAMPLED539D4633E53DE1B716D3041E: OIDC 공급자 ID
"oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:kube-system:aws-node"
신뢰 관계 편집 예

 

4.3 VPC-CNI 추가 기능 역할 변경
VPC-CNI의 역할이 설정되어있지 않은 상태에서는 노드의 IAM 역할을 가져오므로, 이 단계를 뛰어넘는다면 노드에 이 IAM 역할을 적용하여야 한다.
  • VPC-CNI 선택 > 수정 > 4.2에서 생성한 역할 선택

 

 

이렇게해서 EKS Cluster 구성을 마쳤다. 

다음 포스팅에서는 EKS Cluster의 노드 그룹을 생성하고 kubeconfig 설정까지 다루겠다.

 

 

[참고]

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/create-cluster.html 

https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/cni-iam-role.html

 

Amazon EKS 클러스터 생성 - Amazon EKS

클러스터가 배포된 후, AWS Outposts, AWS Wavelength 또는 AWS Local Zones에 자체 관리형 노드를 배포하려면, Amazon EKS 요구 사항을 충족하는 기존 VPC 가 있어야 하며 이전 명령에 --vpc-private-subnets 옵션을 사

docs.aws.amazon.com

 

댓글