설명
프라이빗 노드는 외부 IP 없이 운영되고, 프라이빗 제어 플레인 IP 엔드포인트는 관리 접근을 사설 네트워크 경로로 제한합니다. 두 설정은 서로 다르며, 공용 엔드포인트가 있다고 해서 익명 접근이나 관리자 권한이 허용되는 것은 아닙니다.
사설 IP 설정과 DNS 기반 엔드포인트의 접근 통제도 별개입니다. 실제 사용하는 엔드포인트, IAM·Kubernetes 권한과 연결 경로를 함께 확인해야 합니다.
잠재적 영향
- 불필요한 공용 접근 경로는 외부 공격 표면을 넓힐 수 있습니다.
- 사설 관리 경로를 준비하지 않고 공용 경로를 끄면 관리 도구나 자동화가 연결되지 않을 수 있습니다.
해결 방법
- 노드에 외부 IP가 필요하지 않으면
enable_private_nodes = true를 사용하고 필요한 외부 통신 경로를 준비하세요. - IP 기반 관리 접근을 사설로 제한하려면 관리 네트워크를 연결한 뒤
enable_private_endpoint = true를 적용하세요. - DNS 엔드포인트 접근 통제는 별도로 확인하고 kubectl, CI/CD와 관리 도구의 연결 및 권한을 검증하세요.
예시
private_cluster_config 설정 발췌입니다. VPC, 서브넷, IP 할당과 해당 버전에 필요한 제어 플레인 주소 범위 등은 별도로 준비하세요. 두 예제 모두 프라이빗 노드를 사용하며 제어 플레인 IP 엔드포인트 설정만 다릅니다.
변경 전
hcl
resource "google_container_cluster" "cluster" {
name = "marcellus-wallace"
location = "us-central1-a"
initial_node_count = 3
private_cluster_config {
enable_private_endpoint = false
enable_private_nodes = true
}
timeouts {
create = "30m"
update = "40m"
}
}
변경 후
hcl
resource "google_container_cluster" "cluster" {
name = "marcellus-wallace"
location = "us-central1-a"
initial_node_count = 3
private_cluster_config {
enable_private_endpoint = true
enable_private_nodes = true
}
timeouts {
create = "30m"
update = "40m"
}
}
설명:
- 변경 전: 노드의 외부 IP는 사용하지 않지만 제어 플레인의 외부 IP 엔드포인트는 유지합니다. 인증과 권한 검사는 별도로 적용됩니다.
- 변경 후: 제어 플레인 IP 엔드포인트도 사설 경로로 제한합니다. DNS 엔드포인트 설정까지 자동으로 제한하는 것은 아닙니다.