CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 1주차 도전과제 정리
이번 글에서는 EKS 의 API Endpoint 에 대해 알아보겠습니다.
1. EKS API Server Endpoint 개요
EKS Control Plane 의 API Server 에 접근할 수 있는 진입점
- 쉽게 말해 Amazon EKS 와 통신할 수 있는 방법을 말합니다.
EKS 의 API Server와 통신하는 주체는 크게 2가지로 나뉠 수 있습니다.
- 사용자(User)가 EKS 에 명령(kubectl)하기 위해 통신
- Worker Node(Data Plane)이 Control Plane 과 통신
- EKS API Endpoint 구성은 통신 주체에 따라 다음의 3가지로 구성될 수 있습니다.
EKS API Endpoint 구성
- Public ( User & Node : Public 통신 )
- Public + Private ( User : Public 통신 + Node : Private 통신 )
- 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
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
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 에 대해 자세하게 알아보겠습니다.
참고 문서