OpenShift Data Foundation アドオンの信頼できるプロファイルのセットアップ
仮想プライベートクラウド クラシッククラスタ
ODFの信頼済みプロファイルを使用して、クラスタ内で実行中のPodがアカウントまたはクラスタ内の他のリソースにアクセスできるように制限できます。 トラステッド・プロファイルについて詳しくは、 トラステッド・プロファイルの作成 を参照してください。
OpenShift Data Foundation アドオンの有効化
-
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
クラスターでこのアドオンを有効にしてください。 「 パラメーター・リファレンス」を確認します。
コマンド例:
ibmcloud oc cluster addon enable openshift-data-foundation -c CLUSTER_NAME --version 4.X.X -
アドオンの状態が
normalであり、状況がreadyであることを確認します。ibmcloud oc cluster addon ls --cluster CLUSTER-ID -
メトリック・エージェント・ポッドがデプロイされ、状況が
Runningであることを確認します。kubectl get pods -n kube-system | grep ibm-storage-metrics-agent出力例:
ibm-storage-metrics-agent-644cd95b5b-rh2gd 2/2 Running 0 7h42m
ODF用の信頼できるプロファイルの設定
-
ステップに従って、 トラステッド・プロファイルを作成します。 プロファイルの 「条件」 で、必ず以下のアクセス権限を指定してください。
- 「名前空間」 が
kube-systemの場合にアクセスを許可する - Satellite サービス役割- Satellite Link 管理者、リーダー
- Kubernetes Service の役割-マネージャー、エディター
- 請求サービス役割-リーダー、オペレーター
- 「名前空間」 が
-
トラステッド・プロファイルを作成した後、コンソールの 「トラステッド・プロファイル」 ページから ID をコピーします。
-
アドオンが使用する Kubernetes シークレットで、 プロファイル ID または API キー を使用するかどうかを決定します。 トラステッド・プロファイルの ID または API キーを使用して、シークレットを作成できます。 以下のテキストを保存し、資格情報を入力します。 この手順に従ってシークレットを手動で作成することも、シェル・スクリプトを使用して クラスター内にシークレットを自動的に作成 することもできます。
ポッド ID を使用した資格情報の例:
IBMCLOUD_AUTHTYPE=pod-identity IBMCLOUD_PROFILEID=<TRUSTED-PROFILE-ID>API キーを使用した資格情報の例。
IBMCLOUD_AUTHTYPE=iam IBMCLOUD_APIKEY=<API-KEY> -
認証情報を base64 にエンコードします。
echo -n "IBMCLOUD_AUTHTYPE=<IAM-OR-POD-IDENTITY> IBMCLOUD_APIKEY=<API-KEY>" | base64 -
信頼できるプロファイルの資格情報を含むシークレットをクラスター内に作成します。 以下の 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 -
アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
クラスター内にシークレットを作成します。
kubectl apply -f ibm-cloud-credentials.yaml -
エージェント・ポッドを再始動します。
kubectl delete pod <ibm-storage-metrics-agent> -n kube-system>
シェル・スクリプトを使用したシークレットの自動作成
-
ステップに従って、 トラステッド・プロファイルを作成します。 プロファイルの 「条件」 で、必ず以下のアクセス権限を指定してください。
- 「名前空間」 が
kube-systemの場合にアクセスを許可する - Satellite サービス役割- Satellite Link 管理者、リーダー
- Kubernetes Service の役割-マネージャー、エディター
- 請求サービス役割-リーダー、オペレーター
- 「名前空間」 が
-
以下のスクリプトを
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 "$@" -
generate-secret.shスクリプトを実行し、IBMCLOUD_AUTHTYPEとしてiamまたはpod-identityを指定し、PROFILE-IDまたはAPI-KEYを指定します。信頼できるプロファイル ID を持つ
pod-identityを使用してgenerate-secret.shを実行するコマンドの例。sh ./generate-secret.sh pod-identity PROFILE-IDAPI キーを指定して
iamを使用し、generate-secret.shを実行するコマンドの例。sh ./generate-secret.sh iam API-KEY -
エージェント・ポッドを再始動します。
oc delete pod <ibm-storage-metrics-agent> -n kube-sysem -
出力で
secret typeを探して、エージェント・ポッドのログを取得し、ドライバーが正しい資格情報を使用していることを確認します。 例えば、"secret-used":"ibm-cloud-credentials","type":"pod-identity"などです。oc logs ibm-storage-metrics-agent-xxx -c storage-secret-sidecar -n kube-system