6.11.12. GCP에서 IAM 역할 생성
OpenShift Container Platform 클러스터에서 사용할 IAM 역할을 GCP(Google Cloud Platform)에 생성해야 합니다. 이러한 구성 요소를 생성하는 한 가지 방법은 제공된 Deployment Manager 템플릿을 수정하는 것입니다.
GCP 인프라를 생성하는 데 제공된 Deployment Manager 템플릿을 사용하지 않는 경우, 제공된 정보를 검토하고 수동으로 인프라를 생성해야 합니다. 클러스터가 올바르게 초기화되지 않은 경우, Red Hat 지원팀에 설치 로그를 제시하여 문의해야 할 수도 있습니다.
사전 요구 사항
- GCP 계정을 구성하십시오.
- 클러스터에 대한 Ignition 구성 파일을 생성하십시오.
- GCP에서 VPC 및 관련 서브넷을 생성하고 구성하십시오.
프로세스
-
이 항목의 IAM 역할에 대한 Deployment Manager 템플릿 섹션에서 템플릿을 복사하여 사용자 컴퓨터에
03_iam.py
로 저장합니다. 이 템플릿에서 클러스터에 필요한 IAM 역할을 설명합니다. 03_iam.yaml
리소스 정의 파일을 생성합니다.$ cat <<EOF >03_iam.yaml imports: - path: 03_iam.py resources: - name: cluster-iam type: 03_iam.py properties: infra_id: '${INFRA_ID}' 1 EOF
- 1
infra_id
는 추출 단계에서 가져온INFRA_ID
인프라 이름입니다.
gcloud
CLI를 사용하여 배포를 생성합니다.$ gcloud deployment-manager deployments create ${INFRA_ID}-iam --config 03_iam.yaml
마스터 서비스 계정에 대한 변수를 내보냅니다.
$ export MASTER_SERVICE_ACCOUNT=(`gcloud iam service-accounts list --filter "email~^${INFRA_ID}-m@${PROJECT_NAME}." --format json | jq -r '.[0].email'`)
작업자 서비스 계정에 대한 변수를 내보냅니다.
$ export WORKER_SERVICE_ACCOUNT=(`gcloud iam service-accounts list --filter "email~^${INFRA_ID}-w@${PROJECT_NAME}." --format json | jq -r '.[0].email'`)
컴퓨팅 머신을 호스팅하는 서브넷의 변수를 내보냅니다.
$ export COMPUTE_SUBNET=(`gcloud compute networks subnets describe ${INFRA_ID}-worker-subnet --region=${REGION} --format json | jq -r .selfLink`)
Deployment Manager의 제한으로 인해 템플릿을 통해 정책 바인딩이 생성되지 않으므로 수동으로 생성해야 합니다.
$ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${MASTER_SERVICE_ACCOUNT}" --role "roles/compute.instanceAdmin" $ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${MASTER_SERVICE_ACCOUNT}" --role "roles/compute.networkAdmin" $ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${MASTER_SERVICE_ACCOUNT}" --role "roles/compute.securityAdmin" $ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${MASTER_SERVICE_ACCOUNT}" --role "roles/iam.serviceAccountUser" $ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${MASTER_SERVICE_ACCOUNT}" --role "roles/storage.admin" $ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${WORKER_SERVICE_ACCOUNT}" --role "roles/compute.viewer" $ gcloud projects add-iam-policy-binding ${PROJECT_NAME} --member "serviceAccount:${WORKER_SERVICE_ACCOUNT}" --role "roles/storage.admin"
서비스 계정 키를 생성하여 나중에 사용할 수 있도록 로컬로 저장합니다.
$ gcloud iam service-accounts keys create service-account-key.json --iam-account=${MASTER_SERVICE_ACCOUNT}
6.11.12.1. IAM 역할에 대한 Deployment Manager 템플릿
다음 Deployment Manager 템플릿을 사용하여 OpenShift Container Platform 클러스터에 필요한 IAM 역할을 배포할 수 있습니다.
예 6.24. 03_iam.py
Deployment Manager 템플릿
def GenerateConfig(context): resources = [{ 'name': context.properties['infra_id'] + '-master-node-sa', 'type': 'iam.v1.serviceAccount', 'properties': { 'accountId': context.properties['infra_id'] + '-m', 'displayName': context.properties['infra_id'] + '-master-node' } }, { 'name': context.properties['infra_id'] + '-worker-node-sa', 'type': 'iam.v1.serviceAccount', 'properties': { 'accountId': context.properties['infra_id'] + '-w', 'displayName': context.properties['infra_id'] + '-worker-node' } }] return {'resources': resources}