이 페이지에서는 GKE 클러스터 사용자 인증 정보를 순환하는 방법을 설명합니다. 클러스터를 정상 상태로 유지하려면 클러스터 사용자 인증 정보를 계획하고 정기적으로 순환하는 것이 중요합니다. 이 페이지에서는 사용자 인증 정보 순환을 실행하는 방법에 대해 알아봅니다. 정기 순환 계획을 위한 권장사항도 알아봅니다.
이 페이지는 GKE 클러스터의 사용자 인증 정보 수명 주기를 담당하는 보안 전문가를 대상으로 합니다. Google Cloud 콘텐츠에서 참조하는 일반적인 역할 및 예시 태스크에 대해 자세히 알아보려면 일반 GKE Enterprise 사용자 역할 및 태스크를 참조하세요.
GKE의 사용자 인증 정보 순환 정보
클러스터 루트 인증 기관(CA)은 수명이 제한됩니다. CA가 만료되면 클러스터 서명 인증서(MasterAuth
API 필드), API 서버의 키 및 인증서, kubelet 클라이언트 인증서를 포함하여 CA로 서명된 사용자 인증 정보가 더 이상 유효하지 않습니다.
클러스터 사용자 인증 정보의 전체 기간은 클러스터를 만든 시점 또는 사용자 인증 정보를 마지막으로 순환한 시점에 따라 다릅니다. 자세한 내용은 사용자 인증 정보 전체 기간을 확인하세요.
사용자 인증 정보 순환을 수행하여 사용자 인증 정보를 취소하고 클러스터에 새로운 사용자 인증 정보를 발급할 수 있습니다. 이 작업은 클러스터 CA 비공개 키를 순환하며, 새 사용자 인증 정보를 사용하기 위해 노드를 다시 만들어야 합니다. 현재 사용자 인증 정보가 만료되기 전에 클러스터의 사용자 인증 정보 순환을 시작하고 종료해야 합니다. 사용자 인증 정보 순환은 사용자 인증 정보 순환 외에도 IP 순환을 수행합니다.
사용자 인증 정보 순환을 수행해야 하는 경우
현재 사용자 인증 정보 만료일 전에 사용자 인증 정보를 정기적으로 수행해야 합니다. 사용자 인증 정보 순환이 새로운 사용자 인증 정보를 사용하기 위해 노드를 재생성해야 하므로 워크로드가 중단될 수 있습니다. 유지보수 기간을 계획하고 유지보수 기간 동안 순환을 수행하여 예기치 않은 워크로드 다운타임 또는 클러스터 외부의 API 클라이언트가 응답하지 않도록 합니다.
유지보수 가용성이 클러스터 사용자 인증 정보 순환에 미치는 영향과 순환 단계에서 클러스터에 발생하는 서비스 중단 유형에 관한 자세한 내용은 노드 업그레이드 전략을 사용하고 유지보수 정책을 준수하여 노드를 다시 만드는 수동 변경사항 표의 사용자 인증 정보 순환 행을 참조하세요. GKE는 노드 업데이트를 위한 리소스 가용성에 따라 달라집니다. 노드 업데이트에 대한 자세한 내용은 노드 업데이트 중단 계획을 참조하세요.
클러스터 사용자 인증 정보 전체 기간
클러스터 사용자 인증 정보의 전체 기간은 일반적으로 클러스터가 생성된 시점 또는 사용자 인증 정보가 가장 최근에 순환된 시점에 따라 다릅니다.
- 2021년 10월 이전에 생성된 클러스터의 CA 전체 기간은 5년입니다.
- 2021년 10월 이후에 생성된 클러스터의 CA 수명은 30년입니다.
- 2022년 1월 이후에 순환된 클러스터의 CA 수명은 30년입니다.
만료가 임박하거나 만료된 사용자 인증 정보가 있는 클러스터 찾기
클러스터의 사용자 인증 정보가 앞으로 180일 내에 만료되거나 클러스터의 사용자 인증 정보가 이미 만료된 경우, GKE는 이 클러스터에 대해 사용자 인증 정보 순환을 수행해야 함을 설명하는 통계와 권장사항을 제공합니다. 이 안내에는 사용자 인증 정보 만료일이 포함됩니다. 이 안내는 Google Cloud 콘솔에서 볼 수 있습니다. 또는 gcloud CLI 또는 Recommender API를 사용하여 CLUSTER_CA_EXPIRATION
하위유형을 지정하여 이 안내를 볼 수 있습니다.
클러스터에 대한 통계 및 권장사항을 받는 경우 사용자 인증 정보 순환을 수행해야 합니다. 그렇지 않으면 다음 섹션에 설명된 대로 GKE가 현재 CA 만료 날짜로부터 30일 이내에 사용자 인증 정보 순환을 자동으로 시작합니다. 사용자 인증 정보 순환이 완료된 후에는 통계 및 추천이 해결되는 데 최대 36시간이 걸릴 수 있습니다.
클러스터 중단을 방지하기 위한 GKE 자동화 정책
현재 사용자 인증 정보가 만료될 경우 클러스터가 복구 불가 상태로 전환되지 않도록 방지하기 위해 GKE는 현재 CA 만료 날짜로부터 30일 이내에 사용자 인증 정보 순환을 자동으로 시작합니다. 예를 들어 클러스터 CA는 2024년 1월 6일에 만료되고 2023년 12월 5일까지 사용자 인증 정보를 순환하지 않습니다. GKE는 2023년 12월 7일부터 자동 순환을 시작하고 작업이 시작된 후 7일 후에 이 순환을 완료하려고 시도합니다. 이러한 자동 순환은 클러스터 중단을 방지하기 위한 최후의 시도로서 다음과 같은 고려사항이 있습니다.
- 자동 순환은 일반적으로 유지보수 기간 또는 유지보수 제외를 준수하지만 GKE는 유지보수 가능 여부와 관계없이 만료일로부터 30일 이내에 사용자 인증 정보를 순환하는 단계를 실행할 권리를 보유합니다. 30일 이내에 GKE는 첫 번째 단계인 순환 시작의 유지보수 가능 여부를 무시합니다.
- 유지보수로 인해 GKE가 처음에 순환을 완료할 수 없는 경우 GKE는 사용자 인증 정보가 만료될 때까지 계속 순환을 완료하려고 시도하며, 그 후에는 클러스터를 복구할 수 없게 됩니다.
- 사용자 인증 정보 순환이 완료되면 만료되는 사용자 인증 정보가 취소됩니다. 로컬 환경의 kubectl과 같이 클러스터 외부의 Kubernetes API 클라이언트는 클라이언트가 새 사용자 인증 정보를 사용하도록 구성할 때까지 작동하지 않습니다.
- 순환 중 노드 풀 재생성으로 인해 워크로드 실행 중단이 발생할 수 있습니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화하세요. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
사용자 인증 정보 사용 기간 확인
클러스터 루트 CA의 유효성을 알 수 있도록 사용자 인증 정보 순환을 수행하기 전후에 사용자 인증 정보 사용 기간을 확인하는 것이 좋습니다.
단일 클러스터의 사용자 인증 정보 전체 기간을 확인하려면 다음 명령어를 실행합니다.
gcloud container clusters describe CLUSTER_NAME \
--location LOCATION \
--format "value(masterAuth.clusterCaCertificate)" \
| base64 --decode \
| openssl x509 -noout -dates
출력은 다음과 비슷합니다.
notBefore=Mar 17 16:45:34 2023 GMT
notAfter=Mar 9 17:45:34 2053 GMT
사용자 인증 정보 순환을 시작한 후 이 명령어를 실행할 경우 출력은 원래 인증서의 전체 기간입니다. 이 인증서는 순환을 완료할 때까지 유효 상태로 유지됩니다. 순환이 완료된 후의 출력은 새 인증서의 전체 기간입니다.
프로젝트에서 모든 클러스터의 사용자 인증 정보 전체 기간을 확인하려면 다음 명령어를 실행합니다.
gcloud container clusters list --project PROJECT_ID \
--format="value(name,masterAuth.clusterCaCertificate)" | \
while read -r cluster ca; do \
expiry_date=$(echo -e "$ca" | base64 --decode | openssl x509 -noout -enddate | awk -F'=' '{print $2}'); \
printf "%-40s | %s\n" "$cluster" "$expiry_date" ; \
done | \
column -t | \
awk -F',' 'BEGIN{print "Cluster Name | Certificate Expiry Date"} {print}'
사용자 인증 정보 순환 수행
사용자 인증 정보 순환에는 다음 단계가 포함됩니다.
- 순환 시작: 컨트롤 플레인이 원래 IP 주소 외에 새 IP 주소를 제공하기 시작합니다. 새로운 사용자 인증 정보가 워크로드 및 컨트롤 플레인에 발급됩니다.
- 노드 다시 만들기: 노드가 유지보수 기간 및 제외 항목으로부터 가용성을 고려해서 새 IP 주소 및 사용자 인증 정보를 사용하도록 GKE가 클러스터 노드를 다시 만듭니다. 또한 노드가 이미 실행된 동일한 GKE 버전으로 노드 버전 업그레이드를 수행하여 노드를 수동으로 재생성할 수 있습니다.
- API 클라이언트 업데이트: 순환을 시작한 후
kubectl
를 사용하는 개발 머신과 같은 클러스터 API 클라이언트를 업데이트하여 새 IP 주소를 사용하는 컨트롤 플레인과 통신합니다. - 순환 완료: 컨트롤 플레인이 원래 IP 주소를 통한 트래픽 처리를 중지합니다. Kubernetes ServiceAccounts의 기존 정적 사용자 인증 정보를 포함하여 오래된 사용자 인증 정보가 취소됩니다.
사용자 인증 정보 순환을 시작하거나 GKE가 자동으로 순환을 시작하면 GKE는 순환 완료를 시도하는 등 이러한 단계를 자동으로 실행합니다. 각 단계에서 클러스터 만료일이 30일 이상 남은 경우 GKE는 유지보수 가용성을 따릅니다. 클러스터 만료 전 자동 순환 중에 GKE는 클러스터가 복구 불가능 상태가 되는 것을 방지하기 위해 유지보수 가용성을 무시할 권리를 보유합니다. 30일 이내에 GKE는 첫 번째 단계인 순환 시작의 유지보수 가능 여부를 무시합니다.
시작하고 7일 이내에 사용자 인증 정보 순환을 완료하지 않으면 GKE가 순환을 완료하려고 시도합니다. 클러스터의 노드에 이전 사용자 인증 정보가 계속 사용되는 경우 자동 완료 작업이 실패하지만 GKE는 사용자 인증 정보가 만료되고 클러스터를 복구할 수 없을 때까지 계속 완료를 시도합니다. 시작한 모든 사용자 인증 정보 순환을 수동으로 추적하고 완료하도록 계획해야 합니다. 유지보수 사용 가능 여부 차단기를 재정의하려면 다음 각 섹션의 명령어를 실행하여 순환 프로세스의 해당 단계를 수동으로 트리거합니다. 항상 완벽한 것이 아니므로 자동 완성에만 의존하지 마십시오.
순환 시작
사용자 인증 정보 순환을 시작하려면 다음 명령어를 실행합니다.
gcloud container clusters update CLUSTER_NAME \
--location LOCATION \
--start-credential-rotation
이 명령어는 새 사용자 인증 정보를 만들고, 이러한 사용자 인증 정보를 컨트롤 플레인에 발급하고, 원본 IP 주소와 새 IP 주소의 두 IP 주소로 작동하도록 제어 영역을 구성합니다.
노드 다시 만들기
새 IP 주소로 서비스를 제공하도록 API 서버를 다시 구성한 후 유지보수 가용성이 있는 경우 GKE가 새 IP 주소 및 사용자 인증 정보를 사용하도록 노드를 자동으로 업데이트합니다. GKE는 노드가 이미 실행된 동일한 GKE 버전으로 모든 노드를 업그레이드해서 노드를 다시 만듭니다. 자세한 내용은 노드 풀 업그레이드를 참조하세요.
기본적으로 GKE는 작업을 시작한 후 7일 내에 사용자 인증 정보 순환을 자동으로 완료합니다. 클러스터의 활성 유지보수 기간 또는 제외로 인해 GKE가 이 7일 동안 일부 노드를 다시 만들지 못하는 경우 사용자 인증 정보 순환이 처음에 완료되지 않습니다. 그러나 GKE는 유지보수 가용성이 허용될 때까지 노드를 재생성하고 순환을 완료하려고 계속 시도합니다. Google Cloud Next와 같은 주요 이벤트 중에는 GKE가 자동 노드 재생성을 일시 중지하여 중단이 발생하지 않게 할 수도 있습니다.
순환 실패의 원인이 될 수 있는 유지보수 제외 또는 유지보수 기간을 사용하는 경우 클러스터를 수동 업그레이드하여 노드를 강제로 다시 만듭니다.
gcloud container clusters upgrade CLUSTER_NAME \ --location=LOCATION \ --cluster-version=VERSION
VERSION
을 클러스터에서 이미 사용 중인 동일한 GKE 버전으로 바꾸세요.자세한 내용은 GKE 유지보수 정책을 준수하는 수동 변경사항을 참조하세요.
노드 풀 재생성 진행 상황 확인
순환 작업을 모니터링하려면 다음 명령어를 실행합니다.
gcloud container operations list \ --filter="operationType=UPGRADE_NODES AND status=RUNNING" \ --format="value(name)"
이 명령어는 노드 업그레이드 작업의 작업 ID를 반환합니다.
작업을 폴링하려면 작업 ID를 다음 명령어에 전달합니다.
gcloud container operations wait OPERATION_ID
노드 풀이 하나씩 다시 생성되고 각 노드 풀에 고유한 작업이 포함됩니다. 노드 풀이 여럿인 경우, 다음 안내에 따라 각 작업을 폴링합니다.
API 클라이언트 업데이트
사용자 인증 정보 순환이 시작된 후에는 새 사용자 인증 정보를 사용하고 컨트롤 플레인의 새 IP 주소를 가리키도록 클러스터 외부의 모든 API 클라이언트(예: 개발자 머신의 kubectl
)를 업데이트해야 합니다.
API 클라이언트를 업데이트하려면 각 클라이언트에 다음 명령어를 실행합니다.
gcloud container clusters get-credentials CLUSTER_NAME \
--location LOCATION
Kubernetes ServiceAccount 사용자 인증 정보 업데이트
클러스터에서 ServiceAccount에 대한 정적 사용자 인증 정보를 사용하는 경우 단기 사용자 인증 정보로 전환하세요. 순환을 완료하면 기존의 ServiceAccount 사용자 인증 정보가 무효로 됩니다. 단기 사용자 인증 정보를 사용하지 않으려면 순환을 완료한 후 클러스터의 모든 ServiceAccount에 대해 정적 사용자 인증 정보를 다시 만들어야 합니다.
하드코딩된 IP 주소 및 방화벽 규칙 업데이트
사용자 환경에서 컨트롤 플레인의 IP 주소를 하드코딩했거나 컨트롤 플레인의 IP 주소를 타겟팅하는 방화벽 규칙이 있는 경우 주소를 새 IP 주소로 업데이트합니다. 애플리케이션 및 방화벽 규칙에서 IP 주소를 업데이트하지 않고 순환을 완료하면 GKE가 이전 컨트롤 플레인 IP 주소 제공을 중지할 때 해당 리소스에 중단이 발생할 수 있습니다.
순환 완료
클러스터 외부에서 API 클라이언트를 업데이트한 후 순환을 완료하여 컨트롤 플레인이 새 사용자 인증 정보 및 새 IP 주소만 제공하도록 구성합니다.
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--complete-credential-rotation
사용자 인증 정보 순환이 완료되지 않고 다음과 유사한 오류 메시지가 반환되면 오류 400: 노드 풀 다시 만들기 필요를 참조하세요.
ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.
GKE는 순환을 자동으로 완료할 때 유지보수 가용성을 준수하지만, 클러스터가 복구 불가 상태가 되지 않도록 하기 위해 만료 후 30일 이내에 이 가용성을 무시할 수 있습니다. 순환 완료가 처음에 실패하고 순환이 최소 7일 전에 시작된 경우 GKE는 사용자 인증 정보가 만료되는 날짜까지 순환을 완료하려고 시도하며 이 후에는 클러스터를 복구할 수 없습니다.