Cloud/GCP

[GCP] GKE 클러스터 생성 및 기능 정리

Jen'_' 2023. 1. 27. 19:54
반응형

 

개요 

GCP GKE를 생성해 보고 AWS EKS와 비교해 보겠습니다.

Standard로 생성합니다. 

 

클러스터 기본사항

위치 유형

  • 영역: 컨트롤 플레인이 해당 한 개의 영역에만 설치된다.
  • 리전: 컨트롤 플레인이 해당 리전에 여러 개의 영역에 설치된다.

제어 영역 버전 (마스터 버전)

  • 출시 채널(Release channel): 새 버전이 나올 때마다 GKE 자동 업그레이드 된다. 각 채널 별로 업그레이드 버전 출시 속도가 다르므로 각 채널 특징을 확인하여 원하는 채널을 선택한다.  https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels
  • 정적 버전(Static channel): GKE 자동 업그레이드를 사용하지 않는다. 수동으로 업그레이드를 해야 한다.

 

AWS EKS와 제일 다른 점이 GCP GKE는 자동 업그레이드를 지원한다는 것이다!
새로운 버전이 릴리즈 될 때 채널 종류에 따라 자동으로 cluster의 버전을 올리고 node pool의 버전을 올린다.
node pool은 Surge upgrades(rolling update) 방식으로 업그레이드된다. (drain -> delete -> recreate)

 

 

노드 풀

노드 풀은 AWS 노드 그룹과 같음.

AWS는 Cluster를 생성한 후 Node Group을 생성하지만 GCP는 Cluster를 생성할 때 디폴트로 Node Pool을 같이 생성한다.

 

노드 수를 1개로 지정해도 영역(zone) 별이기 때문에 영역을 3개 지정하면 3개의 노드가 생성되는 것이다. (직관적이지 않은 느낌..)

 

클러스터 자동 확장 처리 사용 설정을 활성화하면 리소스 사용량에 따라 노드 풀의 노드가 오토 스케일링이 된다.

cluster autoscaler가 기본적으로 설치되기 때문에 따로 설치할 필요가 없다.  (편리하다!)

 

 

Google Service Account를 생성해서 할당할 수도 있고, 디폴트를 사용할 수도 있다.

공식 문서를 보면 개별 Google Service Account를 생성해서 사용하기를 권장한다.

https://cloud.google.com/kubernetes-engine/docs/how-to/hardening-your-cluster#use_least_privilege_sa

 

Google Service Account는 사람을 제외한 컴퓨팅 리소스 또는 애플리케이션에 붙이는 계정이다. 

Service Account에는 IAM Role을 할당한다. 

 

최소 권한을 부여한 Google Service Account를 노드에 붙이고 Pod별 필요한 권한은 Workload Identity를 사용하는 것을 권장한다.

이는 아래에 다시 나온다. 

 

 

클러스터

네트워킹

 

IPv4 네트워크 엑세스

  • 비공개 클러스터
    • https://cloud.google.com/kubernetes-engine/docs/concepts/private-cluster-concept
    • 외부 IP 주소를 사용하여 제어 영역 엑세스
      • 퍼블릭 ip 주소에서 컨트롤 플레인에 엑세스 하기 위한 설정. 보안을 위해서 --master-authorized-networks 옵션을 사용해서 접근 허용할 퍼블릭, 프라이빗 ip를 지정한다. (e.g 회사 사무실)
    • 제어 영역 전역 엑세스 사용 설정
      • 클러스터 마스터 전역 액세스 설정을 제어한다. 보안을 위해서 비활성화한다.
    • 제어 영역 IP 범위(controller plane ip range)
      • 호스팅 된 마스터 네트워크에 사용할 CIDR 표기법의 IP 범위이다. 이 범위는 클러스터의 네트워크 내에서 사용 중인 다른 범위와 겹치지 않아야 하며 /28 서브넷이어야 한다.

 

 

 

 

고급 네트워킹 옵션

  • 보조 범위 자동 생성
    • gke를 생성하는 subnetwork에 자동으로 보조 CIDR 범위를 생성한다.
  • 클러스터 기본 포드 IP 주소 범위
    • 이 클러스터에 있는 Pod IP의 IP 주소 범위이다. 특정 넷마스크로 범위를 선택하려면 /netmask(예: /14)로 설정한다.
  • 서비스 주소 범위
    • 이 클러스터에 있는 Service IP의 IP 주소 범위이다. 특정 넷마스크로 범위를 선택하려면 /netmask(예: /14)로 설정한다.

 

AWS EKS에서는 service ip range가 subnet ip range이다.
GCP GKE에서는 service ip range를 지정하여 subnet에 secondary ip range를 생성한다. 

 

 

Addons 설치

 

제어 영역 승인 네트워크 사용 설정

  • 컨트롤 플레인에 퍼블릭 엑세스를 허용하는 네트워크 영역 설정.
  • 외부에서 kubectl 를 날리는 네트워크 영역.

 

보안

GCP GKE에서 GCP Service(e.g Cloud Storage)에 접근하기 위해서 Workload Identity를 사용하는 것을 권장한다.

https://cloud.google.com/iam/docs/best-practices-service-accounts#use-workload-identity

 

Workload Identity를 이용하기 위해서는 Google Cloud에 Service Account를 생성하고 필요한 권한을 할당한 후, Kubernetes의 RBAC을 위한 Service Account를 생성하여 두 개의 Google Service Account와 Kubernetes Service Account를 매핑해야 한다.

 

Pod에 k8s service account를 할당하여 매핑된 Google service account에 부여된 권한을 이용하는 것이다. 

https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity

 

기능

쉽게 다양한 에드온 사용 설정이 가능하다.

 

 

결과

 

반응형