시작하기 전에

Google Cloud 외부에서 Kubernetes 클러스터를 등록하려면 일반적인 기본 요건 완료 외에 다음 단계를 완료해야 합니다.

네트워크 연결 확인

클러스터를 성공적으로 등록하려면 Kubernetes 클러스터에서 아래 도메인에 연결할 수 있는지 확인해야 합니다.

  • cloudresourcemanager.googleapis.com: 클러스터가 연결되는 Google Cloud 프로젝트와 관련된 메타데이터를 확인합니다.
  • oauth2.googleapis.com: gkeconnect.googleapis.com에 대한 에이전트 작업의 단기 OAuth 토큰을 가져옵니다.
  • gkeconnect.googleapis.com: Google Cloud에서 요청을 수신하는 데 사용되는 채널을 설정하고 응답을 보냅니다.
  • gkehub.googleapis.com: Google Cloud와 연결할 클러스터에 해당하는 Google Cloud 측 Fleet 멤버십 리소스를 만듭니다.
  • www.googleapis.com: 수신되는 Google Cloud 서비스 요청에서 서비스 토큰을 인증합니다.
  • gcr.iostorage.googleapis.com: GKE Connect Agent 이미지를 가져옵니다.

Fleet 워크로드 아이덴티티를 사용하여 클러스터를 등록하려면 다음 도메인도 연결할 수 있어야 합니다.

  • securetoken.googleapis.com
  • iamcredentials.googleapis.com
  • sts.googleapis.com

연결에 프록시를 사용하는 경우 프록시의 허용 목록도 관련 도메인으로 업데이트해야 합니다.

gcloud를 사용하여 Kubernetes 클러스터를 등록하는 경우 gcloud 명령어를 실행하는 환경에서도 이러한 도메인에 연결할 수 있어야 합니다.

VPC 서비스 제어 사용

애플리케이션에서 추가 데이터 보안을 위해 VPC 서비스 제어를 사용하려면 서비스 경계에 다음 서비스가 있는지 확인해야 합니다.

  • Resource Manager API(cloudresourcemanager.googleapis.com)
  • GKE Connect API(gkeconnect.googleapis.com)
  • Fleet API(gkehub.googleapis.com)

Fleet 워크로드 아이덴티티로 클러스터를 등록하려면 다음 서비스도 필요합니다.

  • IAM Service Account Credentials API(iamcredentials.googleapis.com)
  • 보안 토큰 서비스 API (sts.googleapis.com)

또한 관련 API에 액세스하려면 비공개 연결을 설정해야 합니다. 비공개 연결 설정에서 이 작업을 수행하는 방법을 확인할 수 있습니다.

ID 설정

Google Cloud 외부의 모든 수동 클러스터 등록에서는 Google에 대한 인증을 구성해야 합니다. 다음 중 하나일 수 있습니다.

다음 설명대로 클러스터가 Google의 연결 클러스터 기본 요건을 충족하면 사용 설정된 Fleet 워크로드 아이덴티티로 연결 클러스터를 등록할 수 있습니다. 그렇지 않으면 인증을 위해 Google Cloud 서비스 계정을 사용하여 연결된 클러스터를 등록할 수 있습니다. 다음 섹션에서는 서비스 계정을 만드는 방법을 보여줍니다.

gcloud를 사용하여 Google Cloud 서비스 계정 만들기

Google Cloud 서비스 계정을 사용하여 클러스터를 수동으로 등록하려면 서비스 계정 사용자 인증 정보가 포함된 JSON 파일이 필요합니다. 최소 권한의 원칙을 따르려면 등록한 Kubernetes 클러스터마다 별도의 서비스 계정을 만들고 해당 클러스터의 서비스 계정에만 IAM 역할을 결합하는 것이 좋습니다.

이 파일을 만들려면 다음 단계를 수행하세요.

gcloud

다음 명령어를 실행하여 서비스 계정을 만듭니다.

gcloud iam service-accounts create SERVICE_ACCOUNT_NAME --project=FLEET_HOST_PROJECT_ID

다음 명령어를 실행하여 프로젝트의 모든 서비스 계정을 나열합니다.

gcloud iam service-accounts list --project=FLEET_HOST_PROJECT_ID

등록한 Kubernetes 클러스터마다 별도의 서비스 계정을 만드는 경우 다음과 같이 클러스터 멤버십 이름으로 IAM 조건이 있는 해당 클러스터의 서비스 계정에 gkehub.connect IAM 역할을 결합합니다.

MEMBERSHIP_NAME=MEMBERSHIP_NAME
FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
SERVICE_ACCOUNT_NAME=SERVICE_ACCOUNT_NAME
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
   --member="serviceAccount:${SERVICE_ACCOUNT_NAME}@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
   --role="roles/gkehub.connect" \
   --condition "expression=resource.name == \
'projects/${FLEET_HOST_PROJECT_ID}/locations/global/memberships/${MEMBERSHIP_NAME}',\
title=bind-${SERVICE_ACCOUNT_NAME}-to-${MEMBERSHIP_NAME}"

그렇지 않으면 조건이 없는 프로젝트에 있는 모든 클러스터의 서비스 계정에 역할을 결합합니다.

FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud projects add-iam-policy-binding ${FLEET_HOST_PROJECT_ID} \
   --member="serviceAccount:SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com" \
   --role="roles/gkehub.connect"

서비스 계정의 비공개 키 JSON 파일을 다운로드합니다. 클러스터를 등록할 때 이 파일을 사용합니다.

FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
gcloud iam service-accounts keys create LOCAL_KEY_PATH \
   --iam-account=SERVICE_ACCOUNT_NAME@${FLEET_HOST_PROJECT_ID}.iam.gserviceaccount.com \
   --project=${FLEET_HOST_PROJECT_ID}

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

  • FLEET_HOST_PROJECT_ID는 클러스터를 등록할 Google Cloud 프로젝트 ID입니다. 이 값을 찾는 방법을 알아보세요.
  • SERVICE_ACCOUNT_NAME은 [서비스 계정]에 선택한 표시 이름입니다.
  • MEMBERSHIP_NAME클러스터를 등록하는 동안 클러스터를 고유하게 나타내기 위해 선택한 멤버십 이름입니다.
  • LOCAL_KEY_PATH는 서비스 계정의 비공개 키인 JSON 파일을 저장할 로컬 파일 경로입니다. 서비스 계정 이름과 프로젝트 ID를 사용하여 파일 이름을 지정하는 것이 좋습니다. 예를 들면 /tmp/creds/[SERVICE_ACCOUNT_NAME]-[FLEET_HOST_PROJECT_ID].json입니다.

연결된 클러스터 기본 요건

연결된 클러스터로 등록하려는 타사 Kubernetes 클러스터 유형에 따라 Connect Agent 설치 또는 Fleet 워크로드 아이덴티티 사용을 위한 몇 가지 추가적인 요구사항을 충족시켜야 할 수 있습니다.

보안 컨텍스트 제약조건 구성(SCC)(OpenShift 클러스터)

OpenShift OKEOKD 클러스터에서 관리자는 SCC를 사용하여 포드의 권한을 제어할 수 있습니다. 클러스터에 Connect Agent 설치를 허용하려면 커스텀 SCC를 만들어야 합니다.

다음 샘플 SCC 정의는 Connect Agent가 클러스터에서 허용되도록 실행해야 하는 조건 집합을 지정합니다.

# Connect Agent SCC
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: gke-connect-scc
allowPrivilegeEscalation: false
# This is redundant with non-root + disallow privilege escalation,
# but we provide it for defense in depth.
requiredDropCapabilities:
- ALL
runAsUser:
  type: MustRunAsNonRoot
seLinuxContext:
  type: RunAsAny
supplementalGroups:
  type: MustRunAs
  ranges:
  - min: 1
    max: 65535
fsGroup:
  type: MustRunAs
  ranges:
  - min: 1
    max: 65535
volumes:
- secret
- projected
readOnlyRootFilesystem: true
seccompProfiles:
- docker/default
users:
groups:
  # Grants all service accounts in the gke-connect namespace access to this SCC
  - system:serviceaccounts:gke-connect

SCC 정의를 gke-connect-scc.yaml로 저장했다고 가정하면 OpenShift oc 명령줄 도구를 사용하여 다음과 같이 클러스터에 gke-connect-scc SCC를 만듭니다.

$ oc create -f gke-connect-scc.yaml

커스텀 SCC가 생성되었는지 확인하려면 다음 oc 명령어를 실행합니다.

$ oc get scc | grep gke-connect-scc

Fleet 워크로드 아이덴티티 요구사항

클러스터에 대해 플랫폼이 공개 OIDC 엔드포인트를 만들거나(또는 사용자가 이를 만들 수 있도록 허용), Kubernetes 서비스 계정 발급자 검색이 클러스터에 대해 사용 설정된 경우 사용 설정된 Fleet 워크로드 아이덴티티로 연결된 클러스터를 등록할 수 있습니다. 이러한 요구사항을 충족시킬 수 없으면 인증을 위해 Google Cloud 서비스 계정을 사용하여 연결된 클러스터를 등록해야 합니다.

특정 클러스터 유형에 대해서는 다음을 참조하세요.

  • OpenShift 클러스터: 위의 설명에 따라 커스텀 SCC를 구성한 후 사용 설정된 Fleet 워크로드 아이덴티티로 등록할 수 있습니다.
  • 종류 클러스터: Fleet 워크로드 아이덴티티를 사용하도록 서비스 계정 발급자 검색을 사용 설정해야 합니다. 기본적으로 Kubernetes 버전 1.20에서 사용 설정됩니다. 이 기능을 사용 설정해야 하는 경우 서비스 계정 토큰 볼륨 프로젝션의 안내를 따르세요. 서비스 계정 토큰 볼륨 프로젝트가 사용 설정된 경우 서비스 계정 발급자 검색이 자동으로 사용 설정됩니다.

다음 단계

안내에 따라 클러스터 등록하기