이 문서에서는 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.projectIamAdmin
및 serviceusage.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 프로젝트 사용을 참조하세요.