OpenShift Data Foundation 추가 기능에 대한 신뢰할 수 있는 프로파일 설정

가상 프라이빗 클라우드 클래식 클러스터

ODF에 신뢰할 수 있는 프로파일을 사용하여 클러스터에서 실행 중인 파드가 계정 또는 클러스터의 다른 리소스에 액세스할 수 있는 권한을 제한할 수 있습니다. 신뢰할 수 있는 프로파일에 대한 자세한 정보는 신뢰할 수 있는 프로파일 작성 을 참조하십시오.

OpenShift Data Foundation 추가 기능 사용

  1. 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  2. 클러스터에서 해당 애드온을 활성화하십시오. 매개변수 참조 를 검토하십시오.

    명령 예제:

    ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X
    
  3. 추가 기능 상태가 normal 이고 상태가 ready 인지 확인하십시오.

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
  4. 메트릭 에이전트 팟 (Pod) 이 배치되었으며 상태가 Running 인지 확인하십시오.

    kubectl get pods -n kube-system | grep ibm-storage-metrics-agent
    

    출력 예:

    ibm-storage-metrics-agent-644cd95b5b-rh2gd        2/2     Running   0          7h42m
    

ODF에 대한 신뢰할 수 있는 프로필 설정하기

  1. 신뢰할 수 있는 프로파일 작성 단계를 수행하십시오. 프로파일의 조건 에서 다음 액세스 권한을 지정하십시오.

    • 네임스페이스kube-system 인 경우 액세스 허용
    • Satellite 서비스 역할- Satellite Link 관리자, 독자
    • Kubernetes Service 역할-관리자, 편집자
    • 청구 서비스 역할-독자, 운영자
  2. 신뢰할 수 있는 프로파일을 작성한 후 콘솔의 신뢰할 수 있는 프로파일 페이지에서 ID를 복사하십시오.

  3. 추가 기능이 사용하는 Kubernetes 시크릿에서 프로파일 ID 또는 API키 를 사용할지 결정하십시오. 신뢰할 수 있는 프로파일에 대한 ID 또는 API키를 사용하여 시크릿을 작성할 수 있습니다. 다음 텍스트를 저장하고 신임 정보를 입력하십시오. 단계에 따라 시크릿을 수동으로 작성하거나 쉘 스크립트를 사용하여 클러스터에서 시크릿을 자동으로 작성 할 수 있습니다.

    팟 (Pod) ID가 있는 예제 신임 정보:

    IBMCLOUD_AUTHTYPE=pod-identity
    IBMCLOUD_PROFILEID=<TRUSTED-PROFILE-ID>
    

    API키가 있는 예제 신임 정보입니다.

    IBMCLOUD_AUTHTYPE=iam
    IBMCLOUD_APIKEY=<API-KEY>
    
  4. base64 에 자격 증명을 인코딩하십시오.

    echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY>
    IBMCLOUD_APIKEY=<API-KEY>" | base64
    
  5. 신뢰할 수 있는 프로파일에 대한 신임 정보를 포함하는 클러스터에서 시크릿을 작성하십시오. 다음 YAML을 ibm-cloud-credentials.yaml 파일에 저장하십시오. ibm-credentials.env: 필드에 base64 인코딩 API키 또는 신뢰할 수 있는 프로파일의 ID를 입력하십시오.

    apiVersion: v1
    data:
      ibm-credentials.env: # Trusted profile ID
    kind: Secret
    metadata:
      name: ibm-cloud-credentials
      namespace: kube-system
    type: Opaque
    
  6. 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.

  7. 클러스터의 시크릿을 작성하십시오.

    kubectl apply -f ibm-cloud-credentials.yaml
    
  8. 에이전트 팟 (Pod) 을 다시 시작하십시오.

    kubectl delete pod <ibm-storage-metrics-agent> -n kube-system>
    

쉘 스크립트를 사용하여 시크릿 자동 작성

  1. 신뢰할 수 있는 프로파일 작성 단계를 수행하십시오. 프로파일의 조건 에서 다음 액세스 권한을 지정하십시오.

    • 네임스페이스kube-system 인 경우 액세스 허용
    • Satellite 서비스 역할- Satellite Link 관리자, 독자
    • Kubernetes Service 역할-관리자, 편집자
    • 청구 서비스 역할-독자, 운영자
  2. 다음 스크립트를 generate-secret.sh 파일에 저장하십시오.

    IBMCLOUD_AUTHTYPE=
    SECRET=
    error() {
        if [[ $? != 0 ]]; then
            echo "$1"; exit 1
        fi
    }
    #validate_arguments validates the arguments provided to the script
    validate_arguments() {
        if [[ "$#" -eq 1 ]]; then
        if [[ "$1" == "-h" ]] || [[ "$1" == "--help" ]]; then
            usage; exit 1
        fi
        fi
            #number of arguments provided to the script must be 2
        if [[ "$#" -ne 2 ]]; then
            echo "Invalid number of arguments provided"
            usage; exit 1
        fi
        #1st argument must be 'iam' or 'pod-identity'
        if [[ "$1" != "iam" ]] && [[ "$1" != "pod-identity" ]]; then
            echo "Provide a valid auth-type"
            usage; exit 1
        fi
        IBMCLOUD_AUTHTYPE=$1
        SECRET=$2
    }
    #usage - prints the usage for execution of script
    usage() {
        echo "USAGE:
        bash generate-secret.sh <auth-type> <apikey/profile-id>
        auth-type: auth-type should be either iam or pod-identity. Provide iam to use api
    key, pod-identity to use trusted profile"
    }
    #main
    main() {
        validate_arguments "$@"
        auth_type="IBMCLOUD_AUTHTYPE=$IBMCLOUD_AUTHTYPE"
        secret=
        if [[ "$IBMCLOUD_AUTHTYPE" == "iam" ]]; then
            secret="IBMCLOUD_APIKEY=$SECRET"
        else
            secret="IBMCLOUD_PROFILEID=$SECRET"
        fi
        encodedValue=$(echo -e "$auth_type\n$secret" | base64)
        #on certain os, base64 encoding introduces newline, removing the same here.
        encodedValue=${encodedValue//$'\n'/}
        #fetch the agent pod name
        agentPodName=$(kubectl get pods -n kube-system | grep ibm-storage-metrics-agent | awk '{print $1}')
        error "$(date +"%b %d %G %H:%M:%S"):  Unable to fetch ODF agent pod."
        if [[ "$agentPodName" == "" ]]; then
            echo "$(date +"%b %d %G %H:%M:%S"):  Error - ibm-storage-metrics-agent pod
    not found"
            exit 1
        fi
        echo "apiVersion: v1
    data:
    ibm-credentials.env: $encodedValue
    kind: Secret
    metadata:
    name: ibm-cloud-credentials
    namespace: kube-system
    type: Opaque" > ibm-cloud-credentials.yaml
        #create the k8s secret
        kubectl apply -f ibm-cloud-credentials.yaml &> /dev/null
        error "$(date +"%b %d %G %H:%M:%S"):  Error creating ibm-cloud-credentials
    secret."
        echo "$(date +"%b %d %G %H:%M:%S"):  Created ibm-cloud-credentials secret"
        #restart the ODF agent pod
        echo "$(date +"%b %d %G %H:%M:%S"):  Restarting $agentPodName pod"
        kubectl delete pod "$agentPodName" -n kube-system &> /dev/null
        error "$(date +"%b %d %G %H:%M:%S"):  Error restarting $agentPodName pod in
    kube-system namespace."
        agentPodStatus=
        for i in {1..12}
        do
            sleep 5
            agentPodStatus=$(kubectl get pods -n kube-system | grep ibm-storage-metrics-agent | awk '{print $3}')
            if [[ "$agentPodStatus" == "Running" ]]; then
                echo "$(date +"%b %d %G %H:%M:%S"):  $i: ODF billing agent is now using
    ibm-cloud-credentials secret"
                rm ibm-cloud-credentials.yaml
                error "Error deleting ibm-cloud-credentials.yaml."
                exit 0
            fi
        done
        error "$(date +"%b %d %G %H:%M:%S"):  Error - ibm-storage-metrics-agent is in
    $agentPodStatus state"
    }
    main "$@"
    
  3. generate-secret.sh 스크립트를 실행하고 iam 또는 pod-identityIBMCLOUD_AUTHTYPEPROFILE-ID 또는 API-KEY 로 지정하십시오.

    신뢰할 수 있는 프로파일 ID로 pod-identity 를 사용하여 generate-secret.sh 를 실행하는 예제 명령입니다.

    sh ./generate-secret.sh pod-identity PROFILE-ID
    

    API키와 함께 iam 를 사용하여 generate-secret.sh 를 실행하는 예제 명령입니다.

    sh ./generate-secret.sh iam API-KEY
    
  4. 에이전트 팟 (Pod) 을 다시 시작하십시오.

    oc delete pod <ibm-storage-metrics-agent> -n kube-sysem
    
  5. 출력에서 secret type 를 찾아 에이전트 팟 (Pod) 의 로그를 가져와서 드라이버가 올바른 신임 정보를 사용하는지 확인하십시오. 예를 들면 "secret-used":"ibm-cloud-credentials","type":"pod-identity"입니다.

    oc logs ibm-storage-metrics-agent-xxx -c storage-secret-sidecar -n kube-system