비공개 클러스터

이 페이지에서는 Google Kubernetes Engine(GKE)에서 비공개 클러스터가 작동하는 방식을 설명합니다. 비공개 클러스터를 만들고 관리하는 방법도 설명합니다.

비공개 클러스터는 공개 인터넷에 대한 인바운드 및 아웃바운드 연결로부터 노드를 격리하는 기능을 제공합니다. 이 격리는 노드에 내부 IP 주소만 있기 때문에 수행됩니다.

특정 비공개 노드에 아웃바운드 인터넷 액세스 권한을 부여하려면 Cloud NAT를 사용하거나 자체 NAT 게이트웨이를 관리하면 됩니다.

노드 IP 주소는 비공개이지만 외부 클라이언트는 클러스터의 서비스에 연결할 수 있습니다. 예를 들어 LoadBalancer 유형의 서비스를 만들고 외부 클라이언트가 부하 분산기의 IP 주소를 호출할 수 있습니다. 아니면 NodePort 유형의 서비스를 만든 후 인그레스를 만들 수 있습니다. GKE는 서비스와 인그레스의 정보를 사용하여 HTTP(S) 부하 분산기를 구성합니다. 그러면 외부 클라이언트가 HTTP(S) 부하 분산기의 외부 IP 주소를 호출할 수 있습니다.

다음 다이어그램은 비공개 클러스터의 아키텍처를 간략하게 보여줍니다.

비공개 클러스터 아키텍처

비공개 클러스터에서 비공개 Google 액세스 사용

기본적으로 비공개 Google 액세스는 사용 설정되어 있습니다. 비공개 Google 액세스는 Google Cloud API 및 Google 비공개 네트워크에 대한 서비스로 제한된 아웃바운드 액세스 권한이 있는 비공개 노드와 워크로드를 제공합니다. 예를 들어 비공개 Google 액세스는 비공개 노드가 Container Registry에서 컨테이너 이미지를 가져오고 Cloud Logging으로 로그를 전송할 수 있게 합니다.

비공개 클러스터의 제어 영역

모든 GKE 클러스터에는 제어 영역(마스터)에서 관리되는 하는 Kubernetes API 서버가 있습니다. 제어 영역은 Google 소유 프로젝트의 VPC 네트워크에 있는 VM에서 실행됩니다. 리전 클러스터에는 여러 제어 영역이 있으며 각 제어 영역은 자체 VM에서 실행됩니다.

비공개 클러스터에서 제어 영역의 VPC 네트워크는 VPC 네트워크 피어링을 통해 클러스터의 VPC 네트워크에 연결됩니다. VPC 네트워크에는 클러스터 노드가 포함되고 별도의 Google Cloud VPC 네트워크에는 클러스터의 제어 영역이 포함됩니다. 제어 영역의 VPC 네트워크는 Google에서 관리하는 프로젝트에 있습니다. 노드와 제어 영역 간의 트래픽은 전적으로 내부 IP 주소를 통해 라우팅됩니다.

VPC 네트워크 피어링 재사용

새로 생성된 모든 비공개 클러스터는 기존의 VPC 네트워크 피어링 연결을 자동으로 재사용합니다. 처음 만든 영역 또는 리전 비공개 클러스터는 새로운 VPC 네트워크 피어링 연결을 생성합니다. 동일한 영역, 리전 또는 네트워크에 있는 추가 비공개 클러스터는 VPC 네트워크 피어링 연결을 추가적으로 만들지 않아도 같은 피어링을 사용할 수 있습니다. 예를 들어 us-east1-b 영역에서 단일 영역 비공개 클러스터 두 개를 만들고 asia-east1 리전에서 리전 비공개 클러스터를 세 개 만들면 피어링 연결 두 개만 생성됩니다. 하지만 동일한 리전(예: asia-east1asia-east1-a)에 리전 클러스터와 영역 클러스터를 만들면 서로 다른 피어링 연결 두 개가 생성됩니다. 비공개 클러스터 연결을 재사용할 수 있는지 확인할 수 있습니다.

비공개 클러스터의 엔드포인트

비공개 클러스터의 제어 영역에는 공개 엔드포인트 외에도 비공개 엔드포인트가 있습니다. 비공개가 아닌 클러스터의 제어 영역에는 공개 엔드포인트만 있습니다.

비공개 엔드포인트
비공개 엔드포인트는 제어 영역의 VPC 네트워크에 있는 내부 IP 주소입니다. 비공개 클러스터에서 노드는 항상 제어 영역의 비공개 엔드포인트와 통신합니다. 구성에 따라 kubectl과 같은 도구를 사용하여 클러스터를 관리할 수 있으며 이 도구는 비공개 엔드포인트에도 연결됩니다. 비공개 클러스터를 통해 동일한 서브넷을 사용하는 모든 VM은 비공개 엔드포인트에 액세스할 수도 있습니다.
공개 엔드포인트
제어 영역의 외부 IP 주소입니다. 기본적으로 kubectl과 같은 도구는 공개 엔드포인트에서 제어 영역과 통신합니다. 승인된 네트워크를 사용하여 이 엔드포인트에 대한 액세스를 제어하거나 공개 엔드포인트에 대한 액세스를 중지할 수 있습니다.

표준 및 Autopilot 비공개 클러스터 모두 기본적으로 공개 제어 영역 엔드포인트를 사용합니다. 이 설정을 재정의하고 비공개 엔드포인트를 지정할 수 있습니다.

클러스터 엔드포인트에 액세스

다음 구성 중 하나를 사용하여 엔드포인트에 대한 액세스 수준을 제어할 수 있습니다.

  • 공개 엔드포인트 액세스 중지: 제어 영역에 대한 모든 인터넷 액세스를 차단하므로 가장 안전한 옵션입니다. Cloud InterconnectCloud VPN을 사용하여 온프레미스 네트워크를 Google Cloud에 연결하도록 구성한 경우에 적합합니다. 이러한 기술은 트래픽이 공개 인터넷을 거치지 않아도 되므로 회사 네트워크를 VPC에 효과적으로 연결합니다.

    공개 엔드포인트 액세스를 중지하면 비공개 엔드포인트에 승인된 네트워크를 구성해야 합니다. 이 작업을 수행하지 않으면 클러스터와 동일한 서브넷의 클러스터 노드 또는 VM에서만 비공개 엔드포인트에 연결할 수 있습니다. 또한 승인된 네트워크는 내부 IP 주소여야 합니다.

  • 공개 엔드포인트 액세스 사용 설정, 승인된 네트워크 사용 설정: 승인된 네트워크가 사용 설정된 상태로 비공개 클러스터를 사용하면 정의된 소스 IP 주소로부터 제어 영역에 대한 제한된 액세스를 제공합니다. 이는 기존 VPN 인프라가 없거나 회사 VPN, Cloud Interconnect 또는Cloud VPN 대신 공개 인터넷을 통해 연결하는 원격 사용자나 지사가 있는 경우에 적합합니다.

  • 공개 엔드포인트 액세스 사용 설정, 승인된 네트워크 중지: 기본값이며 최소한으로 제한되는 옵션입니다. 승인된 네트워크를 사용 설정하지 않으므로 인증 후 모든 소스 IP 주소에서 클러스터를 관리할 수 있습니다.

다음 표에는 엔드포인트에 액세스할 수 있는 여러 가지 방법이 요약되어 있습니다.

공개 엔드포인트 액세스 중지 공개 엔드포인트 액세스 사용 설정,
승인된 네트워크 사용 설정.
공개 엔드포인트 액세스 사용 설정,
승인된 네트워크 사용 안 함.
보안 제어 영역에 대한 최고 수준의 제한된 액세스. 제어 영역의 공개 엔드포인트에 대한 클라이언트 액세스가 차단됩니다. 제어 영역에 대한 액세스는 내부 IP 주소에서 이루어져야 합니다. 정의된 내부 및 외부 IP 주소로부터 제어 영역에 대한 제한된 액세스 모든 IP 주소로부터 제어 영역에 대한 액세스
세부 구성 단계 클라이언트가 공개 엔드포인트에 액세스할 수 없는 비공개 클러스터 만들기 공개 엔드포인트에 대한 액세스가 제한된 비공개 클러스터 만들기 공개 엔드포인트에 무제한으로 액세스할 수 있는 비공개 클러스터 만들기
Cloud Console 구성 옵션
  1. VPC 기반 사용을 선택합니다.
  2. 비공개 클러스터를 선택합니다.
  3. 외부 IP 주소를 사용하여 마스터에 액세스 선택을 취소합니다.
    마스터 승인 네트워크 사용이 자동으로 사용 설정됩니다.
  1. VPC 기반 사용을 선택합니다.
  2. 비공개 클러스터를 선택합니다.
  3. 외부 IP 주소를 사용하여 마스터에 액세스를 선택합니다.
  4. 마스터 승인 네트워크 사용을 선택합니다.
  1. VPC 기반 사용을 선택합니다.
  2. 비공개 클러스터를 선택합니다.
  3. 외부 IP 주소를 사용하여 마스터에 액세스를 선택합니다.
  4. 마스터 승인 네트워크 사용 선택을 취소합니다.
gcloud 클러스터 생성 플래그 --enable-ip-alias
--enable-private-nodes
--enable-private-endpoint
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--enable-master-authorized-networks
--enable-ip-alias
--enable-private-nodes
--no-enable-master-authorized-networks
노드와 제어 영역 간 통신

노드는 항상 비공개 엔드포인트를 사용하여 제어 영역과 통신합니다.

노드와 API 서버 간의 웹훅 통신

443 이외의 targetPort로 서비스를 사용하는 웹훅에는 이를 허용하는 방화벽 규칙이 필요합니다. 자세한 내용은 특정 사용 사례를 위한 방화벽 규칙 추가를 참조하세요.

마스터 승인 네트워크

노드 및 Pod가 아닌 내부 IP 주소로부터 제어 영역에 대한 액세스에 필요합니다.

노드의 내부 IP 주소 범위를 명시적으로 승인할 필요가 없습니다. 클러스터 서브넷의 기본 IP 주소 범위에 있는 주소는 항상 비공개 엔드포인트와 통신하도록 승인됩니다.

--master-authorized-networks를 사용하여 제어 영역에 액세스할 수 있는 추가 내부 IP 주소를 지정합니다. 공개 엔드포인트에 대한 액세스가 사용되지 않기 때문에 승인된 네트워크 목록에 외부 IP 주소를 포함할 수 없습니다.

외부 IP 주소와 내부 IP 주소(노드 및 Pod 제외)에서 제어 영역에 액세스하는 데 필요합니다.

--master-authorized-networks를 사용하여 제어 영역에 액세스할 수 있는 외부 및 내부 IP 주소(노드 및 Pod 제외)를 지정합니다.

사용되지 않음.

승인된 네트워크를 사용 설정하지 않고 제어 영역의 공개 엔드포인트에 대한 액세스를 사용 설정하면 제어 영역의 공개 엔드포인트에 대한 액세스가 제한되지 않습니다.

kubectl을 사용한 액세스

노드에서: 항상 비공개 엔드포인트를 사용합니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

클러스터의 VPC 네트워크에 있는 다른 VM에서: 다른 VM은 클러스터와 같은 리전에 있고 내부 IP 주소가 승인된 네트워크 목록에 있거나 클러스터의 노드와 동일한 서브넷에 있는 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있습니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

공개 IP 주소에서: 불가능합니다.

노드에서: 항상 비공개 엔드포인트를 사용합니다. kubectl은 반드시 비공개 엔드포인트를 사용하도록 구성되어야 합니다.

클러스터의 VPC 네트워크에 있는 다른 VM에서: 다른 VM은 클러스터와 같은 리전에 있고 내부 IP 주소가 승인된 네트워크 목록에 있거나 클러스터의 노드와 동일한 서브넷에 있는 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있습니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

공개 IP 주소에서: 공개 IP 주소가 있는 머신은 공개 IP 주소가 승인된 네트워크 목록에 포함된 경우에만 kubectl을 사용하여 공개 엔드포인트와 통신할 수 있습니다. 여기에는 Google Cloud 외부의 시스템과 외부 IP 주소가 포함된 Google Cloud VM이 포함됩니다.

노드에서: 항상 비공개 엔드포인트를 사용합니다. kubectl은 반드시 비공개 엔드포인트를 사용하도록 구성되어야 합니다.

클러스터의 VPC 네트워크에 있는 다른 VM에서: 다른 VM은 클러스터와 같은 리전에 있는 경우에만 kubectl을 사용하여 비공개 엔드포인트와 통신할 수 있습니다. kubectl비공개 엔드포인트를 사용하도록 구성되어야 합니다.

공개 IP 주소에서: 공개 IP 주소가 있는 모든 머신은 kubectl을 사용하여 공개 엔드포인트와 통신할 수 있습니다. 여기에는 Google Cloud 외부의 머신과 외부 IP 주소가 있는 Google Cloud VM이 포함됩니다.

다음 단계