이 페이지에서는 컨트롤 플레인과 노드에서 요청을 인증하는 방법을 포함하여 Google Kubernetes Engine(GKE) 클러스터에서의 트러스트를 설명합니다.
클러스터 내 통신
클러스터에는 Kubernetes 구성요소 간 통신을 위한 많은 연결이 있습니다.
- 컨트롤 플레인-노드 간
컨트롤 플레인은 노드와 통신하여 컨테이너를 관리합니다. 컨트롤 플레인이 공개 클러스터의 노드에 요청(예:
kubectl logs
)을 보내면 이 요청은 Konnectivity Proxy 터널을 통해 전송됩니다. 비공개 클러스터의 노드에 대한 요청은 VPC 피어링을 통해 전송됩니다. 컨트롤 플레인에서 보낸 요청은 TLS로 보호되므로 인증, 무결성, 암호화를 제공합니다. 노드가 컨트롤 플레인에 요청을 보내면(예를 들어 kubelet에서 API 서버로) 요청은 상호 TLS를 이용해 인증 및 암호화됩니다.새로 생성되고 업데이트된 모든 클러스터는 컨트롤 플레인-노드 간 통신에 TLS 1.3을 사용합니다. TLS 1.2는 컨트롤 플레인-노드 간 통신에 지원되는 최소 버전입니다.
- 노드 간
노드는 Google Cloud 프로덕션 네트워크 내 연결이 인증되고 암호화되는 Compute Engine VM입니다. 자세한 내용은 전송 중인 데이터 암호화 백서의 VM 간 섹션을 참조하세요.
- 포드 간
포드가 다른 포드에 요청을 전송할 때 이 트래픽은 기본적으로 인증되지 않습니다. GKE는 네트워크 계층에서 서로 다른 노드에 있는 포드 간 트래픽을 암호화합니다. 같은 노드에 있는 포드 간의 트래픽은 기본적으로 암호화되지 않습니다. 네트워크 계층 암호화에 대한 자세한 내용은 Google Cloud의 가상 네트워크 암호화 및 인증을 참조하세요.
NetworkPolicy으로 포드 간 트래픽을 제한할 수 있습니다. Cloud Service Mesh와 같은 서비스 메시나 다른 애플리케이션 레이어 암호화 방법을 사용해 동일한 노드의 트래픽을 포함한 모든 포드 간 트래픽을 암호화할 수 있습니다.
- etcd 간
etcd 인스턴스는 다른 etcd 인스턴스와 통신하여 업데이트된 상태를 유지할 수 있습니다. etcd의 인스턴스가 다른 인스턴스에 요청을 전송하면 이 요청은 상호 TLS를 사용하여 인증되고 암호화됩니다. 트래픽은 방화벽으로 보호되는 GKE 소유 네트워크를 벗어나지 않습니다.
- 컨트롤 플레인-etcd 간
이 통신은 상호 TLS를 사용하여 암호화됩니다.
신뢰할 수 있는 루트
GKE 구성은 다음과 같습니다.
- 클러스터 루트 인증 기관은 API 서버 및 kubelet 클라이언트 인증서의 유효성을 검사하는 데 사용됩니다. 즉, 컨트롤 플레인과 노드의 신뢰할 수 있는 루트는 동일합니다. 클러스터 노드 풀 내의 모든 kubelet은 인증서 서명 요청을 제출하여
certificates.k8s.io
API를 사용해 이 CA에 인증서를 요청할 수 있습니다. 루트 CA는 클러스터 루트 CA 수명 섹션에 설명된 대로 수명이 제한됩니다. - 별도의 클러스터별 etcd CA는 etcd의 인증서 유효성 검사에 사용됩니다.
API 서버 및 kubelet
API 서버와 kubelet은 트러스트에 클러스터 루트 CA를 사용합니다. GKE에서 컨트롤 플레인 API 인증서는 클러스터 루트 CA에 의해 서명됩니다. 클러스터마다 자체 CA가 실행되므로 클러스터 하나의 CA가 손상되더라도 다른 클러스터 CA는 영향을 받지 않습니다.
내부 서비스가 이 CA의 루트 키를 관리하며 이 키를 내보낼 수 없습니다. 이 서비스는 각 GKE 클러스터에 있는 kubelet의 요청을 비롯한 인증서 서명 요청을 수락합니다. 클러스터의 API 서버가 손상되더라도 CA는 손상되지 않으므로 다른 클러스터는 영향을 받지 않습니다.
클러스터의 각 노드에는 클러스터 루트 CA에 인증서 서명 요청을 전송하고 kubelet 클라이언트 인증서를 획득하는 데 사용할 수 있는 공유 보안 비밀이 생성 시 주입됩니다. 그런 다음 이러한 인증서는 kubelet이 API 서버에 요청을 인증하는 데 사용됩니다. 이 공유 보안 비밀은 보안 GKE 노드 또는 GKE용 워크로드 아이덴티티 제휴를 사용 설정하지 않는 한 노드의 포드에서 연결할 수 없습니다.
클러스터 루트 CA 수명
클러스터 루트 CA는 수명이 제한되며, 그 이후로는 만료된 CA에서 서명한 인증서가 유효하지 않습니다. 사용자 인증 정보 사용 기간 확인의 안내에 따라 클러스터 CA의 만료일을 확인합니다.
기존 루트 CA가 만료되기 전에 사용자 인증 정보를 수동으로 순환해야 합니다. CA가 만료되고 사용자 인증 정보를 순환하지 않으면 클러스터가 복구 불가 상태로 전환될 수 있습니다. 복구 불가 클러스터를 방지하기 위한 다음과 같은 메커니즘이 있습니다.
- CA가 만료되기 7일 전에 클러스터가
DEGRADED
상태로 전환됩니다. GKE는 CA가 만료되기 30일 전에 자동 사용자 인증 정보 순환을 시도합니다. 이러한 자동 순환은 유지보수 기간을 무시하므로 GKE에서 새 사용자 인증 정보를 사용하도록 노드를 다시 만들 때 중단이 발생할 수 있습니다. 로컬 환경의 kubectl과 같은 외부 클라이언트는 새 사용자 인증 정보를 사용하도록 업데이트할 때까지 작동하지 않습니다.
순환을 수행하는 방법은 클러스터 사용자 인증 정보 순환을 참조하세요.
etcd
GKE에서 etcd는 트러스트에 별도의 클러스터별 etcd CA를 사용합니다.
etcd CA의 루트 키는 컨트롤 플레인이 실행되는 각 가상 머신(VM)의 메타데이터에 배포됩니다. 컨트롤 플레인 VM에서 실행되거나 이러한 VM의 컴퓨팅 메타데이터에 대한 액세스 권한이 있는 모든 코드는 이 CA로 인증서에 서명할 수 있습니다. 클러스터의 etcd가 손상되었더라도 CA가 클러스터 간에 공유되지 않으므로 다른 클러스터는 영향을 받지 않습니다.
etcd 인증서는 5년간 유효합니다.
인증서 순환
모든 클러스터의 API 서버 및 kubelet 인증서를 순환시키려면 사용자 인증 정보 순환을 수행하세요. etcd 인증서의 순환을 트리거하는 방법은 없습니다. 이것은 GKE에서 관리합니다.