새소식

AWS/EKS

[EKS Study 1주차] EKS API 서버 Endpoint

  • -

CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 1주차 도전과제 정리

이번 글에서는 EKS 의 API Endpoint 에 대해 알아보겠습니다.

 

 

1. EKS API Server Endpoint 개요

EKS Control Plane 의 API Server 에 접근할 수 있는 진입점

  • 쉽게 말해 Amazon EKS 와 통신할 수 있는 방법을 말합니다.

 

EKS 의 API Server와 통신하는 주체는 크게 2가지로 나뉠 수 있습니다.

  1. 사용자(User)가 EKS 에 명령(kubectl)하기 위해 통신
  2. Worker Node(Data Plane)이 Control Plane 과 통신

 

  • EKS API Endpoint 구성은 통신 주체에 따라 다음의 3가지로 구성될 수 있습니다.

EKS API Endpoint 구성

  1. Public ( User & Node : Public 통신 )
  2. Public + Private ( User : Public 통신 + Node : Private 통신 )
  3. Private ( User & Node : Private 통신 )

 

그럼 그 구성을 하나씩 살펴 보도록 하겠습니다.

 

 

1.1. EKS 배포

  • EKS는 eksctl 을 사용하여 배포하였습니다.
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

# General Cluster Information
metadata:
  name: kimalarm-cluster
  region: ap-northeast-2
  version: "1.24"

# Use an Existing VPC
vpc:
  id: vpc-025a46418c3a1cad4
  subnets: 
    public:
      ap-northeast-2a: { id: subnet-07fa1e6dff438ef6d }
      ap-northeast-2c: { id: subnet-0323e5bbb82a31daf }
    # private:
    #   ap-northeast-2a: { id: subnet-0771bf66b3ed37ded }
    #   ap-northeast-2c: { id: subnet-09c0da5808393597c }
  clusterEndpoints:
    publicAccess:  true
  #   privateAccess: true
  publicAccessCIDRs: ["0.0.0.0/0"]
  # nat:
  #   gateway: Single

managedNodeGroups:
  # Spot Instance
  - name: kimalarm-spot-node-group
    instanceType: t3.medium
    spot: true
    desiredCapacity: 2
    volumeSize: 20
    ssh:
      allow: true # will use ~/.ssh/id_rsa.pub as the default ssh key

 

2. Public Endpoint

  • Public Endpoint Architecture

 

EKS 를 Public 으로 구성할 시, EKS 콘솔에서 다음과 같은 화면을 확인할 수 있습니다.

 

2.1. EKS Endpoint 확인 (User)

a. 사용자가 kubectl 명령어를 통해 통신하는 EKS API 엔드포인트의 주소를 확인해봅니다.

 

b. 해당 URL 을 브라우저에 입력하면 다음과 같은 화면을 확인할 수 있습니다.

 

c. 해당 엔드포인트의 IP 를 확인해봅시다.

dig +short F0F389096A28717AC20C26817AB1150B.gr7.ap-northeast-2.eks.amazonaws.com

 

해당 Endpoint 는 공인 IP 로 구성되어 있는 것을 확인할 수 있습니다.

 

2.2. EKS Endpoint 확인 (Worker Node)

  • Worker Node 에서 EKS API Server 를 호출할 때 사용하는 IP를 확인해보겠습니다.

 

a. 우선 Worker Node 에 SSH 접속을 시도합니다.

 

b. 해당 Worker Node 에서 소켓 정보를 확인해봅니다.

sudo ss -tnp

 

Worker Node 또한, 공인 IP 를 통해 EKS API Server 와 통신하고 있음을 알 수 있습니다.



3. Public + Private Endpoint

  • EKS Architecture

 

a. Private Endpoint 활성화를 위해 cluster.yaml 파일을 수정합니다.

... <생략> ...
vpc:
  clusterEndpoints:
    publicAccess: true
    privateAccess: true
... <생략> ...

 

eksctl utils update-cluster-endpoints -f cluster.yaml --approve

 

EKS 를 Public + Private 으로 구성할 시, EKS 콘솔에서 다음과 같은 화면을 확인할 수 있습니다.

 

3.1. EKS Endpoint 확인 (User)

a. 사용자가 kubectl 명령어를 통해 통신하는 EKS API 엔드포인트의 주소를 확인해봅니다.

  • 웹 브라우저에서는 그대로 정보가 표출되는 것을 확인할 수 있습니다.

 

b. 내 컴퓨터에서 EKS Endpoint 확인

dig +short f0f389096a28717ac20c26817ab1150b.gr7.ap-northeast-2.eks.amazonaws.com

 

 

3.2. EKS Endpoint 확인 (Worker Node)

  • Worker Node 에서 EKS API Server 를 호출할 때 사용하는 IP를 확인해보겠습니다.

 

a. Bastion 에서 EKS Endpoint IP를 확인해봅니다.

 

b. Worker Node 에서 소켓 정보를 확인해봅니다.

 

VPC 내부에서 EKS Endpoint 를 호출했을 때는 Private IP 를 사용하는 것을 알 수 있습니다.

 

4. Full Private Endpoint

  • EKS Architecture

a. Private Endpoint 활성화를 위해 cluster.yaml 파일을 수정합니다.

... <생략> ...
vpc:
  clusterEndpoints:
    publicAccess: false
    privateAccess: true
  # publicAccessCIDRs: ["0.0.0.0/0"]    
... <생략> ...

 

eksctl utils update-cluster-endpoints -f cluster.yaml --approve

 

EKS 를 Private 으로 구성할 시, EKS 콘솔에서 다음과 같은 화면을 확인할 수 있습니다.

 

 

4.1. EKS Endpoint 확인 (User)

a. 사용자가 kubectl 명령어를 통해 통신하는 EKS API 엔드포인트의 주소를 확인해봅니다.

 

b. 내 컴퓨터에서 EKS Endpoint 확인

dig +short f0f389096a28717ac20c26817ab1150b.gr7.ap-northeast-2.eks.amazonaws.com

 

Endpoint 의 IP 가 사설 IP 로 변경된 것을 알 수 있습니다.

 

c. Bastion Host 에서 EKS Endpoint 확인

dig +short f0f389096a28717ac20c26817ab1150b.gr7.ap-northeast-2.eks.amazonaws.com
curl -s -k https://F0F389096A28717AC20C26817AB1150B.gr7.ap-northeast-2.eks.amazonaws.com

 

 

4.2. EKS Endpoint 확인 (Worker Node)

  • Worker Node 에서 EKS API Server 를 호출할 때 사용하는 IP를 확인해보겠습니다.

 

a. Worker Node 에서 소켓 정보를 확인해봅니다.

모두 Private IP 를 바라보고 있는 것을 알 수 있습니다.

 

Endpoint 업데이트 후 kubelet & kube-proxy 가 Public Endpoint 를 바라보고 있을 때는,
서비스를 재시작해주면 Private 으로 바라보게 됩니다.

 

 


이번 글에서는 EKS API Endpoint 에 대해 알아보았습니다.

되도록이면 Public 만 사용하는 것을 지양하고, Private 을 사용하는 것이 좋겠습니다.

불가피하게 Public 을 사용할 경우, Access Control 을 통해 접근할 수 있는 IP를 관리하는 것이 필요하겠습니다.

 

 

다음 글에서는 EKS Network 에 대해 자세하게 알아보겠습니다.

 

참고 문서

 

Amazon EKS 클러스터 엔드포인트 액세스 제어 - Amazon EKS

다음 명령은 API 서버 엔드포인트에 대한 단일 IP 주소에서 프라이빗 액세스 및 퍼블릭 액세스를 활성화합니다. 203.0.113.5/32를 단일 CIDR 블록 또는 네트워크 액세스를 제한할 쉼표로 구분된 CIDR 블

docs.aws.amazon.com

 

Contents

포스팅 주소를 복사했습니다