클러스터 사용자 인증 정보 순환


이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터에서 사용자 인증 정보 순환을 수행하는 방법을 설명합니다.

GKE의 사용자 인증 정보 순환 정보

클러스터 루트 인증 기관(CA)은 수명이 제한됩니다. CA가 만료되면 클러스터 서명 인증서(MasterAuth API 필드), API 서버의 키 및 인증서, kubelet 클라이언트 인증서를 포함하여 CA로 서명된 사용자 인증 정보가 더 이상 유효하지 않습니다. 자세한 내용은 클러스터 루트 CA 수명을 참조하세요.

사용자 인증 정보 순환을 수행하여 사용자 인증 정보를 취소하고 클러스터에 새로운 사용자 인증 정보를 발급할 수 있습니다. 이 작업은 클러스터 CA 비공개 키를 순환하며, 새 사용자 인증 정보를 사용하기 위해 노드를 다시 만들어야 합니다. 현재 사용자 인증 정보가 만료되기 전에 클러스터의 사용자 인증 정보 순환을 시작하고 종료해야 합니다. 사용자 인증 정보 순환은 사용자 인증 정보 순환 외에도 IP 순환을 수행합니다.

사용자 인증 정보 순환을 수행해야 하는 경우

현재 사용자 인증 정보 만료일 전에 사용자 인증 정보를 정기적으로 수행해야 합니다. 사용자 인증 정보 순환이 새로운 사용자 인증 정보를 사용하기 위해 노드를 재생성해야 하므로 워크로드가 중단될 수 있습니다. 유지보수 기간을 계획하고 유지보수 기간 동안 순환을 수행하여 예기치 않은 워크로드 다운타임 또는 클러스터 외부의 API 클라이언트가 응답하지 않도록 합니다.

만료가 임박하거나 만료된 사용자 인증 정보가 있는 클러스터 찾기

클러스터의 사용자 인증 정보가 앞으로 180일 내에 만료되거나 클러스터의 사용자 인증 정보가 이미 만료된 경우, GKE는 이 클러스터에 대해 사용자 인증 정보 순환을 수행해야 함을 설명하는 통계와 권장사항을 제공합니다. 이 안내에는 사용자 인증 정보 만료일이 포함됩니다. 이 안내는 Google Cloud 콘솔에서 볼 수 있습니다. 또는 gcloud CLI 또는 Recommender API를 사용하여 CLUSTER_CA_EXPIRATION 하위유형을 지정하여 이 안내를 볼 수 있습니다.

클러스터에 대한 통계 및 권장사항을 받는 경우 사용자 인증 정보 순환을 수행해야 합니다. 그렇지 않으면 다음 섹션에 설명된 대로 GKE가 현재 CA 만료 날짜로부터 30일 이내에 사용자 인증 정보 순환을 자동으로 시작합니다.

클러스터 중단을 방지하기 위한 GKE 자동화 정책

현재 사용자 인증 정보가 만료될 경우 클러스터가 복구 불가 상태로 전환되지 않도록 방지하기 위해 GKE는 현재 CA 만료 날짜로부터 30일 이내에 사용자 인증 정보 순환을 자동으로 시작합니다. 예를 들어 클러스터 CA가 2024년 1월 6일에 만료되고 2023년 12월 5일까지 사용자 인증 정보를 순환하지 않으면 GKE가 2023년 12월 7일부터 자동 순환을 시작하고, 작업이 시작되면 7일 후에 순환이 완료됩니다. 이러한 자동 순환은 클러스터 중단을 방지하기 위한 최후의 시도로서 다음과 같은 고려사항이 있습니다.

  • 자동 순환은 구성된 유지보수 기간 또는 유지보수 예외를 무시합니다.
  • 사용자 인증 정보 순환이 완료되면 만료되는 사용자 인증 정보가 취소됩니다. 로컬 환경의 kubectl과 같이 클러스터 외부의 Kubernetes API 클라이언트는 클라이언트가 새 사용자 인증 정보를 사용하도록 구성할 때까지 작동하지 않습니다.
  • 순환 중 노드 풀 재생성으로 인해 워크로드 실행 중단이 발생할 수 있습니다.

GKE에서 시작된 자동 순환은 서비스 중단을 방지하는 최후의 조치입니다. 이러한 자동 순환에만 의존하지 마세요. 완전한 서비스 중단을 방지하기 위한 예방적 긴급 조치입니다.

시작하기 전에

시작하기 전에 다음 태스크를 수행했는지 확인합니다.

  • 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 \
    --region REGION_NAME \
    --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 \
    | awk 'NR>1 {print "echo; echo Validity for cluster " $1 " in location " $2 ":;\
         gcloud container clusters describe --project PROJECT_ID " $1 " --location " $2 " \
         --format \"value(masterAuth.clusterCaCertificate)\" \
         | base64 --decode | openssl x509 -noout -dates"}' \
    | bash

사용자 인증 정보 순환 수행

사용자 인증 정보 순환은 다음 단계로 구성됩니다.

  1. 순환 시작: 제어 영역이 원래 IP 주소 외에 새 IP 주소를 제공하기 시작합니다. 새로운 사용자 인증 정보가 워크로드 및 제어 영역에 발급됩니다.
  2. 노드 다시 만들기: 노드가 유지보수 기간 및 제외 항목으로부터 가용성을 고려해서 새 IP 주소 및 사용자 인증 정보를 사용하도록 GKE가 클러스터 노드를 다시 만듭니다.
  3. API 클라이언트 업데이트: 순환을 시작한 후 kubectl를 사용하는 개발 머신과 같은 클러스터 API 클라이언트를 업데이트하여 새 IP 주소를 사용하는 제어 영역과 통신합니다.
  4. 순환 완료: 제어 영역이 원래 IP 주소를 통한 트래픽 처리를 중지합니다. Kubernetes ServiceAccounts의 기존 정적 사용자 인증 정보를 포함하여 오래된 사용자 인증 정보가 취소됩니다.

순환 시작

사용자 인증 정보 순환을 시작하려면 다음 명령어를 실행합니다.

gcloud container clusters update CLUSTER_NAME \
    --region REGION_NAME \
    --start-credential-rotation

이 명령어는 새 사용자 인증 정보를 만들고, 이러한 사용자 인증 정보를 제어 영역에 발급하고, 원본 IP 주소와 새 IP 주소의 두 IP 주소로 작동하도록 제어 영역을 구성합니다.

노드 다시 만들기

새 IP 주소로 서비스를 제공하도록 API 서버를 다시 구성한 후 유지보수 가용성이 있는 경우 GKE가 새 IP 주소 및 사용자 인증 정보를 사용하도록 노드를 자동으로 업데이트합니다. GKE는 노드가 이미 실행된 동일한 GKE 버전으로 모든 노드를 업그레이드해서 노드를 다시 만듭니다. 자세한 내용은 노드 풀 업그레이드를 참조하세요.

기본적으로 GKE는 작업을 시작한 후 7일 내에 사용자 인증 정보 순환을 자동으로 완료합니다. 클러스터의 활성 유지보수 기간 또는 제외로 인해 GKE가 이 7일 동안 일부 노드를 다시 만들지 못하는 경우 사용자 인증 정보 순환이 완료되지 않습니다.

  • 순환 실패의 원인이 될 수 있는 유지보수 제외 또는 유지보수 기간을 사용하는 경우 클러스터를 수동 업그레이드하여 노드를 강제로 다시 만듭니다.

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION
    

    VERSION을 클러스터에서 이미 사용 중인 동일한 GKE 버전으로 바꾸세요.

    자세한 내용은 유지보수 기간 주의사항을 참조하세요.

노드 풀 재생성 진행 상황 확인

  1. 순환 작업을 모니터링하려면 다음 명령어를 실행합니다.

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    이 명령어는 노드 업그레이드 작업의 작업 ID를 반환합니다.

  2. 작업을 폴링하려면 작업 ID를 다음 명령어에 전달합니다.

    gcloud container operations wait OPERATION_ID
    

노드 풀이 하나씩 다시 생성되고 각 노드 풀에 고유한 작업이 포함됩니다. 노드 풀이 여럿인 경우, 다음 안내에 따라 각 작업을 폴링합니다.

API 클라이언트 업데이트

사용자 인증 정보 순환이 시작된 후에는 새 사용자 인증 정보를 사용하고 제어 영역의 새 IP 주소를 가리키도록 클러스터 외부의 모든 API 클라이언트(예: 개발자 머신의 kubectl)를 업데이트해야 합니다.

API 클라이언트를 업데이트하려면 각 클라이언트에 다음 명령어를 실행합니다.

gcloud container clusters get-credentials CLUSTER_NAME \
    --region REGION_NAME

Kubernetes ServiceAccount 사용자 인증 정보 업데이트

클러스터에서 ServiceAccount에 대한 정적 사용자 인증 정보를 사용하는 경우 단기 사용자 인증 정보로 전환하세요. 순환을 완료하면 기존의 ServiceAccount 사용자 인증 정보가 무효로 됩니다. 단기 사용자 인증 정보를 사용하지 않으려면 순환을 완료한 후 클러스터의 모든 ServiceAccount에 대해 정적 사용자 인증 정보를 다시 만들어야 합니다.

하드코딩된 IP 주소 및 방화벽 규칙 업데이트

사용자 환경에서 제어 영역의 IP 주소를 하드코딩했거나 제어 영역의 IP 주소를 타겟팅하는 방화벽 규칙이 있는 경우 주소를 새 IP 주소로 업데이트합니다. 애플리케이션 및 방화벽 규칙에서 IP 주소를 업데이트하지 않고 순환을 완료하면 GKE가 이전 제어 영역 IP 주소 제공을 중지할 때 해당 리소스에 중단이 발생할 수 있습니다.

순환 완료

클러스터 외부에서 API 클라이언트를 업데이트한 후 순환을 완료하여 제어 영역이 새 사용자 인증 정보 및 새 IP 주소만 제공하도록 구성합니다.

gcloud container clusters update CLUSTER_NAME \
    --region=REGION_NAME \
    --complete-credential-rotation

사용자 인증 정보 순환이 완료되지 않고 다음과 유사한 오류 메시지가 반환되면 문제 해결을 참조하세요.

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

다음 단계