Cloud Service Mesh용 Gateway API 설정 준비

이 페이지에서는 클러스터에 게이트웨이에 필요한 커스텀 리소스 정의를 설치하는 방법을 설명합니다.

제한사항

  • 동일한 Fleet에서 gateway config-api 클러스터와 istio config-api 클러스터를 혼합하는 것은 지원되지 않습니다.
  • gateway config-api 클러스터에는 멀티 클러스터 서비스 검색 및 부하 분산이 지원되지 않습니다.
  • 기존 --management automatic 플래그를 사용하여 클러스터를 온보딩하면 클러스터는 istio 구성 API를 사용하기 시작하며 gateway API로 변경할 수 없습니다.
  • FQDN만 지원됩니다. 닉네임은 지원되지 않습니다.

기본 요건

먼저 이 가이드에서는 이미 Google Cloud 프로젝트를 만들고 kubectl을 설치했다고 가정합니다.

시작하기 전에

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Kubernetes Engine, GKE Hub, and Cloud Service Mesh APIs.

    Enable the APIs

  1. 클러스터의 kubeconfig 항목을 생성합니다.
  2. gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
    

각 항목의 의미는 다음과 같습니다.

  • CLUSTER_NAME은 클러스터 이름입니다.
  • LOCATION은 클러스터 위치입니다.
  • PROJECT_ID는 클러스터의 프로젝트 ID입니다.

GKE 클러스터 만들기 및 등록

  1. GKE 클러스터를 만듭니다.

    gcloud container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --enable-ip-alias \
    --scopes=https://www.googleapis.com/auth/cloud-platform \
    --release-channel=regular \
    --project=PROJECT_ID \
    --gateway-api=standard
    

    각 항목의 의미는 다음과 같습니다.

    • CLUSTER_NAME은 클러스터 이름입니다.
    • LOCATION은 클러스터 위치입니다.
    • PROJECT_ID는 클러스터의 프로젝트 ID입니다.
  2. GKE용 워크로드 아이덴티티 제휴 사용 설정

    gcloud container clusters update CLUSTER_NAME \
    --location LOCATION \
    --workload-pool=PROJECT_ID.svc.id.goog
    
  3. 노드에서 GKE 메타데이터 서버를 실행합니다.

    gcloud container node-pools update default-pool \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --workload-metadata=GKE_METADATA
    
  4. Fleet에 클러스터를 등록합니다.

    gcloud container hub memberships register CLUSTER_NAME \
    --gke-cluster LOCATION/CLUSTER_NAME \
    --project=PROJECT_ID
    
  5. 클러스터가 Fleet에 등록되었는지 확인합니다.

    gcloud container hub memberships list --project=PROJECT_ID
    

    출력은 다음과 비슷합니다.

    NAME            EXTERNAL_ID                             LOCATION
    my-cluster      91980bb9-593c-4b36-9170-96445c9edd39    us-west1
    

권한 설정

다음 명령어는 모든 인증된 사용자에게 권한을 부여하지만 GKE용 워크로드 아이덴티티 제휴를 사용하여 일부 계정에만 권한을 부여할 수 있습니다.

  1. trafficdirector.client 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member "group:PROJECT_ID.svc.id.goog:/allAuthenticatedUsers/" \
        --role "roles/trafficdirector.client"
    
  2. container.developer 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/container.developer"
    

    여기서 PROJECT_NUMBER는 프로젝트 번호입니다.

  3. compute.networkAdmin 역할을 부여합니다.

    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member "serviceAccount:service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com" \
    --role "roles/compute.networkAdmin"
    

    여기서 PROJECT_NUMBER는 프로젝트 번호입니다.

Cloud Service Mesh 사용 설정

  1. 메시 기능을 사용 설정합니다.

    gcloud container hub mesh enable --project PROJECT_ID
    
  2. Gateway API를 사용하도록 메시를 업데이트합니다.

    gcloud alpha container fleet mesh update \
    --config-api gateway \
    --memberships CLUSTER_NAME \
    --project PROJECT_ID
    
  3. Cloud Service Mesh 리소스의 상태를 설명하여 업데이트를 확인합니다.

    gcloud alpha container fleet mesh describe
    

커스텀 리소스 정의 설치

GRPCRoute 커스텀 리소스 정의(CRD)를 설치합니다.

curl https://raw.githubusercontent.com/kubernetes-sigs/gateway-api/v1.1.0/config/crd/standard/gateway.networking.k8s.io_grpcroutes.yaml \
| kubectl apply -f -

출력은 다음과 비슷합니다.

customresourcedefinition.apiextensions.k8s.io/grpcroutes.gateway.networking.k8s.io created

다음 단계