GCP를 활용하여 Spring 프로젝트 진행 중에 ADC(Application Default Credentials)를 활용하는 과정이 있었다. 구글에 있는 사용자 인증 정보를 자동으로 검색하기 위해서 인증 라이브러리에 사용되는 전략이다. ADC를 사용할 때는 Google Cloud 서비스 및 API에 대한 애플리케이션 인증 방법을 변경하지 않고 개발 또는 프로덕션 환경에서 코드를 실행할 수 있다.
ADC가 사용자 인증 정보를 찾는 위치와 순서에 대한 자세한 내용은 참고문서를 참조하자.
API 키를 사용하는 경우 ADC를 설정할 필요가 없고 자세한 내용은 API 키 사용을 참고하자.
ADC에 사용자 인증 정보를 제공하는 방법은 코드 실행 중인 환경을 일단 선택합니다
- 로컬 개발 환경
- Google Cloud 클라우드 개발 환경
- 서비스 계정 연결을 지원하는 Compute Engine 또는 기타 Google Cloud 서비스
- Google Kubernetes Engine 또는 GKE Enterprise
이 중에서 GKE를 활용하여 사용자 인증 정보를 제공하는 방법을 진행하기로 했다.
먼저 GKE란 Google Cloud의 관리형 kybernetes 서비스인 Google Kubernetes Engine(GKE)이다. Kubernetes는 컨테이너를 위한 오픈소스 Orchestrator로 쿠버네티스를 쉽게 사용자가 활용할 수 있도록 관리형으로 제공하는 Google Cloud의 솔루션으로 그림과 같이 다양한 기능을 제공하고 있다.
결국, GKE는 Container 애플리케이션 배포를 위한 관리형 환경으로써 자동화된 작업을 유연하게 진행할 수 있다. 운영환경에서 변화의 영역이 적은 마스터 노드에 대한 완전관리 서비스를 제공하고, 실제 서비스를 수행하는 Container의 집합인 Pod가 옳라가서 운영되는 Worker Node 는 관리형으로 설정만 하면 기본 Kubernetes에 필요한 컴포넌트를 GCE(VM)를 제공해서 개발자가 직접 Pod를 올리거나 작업을 수행할 수 있도록 지원해준다.
GKE 시작해보자.
먼저 gcp에서 GKE를 생성하는 부분부터 보면 관리콘솔로 가서 Kubernetes Engine을 선택하여 create cluster 메뉴를 이용해 GKE cluster를 생성해준다.
create cluster 메뉴를 클릭하면 하단과 같이 GKE cluster 생성 마법사가 나오는데 가장 먼저 왼쪽의 메뉴를 보면 여러 종류의 클러스터를 큰 카테고리로 선택가능하다. 해당 메뉴는 다양한 운영환경을 고려해서 이에 적합한 옵션들이 사전 선택된 템플릿으로 보면 되고 해당 카테고리를 선택하여 자동으로 해당 설정들이 오른쪽 세부 설정에 들어가게 된다. 예를 들어서 GPU Accelerated Computing 이면 자동으로 노드에 사용되는 GCE(VM)에 GPU가 자동 설정으로 추가가 된다.
우측의 세부 설정에는 GKE를 Zonal 형태로 만들지 Regional 형태로 만들지 Location type에 대한 설정 및 버전, Node pool 등을 지정할 수 있다. GKE는 zone라는 Google cloud의 데이터 센터에서 마스터 노드가 하나 존재하는 Zonal 형태가 있고 GKE의 마스터 노드에 대한 고가용성을 추가하고자 하면 Region 안의 여러 zone 별로 마스터를 두는 Regional 형태의 GKE cluster를 선택할 수 있다.
GKE의 Zone, Region 개념을 아래에서 더 살펴보자.
https://cloud.google.com/docs/geography-and-regions?hl=ko
다음으로는 Node pools에 대한 설정이다. Node pools는 이름 그대로 Node의 집합이고 Node는 결국 GCE(VM)이기 때문에 이미지 타입과 머신 타입등을 설정하게 되어있다. 메뉴를 보면 GCE(CPU, Memory 등)을 사용할지와 Node 개수만 넣어주면 간단하게 설정을 할 수 있다. 또 하나가 아닌 여러 Node pools를 만들어서 GKE 버전이나 GCE 머신타입을 다르게 구성하여 다양한 환경을 위한 GCE 그룹을 운영하는 것도 가능하다.
그리고 필요하면 좀 더 유연하게 GKE cluster의 Node pool에 대한 Autoscaling 기능을 사용할 수 있다. 즉, 요청에 따라서 Node 자체를 동적으로 늘리거나 줄일 수 있다는 의미다.(해당 옵션을 켜보면 최소/최대 node 수를 입력하는 화면이 나온다.)
Node pools 메뉴 닫고 상세 메뉴에서 고급 옵션을 펼치면 GKE cluster에 대한 세부 설정이 가능하다. 여기서 중요한 포인트는 Auto Upgrade 기능이다. 업데이트가 중요한 GKE에서 매번 수동으로 업데이트 해야하는 고민을 없애주는 기능이 Auto Upgrade 기능이다. 그리고 Maintenance windows는 Auto upgrade를 수행할 시간을 지정할 수 있는 기능이다.
그리고 Network에 VPC-native 기능에 대한 설정을 확인할 수 있는데 해당 기능은 타사의 관리형 Kubernetes와 다르게 Google cloud 만이 제공할 수 있는 기능이고 별도의 NAT없이 독립적인 Kubernetes의 네트워크 구조를 사용하는 GKE를 다른 Google cloud 서비스랑 바로 연동할 수 있도록 GCP의 VPC와 엮는 옵션이다.
또 별도 설치 작업 없이 Network policy 설정을 바로 enable 가능하고 GKE cluster에서 Project Calico를 통해 네트워크 정책을 적용해서 유연하고 안전한 설정을 할 수 있다. Network security 항목은 Enterprise 환경에서 적합하도록 보안을 추가해서 네트워크 설정을 할 수 있는 기능으로 예를 들어서 보안화된 엔터프라이즈 환경을 위해 인터넷에서 접근이 안되는 private cluster로 만들거나 특정 IP만 master node에 접근하도록 허용하는 기능들에 대한 것이다.
그리고 마지막으로 GKE cluster의 node에 머신러닝을 위해 GPU가 아닌 TPU를 사용할 수도 있다. GKE cluster 환경을 이용해서 ML 작업을 하면 굉장히 유용할 듯하다.
이렇게 설정을 하고나면 GKE cluster가 5분 이내에 만들어진다. 다음에는 GKE 클러스터를 하나하나 살펴보는 시간을 가지도록 한다.