7.8. kube-system 프로젝트에 관리자 수준 시크릿을 저장하는 대안
기본적으로 관리자 시크릿은 kube-system
프로젝트에 저장됩니다. install-config.yaml
파일에서 credentialsMode
매개변수를 Manual
로 구성한 경우 다음 대안 중 하나를 사용해야 합니다.
- 장기 클라우드 인증 정보를 수동으로 관리하려면 수동으로 장기 인증 정보를 생성하는 절차를 따르십시오.
- 개별 구성 요소의 클러스터 외부에서 관리되는 단기 인증 정보를 구현하려면 GCP 클러스터 구성 절차에 따라 단기 인증 정보를 사용합니다.
7.8.1. 수동으로 장기 인증 정보 생성
Cloud Credential Operator (CCO)는 클라우드 아이덴티티 및 액세스 관리 (IAM) API에 연결할 수 없는 환경에서 설치하기 전에 수동 모드로 전환할 수 있습니다. 또는 관리자가 클러스터 kube-system
네임 스페이스에 관리자 수준의 인증 정보 시크릿을 저장하지 않도록 합니다.
프로세스
설치 프로그램이 사용하는 GCP 계정에 다음 세분화된 권한을 추가합니다.
예 7.3. 필요한 GCP 권한
- compute.machineTypes.list
- compute.regions.list
- compute.zones.list
- dns.changes.create
- dns.changes.get
- dns.managedZones.create
- dns.managedZones.delete
- dns.managedZones.get
- dns.managedZones.list
- dns.networks.bindPrivateDNSZone
- dns.resourceRecordSets.create
- dns.resourceRecordSets.delete
- dns.resourceRecordSets.list
install-config.yaml
구성 파일의credentialsMode
매개변수를Manual
로 설정하지 않은 경우 다음과 같이 값을 수정합니다.구성 파일 스니펫 샘플
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...
이전에 설치 매니페스트 파일을 생성하지 않은 경우 다음 명령을 실행하여 수행합니다.
$ openshift-install create manifests --dir <installation_directory>
여기서
<installation_directory>
는 설치 프로그램이 파일을 생성하는 디렉터리입니다.다음 명령을 실행하여 설치 파일의 릴리스 이미지로
$RELEASE_IMAGE
변수를 설정합니다.$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서
CredentialsRequest
CR(사용자 정의 리소스) 목록을 추출합니다.$ oc adm release extract \ --from=$RELEASE_IMAGE \ --credentials-requests \ --included \1 --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2 --to=<path_to_directory_for_credentials_requests> 3
이 명령을 수행하면 각
CredentialsRequest
오브젝트에 대해 YAML 파일이 생성됩니다.샘플
CredentialsRequest
개체apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: <component_credentials_request> namespace: openshift-cloud-credential-operator ... spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: GCPProviderSpec predefinedRoles: - roles/storage.admin - roles/iam.serviceAccountUser skipServiceCheck: true ...
이전에 생성한
openshift-install
매니페스트 디렉터리에 시크릿 YAML 파일을 만듭니다. 시크릿은 각CredentialsRequest
오브젝트의spec.secretRef
에 정의된 네임 스페이스 및 시크릿 이름을 사용하여 저장해야 합니다.보안이 포함된 샘플
CredentialsRequest
오브젝트apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: <component_credentials_request> namespace: openshift-cloud-credential-operator ... spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 ... secretRef: name: <component_secret> namespace: <component_namespace> ...
샘플
Secret
오브젝트apiVersion: v1 kind: Secret metadata: name: <component_secret> namespace: <component_namespace> data: service_account.json: <base64_encoded_gcp_service_account_file>
수동으로 유지 관리되는 인증 정보를 사용하는 클러스터를 업그레이드하기 전에 CCO가 업그레이드 가능한 상태인지 확인해야 합니다.
7.8.2. 단기 인증 정보를 사용하도록 GCP 클러스터 구성
GCP 워크로드 ID를 사용하도록 구성된 클러스터를 설치하려면 CCO 유틸리티를 구성하고 클러스터에 필요한 GCP 리소스를 생성해야 합니다.
7.8.2.1. Cloud Credential Operator 유틸리티 구성
CCO(Cloud Credential Operator)가 수동 모드에서 작동할 때 클러스터 외부에서 클라우드 인증 정보를 생성하고 관리하려면 CCO 유틸리티(ccoctl
) 바이너리를 추출 및 준비합니다.
ccoctl
유틸리티는 Linux 환경에서 실행해야 하는 Linux 바이너리입니다.
사전 요구 사항
- 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
-
OpenShift CLI(
oc
)가 설치되어 있습니다.
설치 프로그램이 사용하는 GCP 계정에 다음 인증 옵션 중 하나를 추가했습니다.
- IAM 워크로드 ID 풀 관리자 역할.
다음과 같은 세분화된 권한:
예 7.4. 필요한 GCP 권한
- compute.projects.get
- iam.googleapis.com/workloadIdentityPoolProviders.create
- iam.googleapis.com/workloadIdentityPoolProviders.get
- iam.googleapis.com/workloadIdentityPools.create
- iam.googleapis.com/workloadIdentityPools.delete
- iam.googleapis.com/workloadIdentityPools.get
- iam.googleapis.com/workloadIdentityPools.undelete
- iam.roles.create
- iam.roles.delete
- iam.roles.list
- iam.roles.undelete
- iam.roles.update
- iam.serviceAccounts.create
- iam.serviceAccounts.delete
- iam.serviceAccounts.getIamPolicy
- iam.serviceAccounts.list
- iam.serviceAccounts.setIamPolicy
- iam.workloadIdentityPoolProviders.get
- iam.workloadIdentityPools.delete
- resourcemanager.projects.get
- resourcemanager.projects.getIamPolicy
- resourcemanager.projects.setIamPolicy
- storage.buckets.create
- storage.buckets.delete
- storage.buckets.get
- storage.buckets.getIamPolicy
- storage.buckets.setIamPolicy
- storage.objects.create
- storage.objects.delete
- storage.objects.list
프로세스
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지의 변수를 설정합니다.
$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서 CCO 컨테이너 이미지를 가져옵니다.
$ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
참고$RELEASE_IMAGE
의 아키텍처가ccoctl
툴을 사용할 환경의 아키텍처와 일치하는지 확인합니다.다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지 내에서
ccoctl
바이너리를 추출합니다.$ oc image extract $CCO_IMAGE \ --file="/usr/bin/ccoctl.<rhel_version>" \1 -a ~/.pull-secret
- 1
- &
lt;rhel_version
> 의 경우 호스트가 사용하는 RHEL(Red Hat Enterprise Linux) 버전에 해당하는 값을 지정합니다. 값을 지정하지 않으면 기본적으로ccoctl.rhel8
이 사용됩니다. 다음 값이 유효합니다.-
rhel8
: RHEL 8을 사용하는 호스트에 대해 이 값을 지정합니다. -
rhel9
: RHEL 9를 사용하는 호스트에 대해 이 값을 지정합니다.
-
다음 명령을 실행하여
ccoctl
을 실행할 수 있도록 권한을 변경합니다.$ chmod 775 ccoctl.<rhel_version>
검증
ccoctl
을 사용할 준비가 되었는지 확인하려면 도움말 파일을 표시합니다. 명령을 실행할 때 상대 파일 이름을 사용합니다. 예를 들면 다음과 같습니다.$ ./ccoctl.rhel9
출력 예
OpenShift credentials provisioning tool Usage: ccoctl [command] Available Commands: aws Manage credentials objects for AWS cloud azure Manage credentials objects for Azure gcp Manage credentials objects for Google cloud help Help about any command ibmcloud Manage credentials objects for {ibm-cloud-title} nutanix Manage credentials objects for Nutanix Flags: -h, --help help for ccoctl Use "ccoctl [command] --help" for more information about a command.
7.8.2.2. Cloud Credential Operator 유틸리티를 사용하여 GCP 리소스 생성
ccoctl gcp create-all
명령을 사용하여 GCP 리소스 생성을 자동화할 수 있습니다.
기본적으로 ccoctl
은 명령이 실행되는 디렉터리에 오브젝트를 생성합니다. 다른 디렉터리에 오브젝트를 생성하려면 --output-dir
플래그를 사용합니다. 이 절차에서는 <path_to_ccoctl_output_dir>
을 사용하여 이 디렉터리를 나타냅니다.
사전 요구 사항
다음이 있어야 합니다.
-
ccoctl
바이너리를 추출하여 준비합니다.
프로세스
다음 명령을 실행하여 설치 파일의 릴리스 이미지로
$RELEASE_IMAGE
변수를 설정합니다.$ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서
CredentialsRequest
오브젝트 목록을 추출합니다.$ oc adm release extract \ --from=$RELEASE_IMAGE \ --credentials-requests \ --included \1 --install-config=<path_to_directory_with_installation_configuration>/install-config.yaml \2 --to=<path_to_directory_for_credentials_requests> 3
참고이 명령을 실행하는 데 시간이 다소 걸릴 수 있습니다.
ccoctl
툴을 사용하여 다음 명령을 실행하여 모든CredentialsRequest
오브젝트를 처리합니다.$ ccoctl gcp create-all \ --name=<name> \1 --region=<gcp_region> \2 --project=<gcp_project_id> \3 --credentials-requests-dir=<path_to_credentials_requests_directory> 4
참고클러스터에서
TechPreviewNoUpgrade
기능 세트에서 활성화한 기술 프리뷰 기능을 사용하는 경우--enable-tech-preview
매개변수를 포함해야 합니다.
검증
OpenShift Container Platform 보안이 생성되었는지 확인하려면
<path_to_ccoctl_output_dir>/manifests
디렉터리에 파일을 나열합니다.$ ls <path_to_ccoctl_output_dir>/manifests
출력 예
cluster-authentication-02-config.yaml openshift-cloud-controller-manager-gcp-ccm-cloud-credentials-credentials.yaml openshift-cloud-credential-operator-cloud-credential-operator-gcp-ro-creds-credentials.yaml openshift-cloud-network-config-controller-cloud-credentials-credentials.yaml openshift-cluster-api-capg-manager-bootstrap-credentials-credentials.yaml openshift-cluster-csi-drivers-gcp-pd-cloud-credentials-credentials.yaml openshift-image-registry-installer-cloud-credentials-credentials.yaml openshift-ingress-operator-cloud-credentials-credentials.yaml openshift-machine-api-gcp-cloud-credentials-credentials.yaml
GCP를 쿼리하여 IAM 서비스 계정이 생성되었는지 확인할 수 있습니다. 자세한 내용은 IAM 서비스 계정 나열에 대한 GCP 설명서를 참조하십시오.
7.8.2.3. Cloud Credential Operator 유틸리티 매니페스트 통합
개별 구성 요소에 대해 클러스터 외부에서 관리되는 단기 보안 인증 정보를 구현하려면 Cloud Credential Operator 유틸리티(ccoctl
)가 생성된 매니페스트 파일을 설치 프로그램의 올바른 디렉터리로 이동해야 합니다.
사전 요구 사항
- 클러스터를 호스팅하는 클라우드 플랫폼으로 계정을 구성했습니다.
-
Cloud Credential Operator 유틸리티(
ccoctl
)를 구성했습니다. -
ccoctl
유틸리티를 사용하여 클러스터에 필요한 클라우드 공급자 리소스를 생성했습니다.
프로세스
설치 프로그램이 사용하는 GCP 계정에 다음 세분화된 권한을 추가합니다.
예 7.5. 필요한 GCP 권한
- compute.machineTypes.list
- compute.regions.list
- compute.zones.list
- dns.changes.create
- dns.changes.get
- dns.managedZones.create
- dns.managedZones.delete
- dns.managedZones.get
- dns.managedZones.list
- dns.networks.bindPrivateDNSZone
- dns.resourceRecordSets.create
- dns.resourceRecordSets.delete
- dns.resourceRecordSets.list
install-config.yaml
구성 파일의credentialsMode
매개변수를Manual
로 설정하지 않은 경우 다음과 같이 값을 수정합니다.구성 파일 스니펫 샘플
apiVersion: v1 baseDomain: example.com credentialsMode: Manual # ...
이전에 설치 매니페스트 파일을 생성하지 않은 경우 다음 명령을 실행하여 수행합니다.
$ openshift-install create manifests --dir <installation_directory>
여기서
<installation_directory>
는 설치 프로그램이 파일을 생성하는 디렉터리입니다.ccoctl
유틸리티가 생성된매니페스트
를 다음 명령을 실행하여 설치 프로그램에서 생성한 매니페스트에 복사합니다.$ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
개인 키가 포함된
tls
디렉터리를 설치 디렉터리에 복사합니다.$ cp -a /<path_to_ccoctl_output_dir>/tls .