관리 워크스테이션 만들기

이 문서에서는 GKE On-Prem 클러스터를 만드는 데 사용할 수 있는 관리 워크스테이션을 만드는 방법을 설명합니다.

이 문서에서는 고정 IP 주소가 있는 관리 워크스테이션을 만듭니다. 이는 고정 IP 주소를 사용하는 클러스터를 만드는 기본 설치 과정과 일치합니다.

동적 호스트 구성 프로토콜(DHCP)을 사용하여 IP 주소를 가져오는 관리자 워크스테이션을 만들려면 DHCP를 사용하여 관리자 워크스테이션 만들기를 참조하세요.

이 문서의 단계에서는 Linux에서만 사용할 수 있는 gkeadm 명령줄 도구를 사용합니다. GKE On-Prem의 향후 버전에서는 Windows 및 MAC OS에서 gkeadm를 사용할 수 있습니다. Windows 또는 MAC OS를 실행하는 컴퓨터를 사용하여 관리 워크스테이션을 만들려면 고정 IP 주소로 관리 워크스테이션 만들기 또는 DHCP를 사용하여 관리 워크스테이션 만들기를 참조하세요.

gkeadm 다운로드

gkeadm 명령줄 도구를 다운로드하고 실행 파일로 만듭니다.

gsutil cp gs://gke-on-prem-release-public/gkeadm/1.3.2-gke.1/linux/gkeadm ./
chmod +x gkeadm

구성 파일 템플릿 생성

관리 워크스테이션을 만들려면 gkeadm 도구에 구성 파일이 필요합니다. 구성 파일의 템플릿을 생성하려면 다음 안내를 따르세요.

./gkeadm create config

출력은 admin-ws-config.yaml이라는 파일입니다.

gcp:
  # Path of the allowlisted service account's JSON key file
  whitelistedServiceAccountKeyPath: ""
# Specify which vCenter resources to use
vCenter:
  # The credentials and address GKE On-Prem should use to connect to vCenter
  credentials:
    address: ""
    username: ""
    ...
adminWorkstation:
  ...
  network:
    # The IP allocation mode: 'dhcp' or 'static'
    ipAllocationMode: ""
    # # The host config in static IP mode. Do not include if using DHCP
    # hostConfig:
    #   # The IPv4 static IP address for the admin workstation
    ...

구성 파일 작성

이 섹션에서 설명된 대로 구성 파일에 필드 값을 입력합니다.

gcp.whitelistedServiceAccountKeyPath

문자열. 허용 목록에 포함된 서비스 계정에 대한 JSON 키 파일의 경로입니다. JSON 키 파일 만들기에 대한 자세한 내용은 허용 목록에 포함된 서비스 계정을 참조하세요. 예를 들면 다음과 같습니다.

whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-key.json"

vCenter.credentials.address

문자열. vCenter Server의 IP 주소 또는 호스트 이름입니다.

address 필드를 입력하기 전에 vCenter Server의 사용 중인 인증서를 다운로드하여 검사합니다. 다음 명령어를 입력하여 인증서를 다운로드하고 vcenter.pem이라는 파일로 저장합니다.

true | openssl s_client -connect VCENTER_IPVCENTER_IP:443 -showcerts 2>/dev/null | sed -ne '/-BEGIN/,/-END/p' > vcenter.pem

VCENTER_IP를 vCenter Server의 IP 주소로 바꿉니다.

인증서 파일을 열어서 제목 일반 이름 및 제목 대체 이름을 확인합니다.

openssl x509 -in vcenter.pem -text -noout

결과에 Subject 일반 이름(CN)이 표시됩니다. 이 이름은 IP 주소이거나 호스트 이름일 수 있습니다. 예를 들면 다음과 같습니다.

Subject: ... CN = 203.0.113.100
Subject: ... CN = my-host.my-domain.example

결과의 Subject Alternative Name 아래에는 DNS 이름이 1개 이상 포함될 수도 있습니다.

X509v3 Subject Alternative Name:
    DNS:vcenter.my-domain.example

Subject 일반 이름을 선택하거나 Subject Alternative Name 아래에서 구성 파일의 vcenter.credentials.address 값으로 사용할 DNS 이름 중 하나를 선택합니다. 예를 들면 다음과 같습니다.

vcenter:
  credentials:
    address: "203.0.113.1"
    ...
vcenter:
  credentials:
    address: "my-host.my-domain.example"
    ...

vCenter.credentials.username

문자열. vCenter 서버 사용자 계정입니다. 사용자 계정에 관리자 역할 또는 이에 상응하는 권한이 있어야 합니다. vSphere 요구사항을 참조하세요.

예를 들면 다음과 같습니다.

username: "administrator@vsphere.local"

vCenter.credentials.password

문자열. vCenter 서버 사용자 계정의 비밀번호입니다. 예를 들면 다음과 같습니다.

password: "#STyZ2T#Ko2o"

vCenter.datacenter

문자열. vSphere 데이터센터의 이름입니다. 예를 들면 다음과 같습니다.

datacenter: "MY-DATACENTER"

vCenter.datastore

문자열. vSphere Datastore의 이름입니다. 예를 들면 다음과 같습니다.

datastore: "MY-DATASTORE"

vCenter.cluster

문자열. vSphere 클러스터의 이름입니다. 예를 들면 다음과 같습니다.

cluster: "MY-CLUSTER"

vCenter.network

문자열. 관리 워크스테이션을 만들려는 vSphere 네트워크의 이름입니다. 예를 들면 다음과 같습니다.

network: "MY-VM-NETWORK"

vCenter.resourcePool

문자열. 기본이 아닌 리소스 풀을 사용하는 경우에는 vSphere 리소스 풀의 이름을 제공합니다. 예를 들면 다음과 같습니다.

resourcePool: "MY-POOL"

기본 리소스 풀을 사용하는 경우 다음 값을 제공합니다.

resourcePool: "MY_CLUSTER/Resources"

MY_CLUSTER를 vSphere 클러스터의 이름으로 바꿉니다.

독립형 호스트의 루트 리소스 풀 지정을 참조하세요.

vCenter.caCertPath

문자열. GKE On-Prem과 같은 클라이언트가 vCenter Server로 요청을 전송할 때 서버는 인증서 또는 인증서 번들을 제공하여 클라이언트에 해당 ID를 입증해야 합니다. 인증서 또는 번들을 확인하기 위해 GKE On-Prem은 트러스트 체인에 루트 인증서가 있어야 합니다.

vCenter.caCertPath를 루트 인증서의 경로로 설정합니다. 예를 들면 다음과 같습니다.

caCertPath: "/usr/local/google/home/me/certs/vcenter-ca-cert.pem"

VMware 설치에는 vCenter Server에 인증서를 발급하는 인증 기관(CA)이 포함됩니다. 신뢰 체인의 루트 인증서는 VMware에서 생성된 자체 서명 인증서입니다.

기본값인 VMWare CA를 사용하지 않을 경우 다른 인증 기관을 사용하도록 VMware를 구성할 수 있습니다.

사용자의 vCenter 서버가 기본 VMware CA에서 발급한 인증서를 사용하는 경우 다음과 같이 인증서를 다운로드합니다.

curl -k "https://SERVER_ADDRESS/certs/download.zip" > download.zip

SERVER_ADDRESS를 vCenter 서버의 주소로 바꿉니다.

unzip 명령어를 설치하고 인증서 파일의 압축을 풉니다.

sudo apt-get install unzip
unzip downloads.zip

처음에 unzip 명령어가 작동하지 않으면 명령어를 다시 입력합니다.

certs/lin에서 인증서 파일을 찾습니다.

proxyUrl

문자열: gkeadm를 실행하는 데 사용하는 머신에서 프록시 서버를 사용하여 인터넷에 액세스하는 경우 이 필드를 프록시 서버의 URL로 설정합니다. 예를 들면 다음과 같습니다.

proxyUrl: "https://my-proxy.example.local"

adminWorkstation.name

문자열. 관리 워크스테이션에서 선택한 이름입니다. 예를 들면 다음과 같습니다.

name: "my-admin-workstation"

adminWorkstation.cpus

정수. 관리자 워크스테이션의 가상 CPU 수입니다. 예를 들면 다음과 같습니다.

cpus: 4

adminWorkstation.memoryMB

정수. 관리자 워크스테이션의 메모리 용량 수(MB)입니다. 예를 들면 다음과 같습니다.

memoryMB: 8192

adminWorkstation.diskGB

정수. 관리 워크스테이션의 가상 디스크 공간의 기가바이트 수입니다. 50 이상이어야 합니다. 예를 들면 다음과 같습니다.

diskGB: 50

adminWorkstation.network.ipAllocationMode

문자열. "static"으로 설정합니다. 예를 들면 다음과 같습니다.

ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

문자열. 관리자 워크스테이션의 IP 주소입니다. 예를 들면 다음과 같습니다.

ip: "172.16.5.1"

adminWorkstation.network.hostConfig.gateway

문자열. 관리자 워크스테이션이 포함된 네트워크의 기본 게이트웨이 IP 주소입니다. 예를 들면 다음과 같습니다.

gateway: "172.16.6.254"

adminWorkstation.network.hostConfig.netmask

문자열. 관리자 워크스테이션이 포함된 네트워크의 넷마스크입니다. 예를 들면 다음과 같습니다.

netmask: "255.255.248.0"

adminWorkstation.network.hostConfig.dns

문자열 배열. 관리자 워크스테이션에서 사용할 수 있는 DNS 서버의 IP 주소 배열입니다. 예를 들면 다음과 같습니다.

dns:
- "172.16.255.1"
- "172.16.255.2"

adminWorkstation.proxyUrl

문자열. 네트워크가 프록시 서버로 보호되는 상태에서 관리자 워크스테이션과 GKE On-Prem 클러스터가 모두 동일한 프록시 서버를 사용하도록 하려면 adminworkstation.proxyURL를 프록시 서버의 URL로 설정합니다. 예를 들면 다음과 같습니다.

adminworkstation:
  proxyUrl: "http://aw-proxy.example"

adminWorkstation.ntpServer

문자열. 관리 워크스테이션에서 사용할 네트워크 시간 프로토콜 서버의 호스트 이름 또는 IP 주소입니다. 예를 들면 다음과 같습니다.

ntpServer: "216.239.35.0"

이 필드를 비워두면 GKE On-Prem은 "ntp.ubuntu.com"를 사용합니다.

다음은 완성된 admin-ws-config.yaml 파일의 예입니다.

gcp:
  whitelistedServiceAccountKeyPath: "my-key-folder/whitelisted-key.json"
vCenter:
  credentials:
    address: "203.0.113.1"
    username: "administrator.vsphere.local"
    password: "#STyZ2T#Ko2o"
  datacenter: "MY-DATACENTER"
  datastore: "MY-DATASTORE"
  cluster: "MY-CLUSTER"
  network: "MY-VM-NETWORK"
  resourcePool: "MY-POOL"
  caCertPath: "/usr/local/google/home/me/certs/the-root.cert"
proxyUrl: ""
adminWorkstation:
  name: "my-admin-workstation"
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  network:
    ipAllocationMode: "static"
    hostConfig:
      ip: "172.16.5.1"
      gateway: "172.16.6.254"
      netmask: "255.255.248.0"
      dns:
      - "172.16.255.1"
      - "172.16.255.2
  proxyUrl: ""
  ntpServer: "216.239.35.0"

관리 워크스테이션 만들기

gkeadm을 사용하여 관리자 워크스테이션과 서비스 계정 집합을 만들려면 기본 Cloud Billing 계정에 resourcemanager.projectIamAdminserviceusage.serviceUsageAdmin IAM 역할을 부여해야 합니다. 기본 계정을 보려면 다음 명령을 실행하세요.

gcloud config get-value account

필요한 역할을 부여하려면 다음 명령을 실행하세요.

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

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

다음을 바꿉니다.

  • PROJECT_ID: 연결 프로젝트의 ID입니다.
  • DEFAULT_ACCOUNT: 기본 Cloud Billing 계정입니다.

관리 워크스테이션 및 서비스 계정 집합을 만듭니다. 서비스 계정을 수동으로 만들고 구성하려면 --auto-create-service-accounts 플래그를 생략할 수 있습니다.

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

출력은 관리 워크스테이션 생성에 대한 자세한 정보를 제공합니다. 예를 들어 gkeadm이 다음 작업을 수행했음을 알 수 있습니다.

  • 실행 전 검사

  • OVA 이미지를 다운로드하여 vSphere 템플릿으로 업로드했습니다.

  • SSH 키를 만들었습니다.

  • 관리 워크스테이션 VM을 만들었습니다.

  • 관리 워크스테이션에 설치된 gkectl 및 Docker 버전을 인쇄했습니다.

  • 관리 워크스테이션의 NTP 서버에 대한 정보가 출력됩니다.

  • 서비스 계정 및 해당 JSON 키 파일이 생성되었습니다. 이러한 서비스 계정은 허용 목록에 포함된 서비스 계정의 상위 요소인 프로젝트의 구성원입니다.

  • 서비스 계정에 적절한 IAM 역할이 할당되었습니다. 이러한 역할은 허용 목록에 포함된 서비스 계정의 상위 요소인 프로젝트에 부여됩니다.

  • 서비스 계정의 JSON 키 파일이 관리 워크스테이션에 복사됩니다.

  • vCenter 서버에 대한 CA 인증서 파일을 관리 워크스테이션에 복사했습니다.

  • 관리자 워크스테이션에서 config.yaml을 준비했습니다. 나중에 config.yaml을 사용하여 클러스터를 만듭니다.

...
- Validation Category: vCenter
    - [SUCCESS] Credentials
    - [SUCCESS] Version
    - [SUCCESS] Datacenter
    - [SUCCESS] Datastore
    - [SUCCESS] Resource Pool
    - [SUCCESS] Network

All validation results were SUCCESS.

******************************************
Admin workstation VM successfully created:
- Name:    my-admin-workstation
- IP:      172.16.5.1
- SSH Key: /usr/local/google/home/me/.ssh/gke-admin-workstation
******************************************

Printing gkectl and docker versions on admin workstation...
gkectl version
gkectl 1.3.1-gke.0 (git-3aaf91927)

docker version
Client:
 Version:           19.03.2
 API version:       1.40
 Go version:        go1.12.9
 Git commit:        6a30dfca03
 Built:             Mon Sep 30 22:47:02 2019
 OS/Arch:           linux/amd64
 Experimental:      false

...

Getting allowlisted service account...

Creating other service accounts and JSON key files...
    - log-mon-sa-2004211642
    - connect-agent-sa-2004211642
    - connect-register-sa-2004211642

Enabling APIs...
    - project my-project
        - serviceusage.googleapis.com
        - iam.googleapis.com
        - cloudresourcemanager.googleapis.com

Configuring IAM roles for service accounts...
    - my-allowlisted-sa for project my-project
        - roles/serviceusage.serviceUsageViewer
        - roles/iam.serviceAccountCreator
        - roles/iam.roleViewer
    - log-mon-sa-2004211642 for project my-project
        - roles/stackdriver.resourceMetadata.writer
        - roles/logging.logWriter
        - roles/monitoring.metricWriter
    - connect-agent-sa-2004211642 for project my-project
        - roles/gkehub.connect
    - connect-register-sa-2004211642 for project my-project
        - roles/gkehub.admin
        - roles/serviceusage.serviceUsageViewer

Copying files to admin workstation...
    - /usr/local/google/home/me/certs/vcenter-ca-cert.pem
    - /usr/local/google/home/me/service-account-keys/whitelisted-key.json
    - log-mon-sa-2004211642.json
    - connect-agent-sa-2004211642.json
    - connect-register-sa-2004211642.json

Preparing config.yaml for gkectl...

********************************************************************
Admin workstation is ready to use.

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
********************************************************************

Admin workstation information saved to /usr/local/google/home/me/my-admin-workstation

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

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

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

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

ls -1

출력에서 서비스 계정의 GKE On-Prem 구성 파일, CA 인증서 파일, JSON 키 파일을 볼 수 있습니다.

config.yaml
connect-agent-sa-200303-143027.json
connect-register-sa-200303-143027.json
log-mon-sa-200303-143027.json
the-root.crt
whitelisted-key.json

GKE On-Prem 구성 파일 검사

관리 워크스테이션에서 구성 파일이 생성되고 이름을 config.yaml으로 지정합니다. 나중에 이 파일을 사용하여 관리자 및 사용자 클러스터를 만듭니다. 텍스트 편집기를 사용하여 config.yaml을 엽니다. 많은 필드가 admin-ws-config.yaml 파일에 제공된 값으로 이미 채워져 있습니다. 예를 들면 다음과 같습니다.

vcenter:
  credentials:
    address: 203.0.113.1
    username: administrator@vsphere.local
    password: STyZ2T#Ko2o
  datacenter: MY-DATACENTER
  datastore: MY-DATASTORE
  cluster: MY-CLUSTER
  network: MY-VM-NETWORK
…
gkeconnect:
  projectid: my-project-id
  registerserviceaccountkeypath: /home/ubuntu/connect-register-sa-xxx.json
  agentserviceaccountkeypath: /home/ubuntu/connect-agent-sa-xxx.json
stackdriver:
  projectid: my-project-id
  clusterlocation: ""
  enablevpc: false
  serviceaccountkeypath: /home/ubuntu/log-mon-sa-xxx.json

단일 Google Cloud 프로젝트 사용

GKE On-Prem 구성 파일에는 Google Cloud 프로젝트 ID를 지정할 수 있는 여러 필드가 있습니다. 예를 들어 gkeconnect에 프로젝트 ID 하나와 stackdriver에 다른 프로젝트 ID를 지정할 수 있습니다.

gkeconnect:
  projectid: ""
...
stackdriver:
  projectid: ""

gkeadm은 GKE On-Prem 구성 파일을 준비할 때 모든 projectid 필드를 허용 목록에 포함된 서비스 계정의 상위 요소인 프로젝트로 설정합니다. 또한 gkeadm은 허용 목록에 포함된 서비스 계정의 상위 요소인 프로젝트의 서비스 계정에 역할을 부여했습니다. 간단히 말해 gkeadm는 단일 Google Cloud 프로젝트를 사용했습니다.

여러 Google Cloud 프로젝트를 유연하게 사용하려면 projectid 필드를 수동으로 입력하고 서비스 계정에 역할을 수동으로 부여해야 합니다. 자세한 내용은 여러 Google Cloud 프로젝트 사용을 참조하세요.