클러스터 API 서버 엔드포인트
클러스터 API 서버 엔드포인트
Amazon EKS 클러스터의 Kubernetes API 서버 엔드포인트에 대한 프라이빗 접근을 활성화하고, 인터넷에서의 공용 접근을 제한하거나 완전히 비활성화하는 방법을 알아봐요.
출처: 문서
본문
새 클러스터를 만들면 Amazon EKS가 관리형 Kubernetes API 서버용 엔드포인트를 만들어요. kubectl 같은 Kubernetes 관리 도구로 이 엔드포인트를 사용해 클러스터와 통신합니다. 기본적으로 이 API 서버 엔드포인트는 인터넷에 공개되며, API 서버에 대한 접근은 AWS Identity and Access Management(IAM)와 네이티브 Kubernetes Role Based Access Control(RBAC)의 조합으로 보호돼요. 이 엔드포인트를 클러스터 공용 엔드포인트(cluster public endpoint)라고 해요. 또한 클러스터 프라이빗 엔드포인트(cluster private endpoint)도 있어요. 클러스터 프라이빗 엔드포인트에 대한 자세한 내용은 아래 Cluster private endpoint 섹션을 참고해 주세요.
IPv6 클러스터 엔드포인트 형식 (IPv6 cluster endpoint format)
EKS는 2024년 10월 이후 만든 새 IPv6 클러스터에 대해 다음 형식의 고유한 듀얼 스택 엔드포인트를 만들어요. IPv6 클러스터는 클러스터의 IP 패밀리(ipFamily) 설정에서 IPv6을 선택한 클러스터예요.
참고: 듀얼 스택 클러스터 엔드포인트는 2024년 10월에 도입됐어요.
IPv6클러스터에 대한 자세한 내용은 Learn about IPv6 addresses to clusters, Pods, and services 참고. 2024년 10월 이전에 만든 클러스터는 대신 이전 엔드포인트 형식을 사용해요.
IPv4 클러스터 엔드포인트 형식 (IPv4 cluster endpoint format)
EKS는 클러스터의 IP 패밀리(ipFamily) 설정에서 IPv4를 선택한 각 클러스터에 대해 다음 형식의 고유한 엔드포인트를 만들어요.
참고: 2024년 10월 이전에는
IPv6클러스터도 이 엔드포인트 형식을 사용했어요. 그 클러스터의 경우 공용 엔드포인트와 프라이빗 엔드포인트 모두 이 엔드포인트에서IPv4주소만 해석돼요.
클러스터 프라이빗 엔드포인트 (Cluster private endpoint)
Kubernetes API 서버에 대한 프라이빗 접근을 활성화해 노드와 API 서버 간의 모든 통신이 VPC 내에 머물도록 할 수 있어요. 인터넷에서 API 서버에 접근할 수 있는 IP 주소를 제한하거나 인터넷 접근을 완전히 비활성화할 수 있어요.
참고: 이 엔드포인트는 Kubernetes API 서버용이며 AWS API와 통신하는 전통적인 AWS PrivateLink 엔드포인트가 아니므로 Amazon VPC 콘솔에 엔드포인트로 나타나지 않아요.
클러스터에 엔드포인트 프라이빗 접근을 활성화하면 Amazon EKS가 사용자를 대신해 Route 53 프라이빗 호스팅 영역을 만들고 이를 클러스터의 VPC와 연결해요. 이 프라이빗 호스팅 영역은 Amazon EKS가 관리하며 계정의 Route 53 리소스에 나타나지 않아요. 프라이빗 호스팅 영역이 API 서버로 트래픽을 올바르게 라우팅하려면 VPC의 enableDnsHostnames와 enableDnsSupport가 true로 설정되어야 하고, VPC의 DHCP 옵션 세트가 도메인 이름 서버 목록에 AmazonProvidedDNS를 포함해야 해요. 자세한 내용은 Amazon VPC 사용자 안내서의 Updating DNS support for your VPC 참고.
API 서버 엔드포인트 접근 요구 사항은 새 클러스터를 만들 때 정의할 수 있고, 언제든지 클러스터의 API 서버 엔드포인트 접근을 업데이트할 수 있어요.
참고: 엔드포인트 접근은 누가 Kubernetes API 서버에 도달할 수 있는지를 제어해요. 제어 플레인에서 VPC의 리소스(웹훅 서버, OIDC 프로바이더 등)로 나가는 이그레스 트래픽도 관리하려면 Configuring control plane egress routing 참고.
클러스터 엔드포인트 접근 수정하기 (Modifying cluster endpoint access)
이 섹션의 절차로 기존 클러스터의 엔드포인트 접근을 수정할 수 있어요. 다음 표는 지원되는 API 서버 엔드포인트 접근 조합과 관련 동작을 보여줘요.
| 엔드포인트 공용 접근 | 엔드포인트 프라이빗 접근 | 동작 |
|---|---|---|
| 활성화 | 비활성화 | 새 Amazon EKS 클러스터의 기본 동작. 클러스터 VPC 내에서 시작된 Kubernetes API 요청(예: 노드-제어 플레인 통신)은 VPC를 떠나지만 Amazon 네트워크를 벗어나지 않음. 클러스터 API 서버는 인터넷에서 접근 가능. 선택적으로 공용 접근 CIDR 목록으로 공용 엔드포인트 접근을 제어할 수 있어요. 특정 CIDR 블록으로 제한하면 프라이빗 엔드포인트도 활성화하거나, 지정한 CIDR 블록이 노드와 Fargate 파드(사용하는 경우)가 공용 엔드포인트에 접근하는 주소를 포함하는지 확인할 것을 권장합니다. 워커 노드와 제어 플레인 간 트래픽에는 표준 AWS 데이터 전송 요금이 적용됩니다. Amazon EKS는 연결의 제어 플레인 쪽 데이터 전송 비용을 흡수해요. 자세한 내용은 Amazon EKS Pricing 참고. |
| 활성화 | 활성화 | 클러스터 VPC 내의 Kubernetes API 요청(예: 노드-제어 플레인 통신)은 프라이빗 VPC 엔드포인트를 사용해요. 클러스터 보안 그룹의 규칙으로 프라이빗 엔드포인트 접근을 제어합니다. 클러스터 API 서버는 인터넷에서 접근 가능. 선택적으로 공용 접근 CIDR 목록으로 공용 엔드포인트 접근을 제어할 수 있어요. Amazon EKS 클러스터와 하이브리드 노드를 사용한다면 공용과 프라이빗 엔드포인트 접근을 모두 활성화하는 것은 권장되지 않아요. 하이브리드 노드는 VPC 밖에서 실행되므로 클러스터 엔드포인트를 공용 IP 주소로 해석하기 때문이에요. 하이브리드 노드가 있는 클러스터에는 공용 또는 프라이빗 엔드포인트 접근 중 하나를 사용할 것을 권장합니다. |
| 비활성화 | 활성화 | 클러스터 API 서버에 대한 모든 트래픽은 클러스터 VPC 또는 연결된 네트워크 내에서 와야 해요. 인터넷에서 API 서버로의 공용 접근은 없어요. 모든 kubectl 명령은 VPC 내부 또는 연결된 네트워크에서 와야 해요. 연결 옵션은 Accessing a private only API server 참고. 클러스터 보안 그룹의 규칙으로 프라이빗 엔드포인트 접근을 제어합니다. 공용 접근 CIDR은 프라이빗 엔드포인트에 영향을 주지 않아요. 클러스터의 API 서버 엔드포인트는 공용 DNS 서버에 의해 VPC의 프라이빗 IP 주소로 해석됩니다. 과거에는 엔드포인트를 VPC 내에서만 해석할 수 있었어요. 기존 클러스터에서 엔드포인트가 VPC 내의 프라이빗 IP 주소로 해석되지 않으면: 1) 공용 접근을 활성화한 후 다시 비활성화합니다. 클러스터당 한 번만 하면 되며 그 후부터 엔드포인트는 프라이빗 IP 주소로 해석됩니다. 2) 클러스터를 업데이트합니다. |
엔드포인트 접근 제어 (Endpoint access controls)
다음 각 엔드포인트 접근 제어 방법은 해당 엔드포인트에만 영향을 준다는 점을 주의해 주세요.
- 클러스터 보안 그룹 (Cluster security group) — 클러스터 보안 그룹은 두 가지 유형의 연결을 제어해요: kubelet API와 프라이빗 엔드포인트로의 연결.
kubeletAPI로의 연결은kubectl attach,kubectl cp,kubectl exec,kubectl logs,kubectl port-forward명령에서 사용됩니다. 클러스터 보안 그룹은 공용 엔드포인트에는 영향을 주지 않아요. - 공용 접근 CIDR (Public access CIDRs) — 공용 접근 CIDR은 공용 엔드포인트에 대한 접근을 CIDR 블록 목록으로 제어합니다. 공용 접근 CIDR은 프라이빗 엔드포인트에 영향을 주지 않아요. 공용 접근 CIDR은 생성 날짜에 따라
IPv6및IPv4클러스터에서 다르게 동작합니다:- 공용 엔드포인트의 CIDR 블록 (
IPv6클러스터) — 공용 엔드포인트가 듀얼 스택이므로IPv6클러스터의 공용 엔드포인트에IPv6및IPv4CIDR 블록을 추가할 수 있어요. 이는 2024년 10월 이후ipFamily를IPv6로 설정해 만든 새 클러스터에만 적용됩니다. 새 엔드포인트 도메인 이름api.aws로 이 클러스터를 식별할 수 있어요. - 공용 엔드포인트의 CIDR 블록 (
IPv4클러스터) —IPv4클러스터의 공용 엔드포인트에IPv4CIDR 블록을 추가할 수 있어요.IPv4클러스터의 공용 엔드포인트에는IPv6CIDR 블록을 추가할 수 없어요. 시도하면 EKS는 다음 오류 메시지를 반환합니다:The following CIDRs are invalid in publicAccessCidrs - 공용 엔드포인트의 CIDR 블록 (2024년 10월 이전에 만든
IPv6클러스터) — 2024년 10월 이전에 만든 기존IPv6클러스터의 공용 엔드포인트에IPv4CIDR 블록을 추가할 수 있어요.eks.amazonaws.com엔드포인트로 이 클러스터를 식별할 수 있어요. 2024년 10월 이전에 만든 기존IPv6클러스터의 공용 엔드포인트에는IPv6CIDR 블록을 추가할 수 없어요. 시도하면The following CIDRs are invalid in publicAccessCidrs오류가 반환됩니다.
- 공용 엔드포인트의 CIDR 블록 (
프라이빗 전용 API 서버에 접근하기 (Accessing a private only API server)
클러스터의 Kubernetes API 서버 엔드포인트에 대한 공용 접근을 비활성화했다면 VPC 내부 또는 연결된 네트워크에서만 API 서버에 접근할 수 있어요. Kubernetes API 서버 엔드포인트에 접근할 수 있는 몇 가지 방법:
- 연결된 네트워크 (Connected network) — AWS transit gateway나 기타 연결 옵션으로 네트워크를 VPC에 연결한 다음, 연결된 네트워크의 컴퓨터를 사용합니다. Amazon EKS 제어 플레인 보안 그룹에 연결된 네트워크의 포트 443 인그레스 트래픽을 허용하는 규칙이 포함되어 있는지 확인해 주세요.
- Amazon EC2 배스천 호스트 (bastion host) — 클러스터 VPC의 공용 서브넷에 Amazon EC2 인스턴스를 시작한 다음 SSH로 로그인해 그 인스턴스에서
kubectl명령을 실행할 수 있어요. 자세한 내용은 Linux bastion hosts on AWS 참고. Amazon EKS 제어 플레인 보안 그룹에 배스천 호스트의 포트 443 인그레스 트래픽을 허용하는 규칙이 포함되어 있는지 확인해 주세요. 자세한 내용은 View Amazon EKS security group requirements for clusters 참고. 배스천 호스트에kubectl을 구성할 때 이미 클러스터의 RBAC 구성에 매핑된 AWS 자격 증명을 사용하거나, 엔드포인트 공용 접근을 제거하기 전에 배스천이 사용할 IAM 주체를 RBAC 구성에 추가해 주세요. 자세한 내용은 Grant IAM users and roles access to Kubernetes APIs 및 Unauthorized or access denied (kubectl) 참고. - AWS Cloud9 IDE — AWS Cloud9은 브라우저만으로 코드를 작성·실행·디버깅할 수 있는 클라우드 기반 통합 개발 환경(IDE)이에요. 클러스터의 VPC에 AWS Cloud9 IDE를 만들고 IDE로 클러스터와 통신할 수 있어요. 자세한 내용은 Creating an environment in AWS Cloud9 참고. Amazon EKS 제어 플레인 보안 그룹에 IDE 보안 그룹의 포트 443 인그레스 트래픽을 허용하는 규칙이 포함되어 있는지 확인해 주세요. 자세한 내용은 View Amazon EKS security group requirements for clusters 참고. Cloud9 IDE에
kubectl을 구성할 때 이미 클러스터의 RBAC 구성에 매핑된 AWS 자격 증명을 사용하거나, 엔드포인트 공용 접근을 제거하기 전에 IDE가 사용할 IAM 주체를 RBAC 구성에 추가해 주세요. 자세한 내용은 Grant IAM users and roles access to Kubernetes APIs 및 Unauthorized or access denied (kubectl) 참고. - AWS CloudShell — Amazon EKS 콘솔의 클러스터 세부 정보 페이지에서 Connect를 선택합니다. 프라이빗 클러스터의 경우 CloudShell이 클러스터의 프라이빗 API 서버 엔드포인트에 도달할 수 있는 VPC 환경을 시작해요. 자세한 내용은 Connect kubectl to an EKS cluster by creating a kubeconfig file 참고.