이 페이지에서는 Google Kubernetes Engine(GKE) 클러스터에서 제어 영역의 IP 순환을 수행하는 방법을 설명합니다.
개요
IP 순환을 수행하면 제어 영역에서 Kubernetes API의 요청을 처리하는 데 사용하는 IP 주소를 변경할 수 있습니다. 제어 영역 IP 주소는 고정되어 있으며 IP 순환을 수행하지 않는 한 변경되지 않습니다.
IP 순환은 SSL 인증서와 클러스터 인증 기관(CA)을 변경하여 이전 주소를 새 주소와 연결하는 기능을 제한합니다.
또한 IP 순환은 사용자 인증 정보 순환의 일부로 수행됩니다.
시작하기 전에
시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- Google Kubernetes Engine API를 사용 설정합니다. Google Kubernetes Engine API 사용 설정
- 이 태스크에 Google Cloud CLI를 사용하려면 gcloud CLI를 설치한 후 초기화합니다. 이전에 gcloud CLI를 설치한 경우
gcloud components update
를 실행하여 최신 버전을 가져옵니다.
IP 순환 수행
IP 순환은 여러 단계로 이루어진 프로세스입니다.
- IP 순환을 시작하면 제어 영역이 원래 IP 주소 외에 새 IP 주소도 제공하기 시작합니다.
- GKE가 새 IP 주소를 사용하도록 노드 풀을 다시 만듭니다. 또한 노드가 이미 실행된 것과 동일한 GKE 버전으로 노드 풀 버전 업그레이드를 수행하여 노드 풀을 수동으로 다시 만들 수도 있습니다.
- 순환을 시작한 후에는 새 IP 주소를 통해 제어 영역과 통신하도록 클러스터의 API 클라이언트(예:
kubectl
명령줄 인터페이스를 사용하는 개발 머신)를 업데이트해야 합니다. - 순환이 완료되면 제어 영역이 이전 IP 주소를 통한 트래픽 처리를 중지합니다.
IP 주소 순환을 시작하면 GKE가 노드를 다시 만듭니다. 하지만 Google Cloud Next와 같은 주요 이벤트 중에는 이용 중단이 발생하지 않도록 자동 노드 재생성이 일시 중지될 수 있습니다. 시작한 지 7일 이내에 IP 주소 순환을 완료하지 않으면 GKE가 대신 순환을 완료하려고 시도합니다. 클러스터의 노드에 이전 IP 주소가 계속 사용되는 경우 자동 완료가 실패합니다. 순환을 시작한 후 IP 주소 순환을 수동으로 추적하고 완료하도록 계획해야 합니다. 항상 완벽한 것이 아니므로 자동 완성에만 의존하지 마십시오.
순환 시작
IP 순환을 시작하려면 다음 명령어를 실행합니다.
gcloud container clusters update CLUSTER_NAME \ --start-ip-rotation
CLUSTER_NAME
을 클러스터 이름으로 바꿉니다.출력은 다음과 비슷합니다.
This will start an IP Rotation on cluster CLUSTER_NAME. The master will be updated to serve on a new IP address in addition to the current IP address. Google Kubernetes Engine will then schedule recreation of all nodes to point to the new IP address. If maintenance window is used, nodes are not recreated until a maintenance window occurs. See documentation on how to manually update nodes. This operation is long-running and will block other operations on the cluster (including delete) until it has run to completion. Do you want to continue (Y/n)?
이 명령어는 제어 영역에서 원래 주소와 새 주소 등 IP 주소 두 개를 제공하도록 구성합니다.
순환을 확인하고 작업이 완료될 수 있도록 셸을 열어 둡니다.
노드 다시 만들기
새 IP 주소로 제공하도록 API 서버를 재구성한 후 GKE가 새 IP 주소를 사용하도록 노드를 자동으로 업데이트합니다. GKE는 모든 노드를 지원되는 가장 가까운 노드 버전으로 업그레이드하여 노드를 다시 만듭니다. 자세한 내용은 노드 풀 업그레이드를 참조하세요.
기본적으로 GKE는 작업을 시작한 후 7일 내에 IP 주소 순환을 자동으로 완료합니다. 클러스터의 활성 유지보수 기간 또는 제외로 인해 GKE가 이 7일 동안 일부 노드를 다시 만들지 못하는 경우 IP 주소 정보 순환이 완료되지 않습니다.
순환 실패의 원인이 될 수 있는 유지보수 제외 또는 유지보수 기간을 사용하는 경우 클러스터를 수동 업그레이드하여 노드를 강제로 다시 만듭니다.
gcloud container clusters upgrade CLUSTER_NAME \ --location=LOCATION \ --cluster-version=VERSION
VERSION
을 클러스터에서 이미 사용 중인 동일한 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 순환을 시작한 후에는 새 IP 주소를 가리키도록 클러스터 외부의 모든 API 클라이언트(예: 개발자 머신의 kubectl
)를 업데이트해야 합니다.
API 클라이언트를 업데이트하려면 각 클라이언트에 다음 명령어를 실행합니다.
gcloud container clusters get-credentials CLUSTER_NAME
하드코딩된 IP 주소 및 방화벽 규칙 업데이트
사용자 환경에서 제어 영역의 IP 주소를 하드코딩했거나 제어 영역의 IP 주소를 타겟팅하는 방화벽 규칙이 있는 경우 주소를 새 IP 주소로 업데이트합니다. 애플리케이션 및 방화벽 규칙에서 IP 주소를 업데이트하지 않고 순환을 완료하면 GKE가 이전 제어 영역 IP 주소 제공을 중지할 때 해당 리소스에 중단이 발생할 수 있습니다.
순환 완료
클러스터 외부에서 API 클라이언트를 업데이트한 후 순환을 완료하여 제어 영역에서 새 IP 주소만 제공하도록 구성합니다.
순환을 완료하려면 다음 명령어를 실행하세요.
gcloud container clusters update CLUSTER_NAME \
--complete-ip-rotation
출력은 다음과 비슷합니다.
This will complete the in-progress IP Rotation on cluster CLUSTER_NAME.
The master will be updated to stop serving on the old IP address and only
serve on the new IP address. Make sure all API clients have been updated
to communicate with the new IP address (e.g. by running `gcloud container
clusters get-credentials --project PROJECT_ID --region COMPUTE_REGION
CLUSTER_NAME`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.
IP 주소 순환이 완료되지 않고 다음과 유사한 오류 메시지가 반환되면 문제 해결을 참조하세요.
ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.