19.6. GCP 워크로드 ID로 수동 모드 사용


GCP 워크로드 ID를 사용하는 수동 모드는 GCP(Google Cloud Platform)에서 지원됩니다.

참고

이 인증 정보 전략은 새로운 OpenShift Container Platform 클러스터에 대해서만 지원되며 설치 중에 구성해야 합니다. 이 기능을 사용하도록 다른 인증 정보 전략을 사용하는 기존 클러스터를 재구성할 수 없습니다.

19.6.1. GCP 워크로드 ID를 사용한 수동 모드 정보

GCP 워크로드 ID를 사용하는 수동 모드에서 개별 OpenShift Container Platform 클러스터 구성 요소는 단기적이고 제한된 권한 인증 정보를 사용하여 IAM 서비스 계정을 가장할 수 있습니다.

새로운 인증 정보 및 새로 고침 인증 정보에 대한 요청은 IAM 서비스 계정과 결합된 적절하게 구성된 OpenID Connect(OIDC) ID 공급자를 사용하여 자동화됩니다. GCP에서 신뢰하는 서비스 계정 토큰은 OpenShift Container Platform에서 서명하고 Pod에 프로젝션하고 인증에 사용할 수 있습니다. 토큰은 1시간 후에 새로 고쳐집니다.

그림 19.3. 워크로드 ID 인증 흐름

GCP 워크로드 ID를 사용할 때 GCP와 클러스터 간의 자세한 인증 흐름

GCP 워크로드 ID로 수동 모드를 사용하면 개별 OpenShift Container Platform 구성 요소에 제공되는 GCP 인증 정보의 내용이 변경됩니다.

GCP 시크릿 형식

apiVersion: v1
kind: Secret
metadata:
  namespace: <target_namespace> 1
  name: <target_secret_name> 2
data:
  service_account.json: <service_account> 3

1
구성 요소의 네임스페이스입니다.
2
구성 요소 시크릿의 이름입니다.
3
Base64로 인코딩된 서비스 계정입니다.

수명이 긴 자격 증명을 사용하는 Base64로 인코딩된 service_account.json 파일의 내용

{
   "type": "service_account", 1
   "project_id": "<project_id>",
   "private_key_id": "<private_key_id>",
   "private_key": "<private_key>", 2
   "client_email": "<client_email_address>",
   "client_id": "<client_id>",
   "auth_uri": "https://accounts.google.com/o/oauth2/auth",
   "token_uri": "https://oauth2.googleapis.com/token",
   "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
   "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/<client_email_address>"
}

1
인증 정보 유형은 service_account 입니다.
2
GCP 인증에 사용되는 개인 RSA 키입니다. 이 키는 안전하게 유지되어야 하며 순환되지 않습니다.

GCP Workload ID를 사용하여 Base64로 인코딩된 service_account.json 파일의 내용

{
   "type": "external_account", 1
   "audience": "//iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/test-pool/providers/test-provider", 2
   "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
   "token_url": "https://sts.googleapis.com/v1/token",
   "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<client_email_address>:generateAccessToken", 3
   "credential_source": {
      "file": "<path_to_token>", 4
      "format": {
         "type": "text"
      }
   }
}

1
인증 정보 유형은 external_account 입니다.
2
대상 사용자는 GCP 워크로드 ID 공급자입니다.
3
이러한 자격 증명으로 가장할 수 있는 서비스 계정의 리소스 URL입니다.
4
Pod 내의 서비스 계정 토큰 경로입니다. 관례상 이는 OpenShift Container Platform 구성 요소의 /var/run/secrets/openshift/serviceaccount/token입니다.

19.6.2. GCP 워크로드 ID를 사용하여 수동 모드로 구성된 OpenShift Container Platform 클러스터 설치

GCP 워크로드 ID를 사용하여 수동 모드에서 CCO(Cloud Credential Operator)를 사용하도록 구성된 클러스터를 설치하려면 다음을 수행합니다.

참고

GCP 워크로드 ID를 사용할 때 클러스터가 수동 모드에서 작동하므로 필요한 권한으로 구성 요소에 대한 새 인증 정보를 생성할 수 없습니다. OpenShift Container Platform의 다른 마이너 버전으로 업그레이드할 때 종종 새로운 GCP 권한 요구 사항이 있습니다. GCP 워크로드 ID를 사용하는 클러스터를 업그레이드하기 전에 클러스터 관리자는 GCP 권한이 기존 구성 요소에 충분하고 새 구성 요소에서 사용할 수 있는지 수동으로 확인해야 합니다.

19.6.2.1. Cloud Credential Operator 유틸리티 구성

CCO(Cloud Credential Operator)가 수동 모드에서 작동할 때 클러스터 외부에서 클라우드 인증 정보를 생성하고 관리하려면 CCO 유틸리티(ccoctl) 바이너리를 추출 및 준비합니다.

참고

ccoctl 유틸리티는 Linux 환경에서 실행해야 하는 Linux 바이너리입니다.

사전 요구 사항

  • 클러스터 관리자 액세스 권한이 있는 OpenShift Container Platform 계정에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

절차

  1. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지를 가져옵니다.

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서 CCO 컨테이너 이미지를 가져옵니다.

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    참고

    $RELEASE_IMAGE 의 아키텍처가 ccoctl 툴을 사용할 환경의 아키텍처와 일치하는지 확인합니다.

  3. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지 내에서 ccoctl 바이너리를 추출합니다.

    $ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
  4. 다음 명령을 실행하여 ccoctl 을 실행할 수 있도록 권한을 변경합니다.

    $ chmod 775 ccoctl

검증

  • ccoctl 을 사용할 준비가 되었는지 확인하려면 도움말 파일을 표시합니다. 명령을 실행할 때 상대 파일 이름을 사용합니다. 예를 들면 다음과 같습니다.

    $ ./ccoctl.rhel9

    출력 예

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      alibabacloud Manage credentials objects for alibaba cloud
      aws          Manage credentials objects for AWS cloud
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for IBM Cloud
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

19.6.2.2. Cloud Credential Operator 유틸리티를 사용하여 GCP 리소스 생성

ccoctl gcp create-all 명령을 사용하여 GCP 리소스 생성을 자동화할 수 있습니다.

참고

기본적으로 ccoctl은 명령이 실행되는 디렉터리에 오브젝트를 생성합니다. 다른 디렉터리에 오브젝트를 생성하려면 --output-dir 플래그를 사용합니다. 이 절차에서는 <path_to_ccoctl_output_dir>을 사용하여 이 디렉터리를 나타냅니다.

사전 요구 사항

다음이 있어야 합니다.

  • ccoctl 바이너리를 추출하여 준비합니다.

절차

  1. 다음 명령을 실행하여 $RELEASE_IMAGE 변수를 설정합니다.

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 다음 명령을 실행하여 OpenShift Container Platform 릴리스 이미지에서 CredentialsRequest 오브젝트 목록을 추출합니다.

    $ oc adm release extract \
      --from=$RELEASE_IMAGE \
      --credentials-requests \
      --cloud=gcp \
      --to=<path_to_directory_with_list_of_credentials_requests>/credrequests 1
    1
    credrequestsCredentialsRequest 오브젝트 목록이 저장되는 디렉터리입니다. 이 명령은 디렉터리가 없는 경우 해당 디렉터리를 생성합니다.
    참고

    이 명령을 실행하는 데 시간이 다소 걸릴 수 있습니다.

  3. 클러스터에서 클러스터 기능을 사용하여 하나 이상의 선택적 구성 요소를 비활성화하는 경우 비활성화된 구성 요소에 대한 CredentialsRequest 사용자 정의 리소스를 삭제합니다.

    GCP의 OpenShift Container Platform 4.13의 credrequests 디렉터리 콘텐츠 예

    0000_26_cloud-controller-manager-operator_16_credentialsrequest-gcp.yaml 1
    0000_30_cluster-api_00_credentials-request.yaml 2
    0000_30_machine-api-operator_00_credentials-request.yaml 3
    0000_50_cloud-credential-operator_05-gcp-ro-credentialsrequest.yaml 4
    0000_50_cluster-image-registry-operator_01-registry-credentials-request-gcs.yaml 5
    0000_50_cluster-ingress-operator_00-ingress-credentials-request.yaml 6
    0000_50_cluster-network-operator_02-cncc-credentials.yaml 7
    0000_50_cluster-storage-operator_03_credentials_request_gcp.yaml 8

    1
    Cloud Controller Manager Operator CR이 필요합니다.
    2
    TechPreviewNoUpgrade 기능 세트를 사용하는 클러스터의 경우 Cluster API Operator CR이 필요합니다.
    3
    Machine API Operator CR이 필요합니다.
    4
    Cloud Credential Operator CR이 필요합니다.
    5
    Image Registry Operator CR이 필요합니다.
    6
    Ingress Operator CR이 필요합니다.
    7
    Network Operator CR이 필요합니다.
    8
    Storage Operator CR은 선택적 구성 요소이며 클러스터에서 비활성화될 수 있습니다.
  4. ccoctl 툴을 사용하여 redrequests 디렉터리의 모든 CredentialsRequest 오브젝트를 처리합니다.

    $ ccoctl gcp create-all \
      --name=<name> \
      --region=<gcp_region> \
      --project=<gcp_project_id> \
      --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests

    다음과 같습니다.

    • <name>은 추적에 사용되는 생성된 모든 GCP 리소스의 사용자 정의 이름입니다.
    • <gcp_region>는 클라우드 리소스가 생성될 GCP 리전입니다.
    • <gcp_project_id>는 클라우드 리소스를 생성할 GCP 프로젝트 ID입니다.
    • <path_to_directory_with_list_of_credentials_requests>/credrequests 는 GCP 서비스 계정을 생성하는 CredentialsRequest 매니페스트 파일이 포함된 디렉터리입니다.
    참고

    클러스터에서 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 설명서를 참조하십시오.

19.6.2.3. 설치 프로그램 실행

사전 요구 사항

  • 클러스터를 호스팅하는 클라우드 플랫폼으로 계정을 구성합니다.
  • OpenShift Container Platform 릴리스 이미지를 가져옵니다.

절차

  1. 설치 프로그램이 포함된 디렉터리로 변경하고 install-config.yaml 파일을 생성합니다.

    $ openshift-install create install-config --dir <installation_directory>

    여기서 <installation_directory>는 설치 프로그램이 파일을 생성하는 디렉터리입니다.

  2. install-config.yaml 구성 파일을 편집하여 credentialsMode 매개 변수가 Manual로 설정되도록 합니다.

    install-config.yaml 설정 파일 예

    apiVersion: v1
    baseDomain: cluster1.example.com
    credentialsMode: Manual 1
    compute:
    - architecture: amd64
      hyperthreading: Enabled

    1
    이 행은 credentialsMode 매개변수를 Manual로 설정하기 위해 추가됩니다.
  3. 필요한 OpenShift Container Platform 설치 매니페스트를 생성합니다.

    $ openshift-install create manifests
  4. ccoctl이 생성한 매니페스트를 설치 프로그램이 생성한 매니페스트 디렉터리에 복사합니다.

    $ cp /<path_to_ccoctl_output_dir>/manifests/* ./manifests/
  5. ccoctltls 디렉터리에 생성된 개인 키를 설치 디렉터리에 복사합니다.

    $ cp -a /<path_to_ccoctl_output_dir>/tls .
  6. OpenShift Container Platform 설치 프로그램을 실행합니다.

    $ ./openshift-install create cluster

19.6.2.4. 설치 확인

  1. OpenShift Container Platform 클러스터에 연결합니다.
  2. 클러스터에 root 인증 정보가 없는지 확인합니다.

    $ oc get secrets -n kube-system gcp-credentials

    출력은 다음과 유사해야 합니다.

    Error from server (NotFound): secrets "gcp-credentials" not found
  3. 구성 요소가 CCO에서 생성한 인증 정보를 사용하는 대신 시크릿 매니페스트에 지정된 서비스 계정을 가정하는지 확인합니다.

    이미지 레지스트리 Operator가 있는 명령 예

    $ oc get secrets -n openshift-image-registry installer-cloud-credentials -o json | jq -r '.data."service_account.json"' | base64 -d

    출력에 구성 요소에서 사용하는 역할 및 웹 ID 토큰이 표시되고 다음과 유사해야 합니다.

    이미지 레지스트리 Operator가 있는 출력 예

    {
       "type": "external_account", 1
       "audience": "//iam.googleapis.com/projects/123456789/locations/global/workloadIdentityPools/test-pool/providers/test-provider",
       "subject_token_type": "urn:ietf:params:oauth:token-type:jwt",
       "token_url": "https://sts.googleapis.com/v1/token",
       "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/<client-email-address>:generateAccessToken", 2
       "credential_source": {
          "file": "/var/run/secrets/openshift/serviceaccount/token",
          "format": {
             "type": "text"
          }
       }
    }

    1
    인증 정보 유형은 external_account 입니다.
    2
    Image Registry Operator에서 사용하는 서비스 계정의 리소스 URL입니다.

19.6.3. 추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.