기본적으로 Google Kubernetes Engine (GKE) 노드는 각 노드의 kubelet 프로세스를 사용하여 Kubernetes API 서버에 노드 객체를 등록합니다. 이 문서에서는
보안 GKE 노드의
자체 등록
을 방지하고 대신 신뢰할 수 있는 GKE 컨트롤
플레인 구성요소가 등록 작업을 수행하도록 요구하는 방법을 보여줍니다. 보안 엔지니어와 플랫폼 관리자는 컨트롤 플레인 노드 생성을 사용하여 노드의 권한을 제한할 수 있습니다.
다음 개념에 익숙해야 합니다.
GKE의 노드 생성 모드
모든 GKE 클러스터에서 사용 설정되는 보안 GKE 노드는 노드 등록 프로세스 중에 노드 ID의 암호화 검증을 적용합니다. 이 검증을 통해 적법한 노드만 Kubernetes API 서버에 등록하고 워크로드를 실행할 수 있습니다.
각 노드의 kubelet이 API 서버에서 Node 객체를 만들고 수정하는 GKE 클러스터의 기본 등록 워크플로는 노드가 손상된 경우 위험을 초래합니다. 예를 들어
CVE-2025-5187에서 취약점
으로 인해 노드 사용자가 해당 Node 객체를 삭제하고 손상된 노드를 등록할 수 있었습니다.
컨트롤 플레인 노드 생성
GKE 버전 1.35.3-gke.1189000 이상에서는 kubelet이 노드를 자체 등록하도록 허용하는 대신 신뢰할 수 있는 GKE 컨트롤 플레인 구성요소(gcp-controller-manager)가 Node 객체를 만들도록 선택적으로 요구할 수 있습니다. kubelet이 암호화된 방식으로 검증된 노드 ID를 사용하여 API 서버와의 TLS 연결을 설정한 후 gcp-controller-manager 구성요소가 Node 객체를 만듭니다. 허용 컨트롤러는 Node 객체를 만들라는 kubelet의 모든 요청을 거부합니다. 컨트롤 플레인 구성요소를 사용하여 Node 객체를 만들면 잠재적으로 손상된 노드가 임의의 Node 객체를 만들거나 Node 사양을 조작할 위험을 줄일 수 있습니다.
기본 노드 생성 및 등록 동작을 변경하려면 Standard 또는 Autopilot 클러스터를 만들 때 다음 중 하나를 수행합니다.
- Google Cloud CLI:
--node-creation-mode플래그에CONTROL_PLANE값을 지정합니다. - Kubernetes Engine API:
NodeCreationConfig메서드의node-creation-mode필드에VIA_CONTROL_PLANE값을 지정합니다.
제한사항
gcp-controller-manager가 Kubernetes API에서 Node 객체를 만든 시점과 kubelet이 전체 노드 라벨 및 주석 집합으로 Node 객체를 업데이트하는 시점 사이에 약간의 지연이 있습니다. 노드 생성 시 전체 라벨 또는 주석 집합에 의존하는 워크로드 또는 컨트롤러는 예기치 않은 동작을 보일 수 있습니다. 특정 라벨과 주석은 kubelet 등록과 다른 시간에 조정될 수 있습니다. 작업을 수행하기 전에 워크로드 및 DaemonSet에서 라벨 및 주석 존재 확인을 사용하는지 확인합니다.
- 준비되지 않은 노드에서 포드가 실행될 수 있는 모든 노드 taint에 대한 허용 오차가 있는 DaemonSet 및 워크로드를 배포하지 마세요.
initContainer를 사용하여 기본 컨테이너를 실행하기 전에 노드 라벨을 확인합니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면
설치한 후
초기화합니다.
gcloud CLI를 이전에 gcloud CLI를 설치했으면 최신
버전을
gcloud components update명령어를 실행하여 가져옵니다. 이전 gcloud CLI 버전에서는 이 문서의 명령어를 실행하지 못할 수 있습니다.
컨트롤 플레인 노드 생성 사용 설정
클러스터를 만들거나 기존 클러스터를 업데이트할 때 gcp-controller-manager 구성요소를 사용하여 노드 생성을 사용 설정할 수 있습니다. 기존 클러스터의 경우 업데이트는 클러스터의 새 노드에만 영향을 미칩니다. 기존 노드는 변경사항의 영향을 받지 않습니다.
다음 명령어는 기존 클러스터의 컨트롤 플레인 노드 생성 모드를 사용 설정합니다.
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=CONTROL_PLANE \
--location=CONTROL_PLANE_LOCATION \
다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.CONTROL_PLANE_LOCATION: 클러스터 컨트롤 플레인의 리전 또는 영역입니다.
클러스터 만들기 명령어와 클러스터 create-auto 명령어에서 --node-creation-mode 플래그를 지정할 수도 있습니다.
컨트롤 플레인 노드 생성 사용 중지
가 언제든지 노드를 만드는 기본 GKE 동작으로 되돌릴 수 있습니다. --node-creation-mode Google Cloud CLI 플래그에서 KUBELET 값을 지정하거나 NodeCreationConfig GKE API 메서드에서 VIA_KUBELET 값을 지정하면 됩니다.kubelet 기존 클러스터의 경우 이 변경사항은 해당 클러스터의 새 노드에만 영향을 미칩니다.
다음 명령어는 클러스터를 업데이트하여 컨트롤 플레인 노드 생성을 사용 중지합니다.
gcloud container clusters update CLUSTER_NAME \
--node-creation-mode=KUBELET \
--location=CONTROL_PLANE_LOCATION \
다음을 바꿉니다.
CLUSTER_NAME: 클러스터 이름입니다.CONTROL_PLANE_LOCATION: 클러스터 컨트롤 플레인의 리전 또는 영역입니다.
다음 단계
- 보안 GKE 노드에 대해 자세히 알아보세요.
- GKE 보안 개요를 읽어보세요.
- 클러스터의 보안을 강화하는 방법을 알아보세요.