EKS API를 VPN 뒤에 두기: 작업 순서
프라이빗 엔드포인트를 활성화하고 kubectl이 도달했음을 증명한 다음 퍼블릭 엔드포인트를 닫습니다. 각 단계 사이의 명령과 점검을 담은 단계별 런북입니다.
이 변경의 위험한 버전은 명령 하나로 엔드포인트를 뒤집고 동시에 모든 관리자를 잠그는 것입니다. 안전한 버전은 두 경로를 모두 열어 두고, 프라이빗 경로가 VPN에서 작동함을 증명한 뒤에야 퍼블릭 엔드포인트를 폐기합니다. 기존 클러스터, 해당 VPC로의 승인된 터널, 이미 작동하는 kubeconfig를 가정합니다. 목표는 Kubernetes API에 대한 프라이빗 접근이며 프라이빗 노드나 새로운 권한 모델이 아닙니다. 아래 각 단계에는 안전하게 실패할 수 있는 점검이 있습니다.
1. 엔드포인트를 목록화하고 돌아갈 길을 확보하세요
변경 전에 현재 상태를 기록하세요. 퍼블릭 CIDR 허용 목록과 클러스터 보안 그룹도 포함합니다. 무엇인가 작동을 멈출 때 비교할 대상이 바로 이 둘이며, 허용 목록은 프라이빗 경로가 잘못된 것으로 밝혀질 경우의 롤백 경로이기도 합니다.
aws eks describe-cluster --region REGION --name CLUSTER \
--query 'cluster.{endpoint:endpoint,public:resourcesVpcConfig.endpointPublicAccess,private:resourcesVpcConfig.endpointPrivateAccess,cidrs:resourcesVpcConfig.publicAccessCidrs}'
여기서 REGION과 CLUSTER는 자리 표시자입니다. 프라이빗 플래그가 지금 무엇을 보여 주는지 확인하세요. 프라이빗 접근이 이미 활성화된 채로 만들어진 클러스터는 한 번도 가져본 적 없는 클러스터와 다른 첫 단계가 필요합니다. 전환 중에는 승인된 관리 경로를 최소 하나 열어 두세요. 같은 클러스터의 도달 가능성에 의존하는 VPN은 복구 경로가 아닙니다.
2. 네트워크 경로가 준비된 상태에서 프라이빗 접근을 활성화하세요
플래그를 켜는 것은 쉬운 절반입니다. 터널에는 엔드포인트의 프라이빗 주소로 가는 경로가 필요하고, 클러스터 보안 그룹에는 VPN이 실제로 제시하는 소스에서 오는 TCP 443이 필요합니다. Client VPN 연결, 사이트 간 게이트웨이, 피어링된 VPC는 모두 서로 다른 소스 주소를 제시할 수 있으므로 일반적인 프라이빗 범위 대신 실제로 배포한 모델을 사용하세요.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=true,endpointPrivateAccess=true
aws eks describe-update --region REGION --name CLUSTER --update-id UPDATE_ID
업데이트는 비동기입니다. 고정된 시간을 기다리며 가정하지 말고 업데이트 id가 성공을 보고할 때까지 조회하세요. 그동안 노드와 컨트롤 플레인 트래픽은 그대로 두세요. 클러스터의 보안 그룹 전체를 노트북용 규칙으로 바꾸는 것이 바로 작동하는 데이터 플레인을 두 번째 사고로 만드는 방법입니다.
EKS 엔드포인트 문서 는 한 번 전체를 읽어 볼 가치가 있습니다. 프라이빗 전용 접근이 VPC나 연결된 네트워크에서 올 수 있다고 설명하기 때문입니다. 그 문장이 이 마이그레이션을 가능하게 하는 이유 전체이며, 다음 단계가 존재하는 이유이기도 합니다.
3. 워크스테이션이 프라이빗 경로를 사용했음을 증명하세요
두 엔드포인트가 모두 활성화된 상태에서 kubectl get ns 이 성공해도 어느 쪽이 응답했는지는 증명되지 않습니다. 엔드포인트의 호스트 이름을 확인하고 받은 주소가 프라이빗 범위인지 퍼블릭 범위인지 점검하세요. 연결된 네트워크가 DNS를 통해 프라이빗 뷰를 받지 못하면 명령은 퍼블릭 엔드포인트로 성공하고, 여러분은 거짓 증거에 기반해 퍼블릭 경로를 폐기하게 됩니다. 이것이 이 마이그레이션이 잘못되는 가장 흔한 방식이며, 성공과 똑같이 보입니다.
nslookup HASH.gr7.REGION.eks.amazonaws.com
kubectl cluster-info
kubectl get ns --request-timeout=10s
호스트 이름과 인증서 검증은 그대로 유지하세요. kubeconfig에서 프라이빗 IP로 바꾸고 TLS 검증을 건너뛰는 것은 변경 기록에 설명한 마이그레이션이 아니며, 엔드포인트가 교체되는 순간 다시 실패합니다.
4. 퍼블릭 접근을 의도적으로 폐기하세요
프라이빗 경로가 입증되고 복구 절차가 승인되면 퍼블릭 엔드포인트를 닫으세요. 이것은 미리보기가 아니라 실제 변경이므로 정말로 의도한 계정과 설정에 대해 실행하세요.
aws eks update-cluster-config --region REGION --name CLUSTER \
--resources-vpc-config endpointPublicAccess=false,endpointPrivateAccess=true
프라이빗 전용 모드에서는 퍼블릭 DNS 이름이 VPC 내부에서 엔드포인트의 프라이빗 주소로 확인되므로, 확인과 도달 가능성이 더 이상 같은 것이 아닙니다. 퍼블릭 주소에 의존하던 모든 것, 예를 들어 CI 러너나 다른 네트워크의 노트북은 이제 자체 진입 경로가 필요합니다.
5. 네트워크 정책과 자격 증명 정책을 분리하세요
퍼블릭 접근 CIDR 목록은 퍼블릭 엔드포인트만 제어합니다. 프라이빗 엔드포인트를 제한하지 않으며, 그쪽은 클러스터 보안 그룹과 연결 네트워크 정책으로 제한됩니다. 퍼블릭 엔드포인트를 유지한다면 그 허용 목록은 API 클라이언트와 노드가 실제로 사용하는 퍼블릭 이그레스와 일치해야 합니다. VPN 풀 주소가 그 소스인 경우는 드뭅니다.
이 중 어느 것도 IAM이나 Kubernetes RBAC을 바꾸지 않습니다. 엔드포인트 설정은 관리 작업이며, 일반 사용자가 API에 도달하기 위해 경계를 완화할 권한을 받아서는 안 됩니다. 최종 상태, 날짜, 복구 경로를 런북에 적고, 아직 쉬울 때 복구 경로를 한 번 테스트하세요.