관리 워크스테이션 만들기

이 문서에서는 Google Distributed Cloud용 관리자 워크스테이션을 만드는 방법을 설명합니다. 관리자 워크스테이션은 설치 중 클러스터를 프로비저닝하는 명령줄 인터페이스(CLI) 도구와 구성 파일 및 설치 후 프로비저닝된 클러스터와 상호작용하는 CLI 도구를 호스팅합니다.

여기에는 전체 안내가 나와 있습니다. 관리자 워크스테이션 만들기에 대한 간략한 소개는 관리자 워크스테이션 만들기(빠른 시작)를 참조하세요.

다음 두 가지 방법으로 관리자 워크스테이션을 만들 수 있습니다.

  • gkeadm을 사용하여 vSphere 환경에서 관리자 워크스테이션 VM을 만듭니다.
  • 원하는 컴퓨터에서 사용자 관리형 관리자 워크스테이션을 만듭니다.

gkeadm

시작하기 전에

vCenter 서버 주소 이해

CA 인증서 경로 이해

Google Cloud CLI 설치

여러 Google Cloud 프로젝트 사용에 설명된 대로 Google Cloud 프로젝트를 하나 이상 만들기

서비스 계정 계획

gkeadm을 사용하여 관리자 워크스테이션을 만들 때 gkeadm에서 일부 서비스 계정과 키를 자동으로 만들도록 할 수 있는 옵션이 있습니다. 이 경우 gkeadm에서 서비스 계정에 적절한 Identity and Access Management 역할도 부여합니다.

또는 서비스 계정 및 키를 수동으로 만들 수 있습니다. 이 경우 서비스 계정에 IAM 역할을 수동으로 부여해야 합니다.

서비스 계정을 수동으로 만들면 gkeadm에서 자동으로 만드는 것보다 유연성이 높아집니다.

  • 자동으로 만들어진 서비스 계정은 모두 구성요소 액세스 서비스 계정과 동일한 상위 Google Cloud 프로젝트를 갖습니다. 서비스 계정을 수동으로 만들 때 상위 Google Cloud 프로젝트를 선택할 수 있습니다.

  • 자동으로 만들어진 서비스 계정에는 구성요소 액세스 서비스 계정의 상위 Google Cloud 프로젝트에 대한 IAM 역할이 모두 부여됩니다. 이 프로젝트가 클러스터와 연결된 유일한 Google Cloud 프로젝트인 경우 문제가 되지 않습니다. 하지만 클러스터를 여러 Google Cloud 프로젝트와 연결하려면 선택한 Google Cloud 프로젝트에서 서비스 계정에 역할을 부여할 수 있는 유연성이 필요합니다.

자체 서비스 계정을 만들기로 한 경우 서비스 계정 및 키의 안내를 따릅니다.

gkeadm에서 자동으로 서비스 계정을 만드는지 여부에 관계없이 수동으로 만들어야 하는 서비스 계정은 구성 요소 액세스 서비스 계정입니다. 구성요소 액세스 서비스 계정을 만들고 여기에 적절한 IAM 역할을 부여하는 방법은 구성요소 액세스 서비스 계정을 참조하세요.

수동으로 만들어야 할 또 다른 서비스 계정이 하나 있습니다. 바로 감사 로깅 서비스 계정입니다. GKE On-Prem API 클라이언트를 사용하여 사용자 클러스터를 관리하려면 관리자 클러스터에서 감사 로깅을 사용 설정해야 합니다.

구성 파일의 템플릿 생성

현재 디렉터리에 gkeadm을 다운로드합니다.

템플릿을 생성합니다.

./gkeadm create config

위 명령어를 실행하면 현재 디렉터리에 다음 파일이 만들어집니다.

  • credential.yaml
  • admin-ws-config.yaml

credential.yaml에 입력

credential.yaml에 vCenter 사용자 이름과 비밀번호를 입력합니다. 예를 들면 다음과 같습니다.

kind: CredentialFile
items:
- name: vCenter
username: "my-account-name"
password: "AadmpqGPqq!a"

admin-ws-config.yaml에 입력

admin-ws-config.yaml의 여러 필드는 이미 기본값 또는 생성된 값으로 입력되어 있습니다. 채워진 값을 유지하거나 원하는 대로 변경할 수 있습니다.

필수 필드

다음 필수 필드를 입력합니다. 필드를 입력하는 방법에 대한 자세한 내용은 관리자 워크스테이션 구성 파일을 참조하세요.

gcp:
 componentAccessServiceAccountKeyPath: "Fill in"
vCenter:
credentials:
  address: "Fill in"
datacenter: "Fill in"
datastore: "Fill in"
cluster: "Fill in"
network: "Fill in"
resourcePool: "Fill in"
caCertPath: "Fill in"

vSphere VM 폴더 내에 관리자 워크스테이션을 만들려면 vCenter.folder 필드를 입력하세요.

vCenter:
folder: "Fill in"

관리자 워크스테이션이 프록시 서버 뒤에 있는 경우 proxyURL 필드를 입력합니다.

adminWorkstation:
proxyURL: "Fill in"

관리자 워크스테이션이 DHCP 서버에서 IP 주소를 가져오도록 하려면 ipAllocationMode"dhcp"로 설정하고 hostconfig 섹션을 삭제합니다.

adminWorkstation:
network:
  ipAllocationMode: "dhcp"

관리자 워크스테이션에 고정 IP 주소를 지정하려면 ipAllocationMode"static"으로 설정하고 hostconfig 섹션을 입력합니다.

adminWorkstation:
network:
  ipAllocationMode: "static"
  hostconfig:
    ip: "Fill in"
    gateway: "Fill in"
    netmask: "Fill in"
    dns:
    - "Fill in"

로그인

  1. Google 계정으로 로그인합니다. 그러면 SDK account 속성이 설정됩니다.
gcloud auth login
  1. SDK account 속성이 올바르게 설정되었는지 확인합니다.
gcloud config list
  1. SDK account속성으로 설정된 Google 계정을 SDK 계정이라고 합니다. gkeadm 명령줄 도구는 SDK 계정을 사용하여 관리자 워크스테이션 OVA를 다운로드하고 Google Cloud 프로젝트에서 서비스를 사용 설정합니다.

gkeadm이 서비스 계정을 자동으로 만들도록 하면 gkeadm은 SDK 계정을 사용하여 서비스 계정과 키를 만들고 서비스 계정에 역할을 부여합니다. 따라서 gkeadm을 실행하기 전에 SDK account 속성을 설정하여 관리자 워크스테이션을 만드는 것이 중요합니다.

SDK account 속성 값이 출력에 표시됩니다. 예를 들면 다음과 같습니다.

[core]
account = my-name@google.com
disable_usage_reporting = False
Your active configuration is: [default]

SDK 계정에 역할 부여

SDK 계정에는 구성요소 액세스 서비스 계정의 상위 Google Cloud 프로젝트에 대한 다음 IAM 역할이 있어야 합니다. 이는 gkeadm이 Google Cloud 프로젝트에서 서비스를 사용 설정할 수 있도록 하기 위함입니다.

  • serviceUsage.serviceUsageAdmin

gkeadm이 서비스 계정을 자동으로 만들도록 하면 SDK 계정에 구성요소 액세스 서비스 계정의 상위 프로젝트에 대한 다음 역할도 있어야 합니다. 이는 gkeadm이 서비스 계정과 키를 만들 수 있도록 하기 위함입니다.

  • resourcemanager.projectIamAdmin
  • iam.serviceAccountCreator
  • iam.serviceAccountKeyAdmin

Google Cloud 프로젝트에 대한 역할을 부여하려면 Google Cloud 프로젝트에 대한 특정 권한이 있어야 합니다. 자세한 내용은 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

필요한 권한이 있으면 직접 역할을 부여할 수 있습니다. 그렇지 않으면 조직의 다른 사용자가 역할을 부여해야 합니다.

SDK 계정에 필요한 역할을 부여하려면 다음 안내를 따르세요.

Linux 및 macOS

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:ACCOUNT" \
  --role="roles/serviceusage.serviceUsageAdmin"

Windows

gcloud projects add-iam-policy-binding PROJECT_ID ^
  --member="user:ACCOUNT" ^
  --role="roles/serviceusage.serviceUsageAdmin"

다음을 바꿉니다.

  • PROJECT_ID: 구성요소 액세스 서비스 계정이 속하는 상위 Google Cloud 프로젝트의 ID입니다.

  • ACCOUNT: SDK 계정

gkeadm이 서비스 계정을 자동으로 만들도록 추가 역할을 부여하려면 다음 안내를 따르세요.

Linux 및 macOS

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:ACCOUNT" \
  --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:ACCOUNT" \
  --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:ACCOUNT" \
  --role="roles/iam.serviceAccountKeyAdmin"

Windows

gcloud projects add-iam-policy-binding PROJECT_ID ^
  --member="user:ACCOUNT" ^
  --role="roles/resourcemanager.projectIamAdmin"

gcloud projects add-iam-policy-binding PROJECT_ID ^
  --member="user:ACCOUNT" ^
  --role="roles/iam.serviceAccountCreator"

gcloud projects add-iam-policy-binding PROJECT_ID ^
  --member="user:ACCOUNT" ^
  --role="roles/iam.serviceAccountKeyAdmin"

다음을 바꿉니다.

  • PROJECT_ID: 구성요소 액세스 서비스 계정의 상위 프로젝트 ID

  • ACCOUNT: SDK 계정

관리자 워크스테이션 만들기

다음 명령어를 입력하여 관리자 워크스테이션을 만듭니다. gkeadm에서 connect-registerlogging-monitoring 서비스 계정을 자동으로 만들게 하려면 --auto-create-service-accounts 플래그를 포함합니다. 이러한 서비스 계정을 수동으로 만들려면 이 플래그를 생략합니다.

./gkeadm create admin-workstation [--auto-create-service-accounts]

출력은 관리자 워크스테이션 생성에 대한 자세한 정보를 제공합니다.

...
Getting ... service account...
...
********************************************************************
Admin workstation is ready to use.

Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation
This file is required for future upgrades
SSH into the admin workstation with the following command:
ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1
********************************************************************

관리자 워크스테이션으로 SSH 연결 가져오기

이전 출력의 끝부분에 관리자 워크스테이션으로 SSH 연결을 가져오는 데 사용할 수 있는 명령어가 있습니다. 지금 명령어를 입력합니다. 예를 들면 다음과 같습니다.

ssh -i /usr/local/google/home/me/.ssh/gke-admin-workstation ubuntu@172.16.5.1

관리자 워크스테이션의 파일을 나열합니다.

ls -1

출력에서 두 개의 클러스터 구성 파일, CA 인증서 파일, 구성요소 액세스 서비스 계정의 JSON 키 파일을 볼 수 있습니다. gkeadm에서 서비스 계정을 만든 경우 해당 서비스 계정의 JSON 키 파일도 확인할 수 있습니다. 예를 들면 다음과 같습니다.

admin-cluster.yaml
user-cluster.yaml
vcenter-ca-cert.pem
component-access-key.json

gkeadm이 관리자 워크스테이션에서 구성요소 액세스 서비스 계정을 활성화했는지 확인합니다.

gcloud config get-value account

JSON 키 파일을 관리자 워크스테이션에 복사

클러스터를 만들기 전에 서비스 계정의 JSON 키 파일이 홈 디렉터리의 관리자 워크스테이션에 있어야 합니다.

구성요소 액세스 서비스 계정의 키가 이미 관리자 워크스테이션에 있습니다.

gkeadm create admin-workstation을 실행할 때 --auto-create-service-accounts 플래그를 포함했으면 다음 서비스 계정의 키는 이미 홈 디렉터리의 관리자 워크스테이션에 있습니다. 그렇지 않으면 수동으로 키를 관리자 워크스테이션의 홈 디렉터리에 복사해야 합니다.

  • 연결-등록 서비스 계정
  • 로깅-모니터링 서비스 계정

다음 서비스 계정을 만든 경우 이 서비스 계정의 키를 수동으로 관리자 워크스테이션의 홈 디렉터리에 복사해야 합니다.

  • 사용량 측정 서비스 계정
  • 감사 로깅 서비스 계정
  • Binary Authorization 서비스 계정

백업 파일에서 관리자 워크스테이션 복원

관리자 워크스테이션을 업그레이드하면 gkeadm upgrade 명령어가 백업 파일을 저장합니다. 나중에 더 이상 관리자 워크스테이션이 없거나 업그레이드된 관리자 워크스테이션에 있는 파일 중 일부가 손실된 경우 이 백업 파일을 사용하여 관리자 워크스테이션을 만들 수 있으며 이 워크스테이션은 업그레이드 직후의 상태로 복원됩니다.

백업 파일에서 관리자 워크스테이션을 만들려면 다음 명령어를 실행합니다.

gkeadm create admin-workstation --restore-from-backup ADMIN_WORKSTATION_NAME-backup.tar.gz

ADMIN_WORKSTATION_NAME을 관리자 워크스테이션의 이름으로 바꿉니다.

사용자 관리

관리자 워크스테이션으로 사용할 컴퓨터를 선택하세요. Ubuntu 또는 Red Hat Enterprise Linux(RHEL)를 사용할 수 있습니다. 요구사항은 다음과 같습니다.

  • Ubuntu 20.04 LTS 또는 22.04 LTS

    • 4 CPU 코어
    • 8GiB RAM
    • 100GiB 스토리지
  • RHEL 8.6, 8.7, 또는 8.8

    • 4 CPU 코어
    • 12GB RAM
    • 256GiB of storage

Google Cloud에 액세스

도구 다운로드 및 설치, 승인 요청 처리, 서비스 계정 만들기 등을 수행하려면 관리자 워크스테이션에서 Google Cloud에 액세스할 수 있어야 합니다.

Google Cloud에 연결하는 다양한 방법은 Google에 연결을 참조하세요.

Google Cloud에 직접 또는 프록시 서버를 통해 액세스할 수 있습니다. 방화벽 규칙 및 프록시 서버 구성에 대한 자세한 내용은 프록시 및 방화벽 규칙을 참조하세요.

vCenter Server에 액세스

관리자 워크스테이션에서 클러스터를 만들고 관리하려면 vCenter Server의 인스턴스에 대한 액세스 권한이 필요합니다. 자세한 내용은 다음을 참고하세요.

NTP 서버 설정

클러스터가 NTP 서버를 사용하도록 구성된 경우 timedatectl이 클러스터와 동기화된 시간을 보고하도록 관리자 워크스테이션에서 시간 동기화 서비스를 설정해야 합니다. 이는 일치하지 않는 만료 날짜로 인해 인증서 확인 실패를 초래할 수 있는 대규모 클록 드리프트 문제를 방지하는 데 필요합니다.

Ubuntu

chrony 시간 서버를 사용하는 것이 좋습니다.

chrony을 설치하려면 다음 안내를 따르세요.

sudo apt-get update
sudo apt install chrony

이는 두 개의 바이너리를 제공합니다.

  • chronyd - 네트워크 시간 프로토콜을 통해 동기화 및 처리할 데몬
  • chronyc - chrony 데몬의 명령줄 인터페이스

chronyd을 구성하려면 다음 안내를 따르세요.

/etc/chrony/chrony.conf를 수정하여 서버 줄을 추가하거나 삭제합니다. 그런 다음 chrony를 다시 시작합니다.

sudo systemctl restart chrony.service

RHEL

chrony 시간 서버를 사용하는 것이 좋습니다.

설치 안내는 Chrony 구성 방법을 참조하세요.

비밀번호 없는 sudo

보안 정책에서 허용하는 경우 현재 사용자에게 비밀번호 없는 sudo를 사용 설정합니다. 이렇게 하면 gkectl가 비공개 레지스트리가 제공된 경우 이를 준비하고, 네트워크가 프록시 서버 뒤에 있는 경우 Docker에 대해 프록시를 설정하고, 삭제 실패 시 관리자 클러스터 수명 주기 작업에 사용되는 부트스트랩 클러스터를 강제로 삭제할 수 있습니다.

비밀번호 없는 sudo를 사용 설정하지 않고 관리자 클러스터에 비공개 레지스트리를 사용하려는 경우 관리자 클러스터를 만들기 전에 다음 수동 구성을 수행합니다.

비밀번호 없는 sudo를 사용 설정하지 않으면 관리자 클러스터를 만든 후 kind 클러스터를 수동으로 삭제해야 할 수 있습니다. 자세한 내용은 문제 해결 문서의 종류 클러스터가 삭제되지 않음을 참조하세요.

소프트웨어 설치

Ubuntu

다음 소프트웨어를 설치합니다.

sudo apt-get update
sudo apt-get -y install kubectl

RHEL

다음 소프트웨어를 설치합니다.

Docker 19.03 이상

  1. 모든 이전 Docker 버전을 삭제합니다.

    sudo dnf remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine
    
  2. podman-manpages를 제거합니다.

    sudo dnf remove podman-manpages
    
  3. Docker 19.03+를 설치합니다.

    sudo dnf install -y yum-utils
    
    sudo yum-config-manager \
      --add-repo \
      https://download.docker.com/linux/centos/docker-ce.repo
    
    sudo dnf install -y --allowerasing docker-ce docker-ce-cli containerd.io
    
    sudo systemctl start docker
    
  4. 현재 버전 19.03 이상을 실행 중인지 확인합니다.

    sudo docker version
    
  5. 출력과 다음 예시를 비교하여 클라이언트 및 서버 버전이 19.03 이상인지 확인합니다.

    Client: Docker Engine - Community
    Version:           19.03.13
    ...
    Server: Docker Engine - Community
    Engine:
    Version:          19.03.13
    
  6. Docker가 실행되는지 확인합니다.

    docker run hello-world
    

    다음과 비슷한 모습이어야 합니다.

    Hello from Docker!
    

    이 메시지는 설치가 올바르게 작동하고 있다는 것을 나타냅니다.

Google Cloud CLI 최신 버전:

gcloud CLI 설치를 참조하세요.

kubectl

gcloud components install kubectl을 실행합니다.

로그인

SDK account속성으로 설정된 Google 계정을 SDK 계정이라고 합니다. gkectl 명령줄 도구는 SDK 계정을 사용하여 클러스터 노드 OVA를 다운로드하고 컨테이너 이미지를 가져오는 등의 작업을 수행합니다. 따라서 gkectl 명령어를 실행하기 전에 SDK 계정 속성을 설정하는 것이 중요합니다.

Google 계정으로 로그인합니다. 그러면 SDK account 속성이 설정됩니다.

gcloud auth login

SDK account 속성이 올바르게 설정되었는지 확인합니다.

gcloud config list

SDK account 속성 값이 출력에 표시됩니다. 예를 들면 다음과 같습니다.

[core]
account = my-name@google.com
disable_usage_reporting = False
Your active configuration is: [default]

gkectl 및 번들 다운로드

gkectl을 설치하려는 디렉터리로 이동합니다.

gkectl 다운로드:

gsutil cp gs://gke-on-prem-release/gkectl/VERSION/gkectl ./
chmod +x gkectl

VERSION을 Google Distributed Cloud 버전으로 바꿉니다. 예를 들면 1.16.0-gke.1입니다.

Google Distributed Cloud 번들을 다운로드합니다. 버전이 gkectl을 다운로드하는 데 사용한 버전과 일치하는지 확인합니다.

gsutil cp gs://gke-on-prem-release/gke-onprem-bundle/VERSION/gke-onprem-vsphere-VERSION.tgz ./

서비스 계정 및 키

다음 필수 서비스 계정 및 JSON 키 파일을 만들었는지 확인합니다.

또한 필요한 선택 서비스 계정과 JSON 키 파일을 만들었는지 확인합니다.

모든 JSON 키 파일을 관리자 워크스테이션의 홈 디렉터리에 배치합니다.

문제 해결

다음 섹션에서는 SSH 키가 손실되거나 손상된 경우 관리자 워크스테이션에 대한 SSH 액세스를 다시 사용 설정합니다.

SSH 키 복구

임시 VM을 사용하여 다음 단계를 수행합니다.

  1. 새 SSH 키 집합을 생성하려면 Compute Engine 문서의 SSH 키 만들기 안내를 따르세요.

  2. 임시 VM과 관리 워크스테이션이 Powered Off 상태인지 확인합니다.

  3. vSphere 내에서 관리 워크스테이션의 부팅 디스크를 임시 VM에 연결합니다.

    부팅 디스크의 라벨은 Hard disk 1입니다.

  4. 다음 명령어를 실행하여 VM 내에 부팅 디스크를 마운트합니다.

    sudo mkdir -p /mnt/boot-disk
    sudo mount DISK_ID /mnt/boot-disk
    

    DISK_ID를 부팅 디스크 식별자로 바꿉니다. 이 식별자는 dev/sdc1과 유사한 형식이어야 합니다.

  5. 부팅 디스크의 authorized_keys 파일을 수정하여 첫 번째 단계에서 생성된 공개 키 파일의 콘텐츠를 추가합니다.

    vi /mnt/boot-disk/.ssh/authorized_keys
    
  6. 임시 VM을 종료합니다.

  7. 관리자 워크스테이션의 전원을 켭니다.

  8. 새로 생성된 비공개 키를 사용하여 관리자 워크스테이션에 액세스합니다.

    ssh -i ~/.ssh/new-admin-ws.key ubuntu@"${ADMIN_WS_IP}"
    

새로 생성된 비공개 키를 사용하여 관리자 워크스테이션에 계속 액세스합니다.

다음 단계

관리자 클러스터 만들기