관리 워크스테이션 만들기

이 페이지에서는 GKE On-Prem 클러스터를 만드는 데 사용할 수 있는 관리 워크스테이션을 만드는 방법을 보여줍니다.

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

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

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

Downloading gkeadm

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

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

구성 파일 템플릿 생성

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

./gkeadm create config

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

채워진 값

구성 파일의 다음 필드는 기본값 또는 생성된 값으로 채워집니다.

adminWorkstation:
  name: gke-admin-ws-200617-113711
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  dataDiskName: gke-on-prem-admin-workstation-data-disk/gke-admin-ws-200617-113711-data-disk.vmdk
  dataDiskMB: 512
  ntpServer: ntp.ubuntu.com

기본값 및 생성된 모든 값을 유지합니다.

dataDiskName의 생성된 값을 확인합니다. 이 가상 머신 디스크(VMDK)가 생성됩니다. 나중에 관리 워크스테이션을 수동으로 삭제하면 VMDK가 자동으로 삭제됩니다.

나머지 구성 파일 작성

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

gcp.whitelistedServiceAccountKeyPath

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

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

vCenter.credentials.address

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

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

true | openssl s_client -connect [VCENTER_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 요구사항을 참조하세요.

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

vCenter:
  credentials:
    username: "administrator@vsphere.local"

vCenter.credentials.password

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

vCenrer:
  credentials:
    password: "#STyZ2T#Ko2o"

vCenter.datacenter

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

vCenter:
  datacenter: "MY-DATACENTER"

vCenter.datastore

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

vCenter:
  datastore: "MY-DATASTORE"

vCenter.cluster

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

vCenter:
  cluster: "MY-CLUSTER"

vCenter.network

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

vCenter:
  network: "MY-VM-NETWORK"

vCenter.resourcePool

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

vCenter:
  resourcePool: "MY-POOL"

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

vCenter:
  resourcePool: "[MY_CLUSTER]/Resources"

여기서 [MY_CLUSTER]는 vSphere 클러스터 이름입니다.

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

vCenter.caCertPath

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

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

vCenter:
  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.network.ipAllocationMode

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

adminWorkstation:
  network:
    ipAllocationMode: "static"

adminWorkstation.network.hostConfig.ip

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

adminWorkstation:
  network:
    hostconfig:
      ip: "172.16.5.1"

adminWorkstation.network.hostConfig.gateway

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

adminWorkstation:
  network:
    hostconfig:
      gateway: "172.16.6.254"

adminWorkstation.network.hostConfig.netmask

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

adminWorkstation:
  network:
    hostconfig:
      netmask: "255.255.248.0"

adminWorkstation.network.hostConfig.dns

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

adminWorkstation:
  network:
    hostconfig:
      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 주소입니다. 예를 들면 다음과 같습니다.

adminWorkstation:
  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: "gke-admin-ws-200617-113711"
  cpus: 4
  memoryMB: 8192
  diskGB: 50
  dataDiskName: "gke-on-prem-admin-workstation-data-disk/gke-admin-ws-200617-113711-data-disk.vmdk"
  dataDiskMB: 512
  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: "ntp.ubuntu.com"

관리 워크스테이션 만들기

이 단계에서는 gkeadm을 사용하여 관리 워크스테이션 및 서비스 계정 집합을 만듭니다. 서비스 계정을 수동으로 만들고 구성하려면 --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 인증서 파일을 관리자 워크스테이션에 복사했습니다.

  • 관리 워크 스테이션에서 admin-cluster.yamluser-cluster.yaml이 준비되었습니다. 나중에 이러한 구성 파일을 사용하여 클러스터를 만듭니다.

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

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.4.0-gke.13 (git-b39331512)

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...
    - connect-agent-sa-2007081316
    - connect-register-sa-2007081316
    - log-mon-sa-2007081316

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
    - connect-agent-sa-2007081316 for project my-project
        - roles/gkehub.connect
    - connect-register-sa-2007081316 for project my-project
        - roles/gkehub.admin
        - roles/serviceusage.serviceUsageViewer
    - log-mon-sa-2007081316 for project my-project
        - roles/stackdriver.resourceMetadata.writer
        - roles/logging.logWriter
        - roles/monitoring.metricWriter

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
    - connect-agent-sa-2007081316.json
    - connect-register-sa-2007081316.json
    - log-mon-sa-2007081316.json

Preparing "admin-cluster.yaml" for gkectl...
Preparing "user-cluster.yaml" for gkectl...

********************************************************************
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 키 파일을 볼 수 있습니다.

admin-cluster.yaml
connect-agent-sa-2007081316.json
connect-register-sa-2007081316.json
log-mon-sa-2007081316.json
user-cluster.yaml
vcenter-ca-cert.pem
whitelisted-key.json

클러스터 구성 파일 검사

관리 워크스테이션에서 gkeadm은 클러스터 두 개의 구성 파일(admin-cluster.yamluser-cluster.yaml)을 만들었습니다. 나중에 이 파일을 사용하여 관리자 및 사용자 클러스터를 만듭니다.

텍스트 편집기를 사용하여 admin-cluster.yaml을 엽니다. 많은 필드가 admin-ws-config.yaml 파일에 제공된 값으로 이미 채워져 있습니다. 예를 들면 다음과 같습니다.

apiVersion: v1
kind: AdminCluster
bundlePath: /var/lib/gke/bundles/gke-onprem-vsphere-1.4.0-gke.13-full.tgz
vCenter:
  address: 203.0.113.1
  datacenter: MY-DATACENTER
  cluster: MY-CLUSTER
  resourcePool: MY-POOL
  datastore: MY-DATASTORE
  caCertPath: vcenter-ca-cert.pem
  credentials:
    username: administrator@vsphere.local
    password: STyZ2T#Ko2o
...
gcrKeyPath: whitelisted-key.json
stackdriver:
  projectID: my-project-id
  serviceAccountKeyPath: log-mon-sa-2007081316.json

그런 다음 user-cluster.yaml을 엽니다. 많은 필드가 admin-ws-config.yaml 파일에 제공된 값으로 이미 채워져 있습니다. 예를 들면 다음과 같습니다.

apiVersion: v1
kind: UserCluster
gkeOnPremVersion: 1.4.0-gke.13
...
stackdriver:
  projectID: my-project-id
  serviceAccountKeyPath: log-mon-sa-2007081316.json
gkeConnect:
  projectID: my-project-id
  registerServiceAccountKeyPath: connect-register-sa-2007081316.json
  agentServiceAccountKeyPath: connect-agent-sa-2007081316.json

단일 클라우드 프로젝트 사용

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

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

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

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