8.10. GCP 워크로드 ID를 사용하여 Red Hat OpenShift용 cert-manager Operator 인증

클라우드 인증 정보를 사용하여 GCP Workload Identity 클러스터에서 Red Hat OpenShift에 대한 cert-manager Operator를 인증할 수 있습니다. ccoctl 바이너리를 사용하여 클라우드 인증 정보를 구성할 수 있습니다.

8.10.1. GCP Workload Identity를 사용하여 Red Hat OpenShift용 cert-manager Operator에 대한 클라우드 인증 정보 구성

ccoctl 바이너리를 사용하여 Red Hat OpenShift용 cert-manager Operator에 대한 클라우드 인증 정보를 생성합니다. 그런 다음 GCP 워크로드 ID 클러스터에 적용합니다.

사전 요구 사항

  • ccoctl 바이너리를 추출하여 준비합니다.
  • cert-manager Operator for Red Hat OpenShift 1.11.1 이상이 설치되어 있습니다.
  • 수동 모드에서 Cloud Credential Operator를 사용하여 GCP 워크로드 ID로 OpenShift Container Platform 클러스터를 구성했습니다.

프로세스

  1. 다음 명령을 실행하여 CredentialsRequest 리소스 YAML 파일을 저장할 디렉터리를 생성합니다.

    $ mkdir credentials-request
  2. credentials-request 디렉터리에서 다음 CredentialsRequest 매니페스트가 포함된 YAML 파일을 생성합니다.

    apiVersion: cloudcredential.openshift.io/v1
    kind: CredentialsRequest
    metadata:
      name: cert-manager
      namespace: openshift-cloud-credential-operator
    spec:
      providerSpec:
        apiVersion: cloudcredential.openshift.io/v1
        kind: GCPProviderSpec
        predefinedRoles:
        - roles/dns.admin
      secretRef:
        name: gcp-credentials
        namespace: cert-manager
      serviceAccountNames:
      - cert-manager
    참고

    dns.admin 역할은 Google Cloud DNS 리소스를 관리하기 위해 서비스 계정에 대한 관리자 권한을 제공합니다. cert-manager가 최소 권한이 있는 서비스 계정으로 실행되도록 다음 권한을 사용하여 사용자 지정 역할을 생성할 수 있습니다.

    • dns.resourceRecordSets.*
    • dns.changes.*
    • dns.managedZones.list
  3. ccoctl 툴을 사용하여 다음 명령을 실행하여 CredentialsRequest 오브젝트를 처리합니다.

    $ ccoctl gcp create-service-accounts \
        --name <user_defined_name> --output-dir=<path_to_output_dir> \
        --credentials-requests-dir=<path_to_credrequests_dir> \
        --workload-identity-pool <workload_identity_pool> \
        --workload-identity-provider <workload_identity_provider> \
        --project <gcp_project_id>

    명령 예

    $ ccoctl gcp create-service-accounts \
        --name abcde-20230525-4bac2781 --output-dir=/home/outputdir \
        --credentials-requests-dir=/home/credentials-requests \
        --workload-identity-pool abcde-20230525-4bac2781 \
        --workload-identity-provider abcde-20230525-4bac2781 \
        --project openshift-gcp-devel

  4. 다음 명령을 실행하여 클러스터의 매니페스트 디렉터리에 생성된 보안을 적용합니다.

    $ ls <path_to_output_dir>/manifests/*-credentials.yaml | xargs -I{} oc apply -f {}
  5. 다음 명령을 실행하여 cert-manager Operator for Red Hat OpenShift의 서브스크립션 오브젝트를 업데이트합니다.

    $ oc -n cert-manager-operator patch subscription openshift-cert-manager-operator --type=merge -p '{"spec":{"config":{"env":[{"name":"CLOUD_CREDENTIALS_SECRET_NAME","value":"gcp-credentials"}]}}}'

검증

  1. 다음 명령을 실행하여 재배포된 cert-manager 컨트롤러 Pod의 이름을 가져옵니다.

    $ oc get pods -l app.kubernetes.io/name=cert-manager -n cert-manager

    출력 예

    NAME                          READY   STATUS    RESTARTS   AGE
    cert-manager-bd7fbb9fc-wvbbt  1/1     Running   0          15m39s

  2. 다음 명령을 실행하여 cert-manager 컨트롤러 Pod가 mountPath 에 지정된 경로에 마운트된 GCP 워크로드 ID 인증 정보 볼륨으로 업데이트되었는지 확인합니다.

    $ oc get -n cert-manager pod/<cert-manager_controller_pod_name> -o yaml

    출력 예

    spec:
      containers:
      - args:
        ...
        volumeMounts:
        - mountPath: /var/run/secrets/openshift/serviceaccount
          name: bound-sa-token
          ...
        - mountPath: /.config/gcloud
          name: cloud-credentials
      ...
      volumes:
      - name: bound-sa-token
        projected:
          ...
          sources:
          - serviceAccountToken:
              audience: openshift
              ...
              path: token
      - name: cloud-credentials
        secret:
          ...
          items:
          - key: service_account.json
            path: application_default_credentials.json
          secretName: gcp-credentials

8.10.2. 추가 리소스