0

ECR アクセスを使用して Spinnaker をセットアップできません。

背景: EKS クラスターで helm を使用して Spinnaker をインストールし、クラスターに必要な ECR 権限があることを確認しました (clouddriver ポッド内から ECR​​ コマンドを手動で実行することにより)。ここの指示に従って、Spinnaker+ECR をセットアップします: https://www.spinnaker.io/setup/install/providers/docker-registry/

問題:実行すると:

hal config provider docker-registry account add my-ecr-registry \
--address $ADDRESS \
--username AWS \
--password-command "aws --region us-west-2 ecr get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d | sed 's/^AWS://'"

次の出力が得られます。

+ Get current deployment
  Success
- Add the some-ecr-registry account
  Failure
Problems in default.provider.dockerRegistry.some-ecr-registry:
- WARNING Resolved Password was empty, missing dependencies for
  running password command?
- WARNING You have a supplied a username but no password.
! ERROR Unable to fetch tags from the docker repository: code, 400
  Bad Request
? Can the provided user access this repository?
- WARNING None of your supplied repositories contain any tags.
  Spinnaker will not be able to deploy any docker images.
? Push some images to your registry.
Problems in halconfig:
- WARNING There is a newer version of Halyard available (1.28.0),
  please update when possible
? Run 'sudo apt-get update && sudo apt-get install
  spinnaker-halyard -y' to upgrade
- Failed to add account some-ecr-registry for provider
  dockerRegistry.
  • clouddriver pod に aws-cli がインストールされていることを確認しました。また、clouddriver pod から password-command を直接実行でき、トークンが正常に返されることを確認しました。
  • また、ECR トークンを手動で生成すると、run hal config provider docker-registry account add my-ecr-registry --address $ADDRESS --username AWS --password-command "echo $MANUALLY_GENERATED_TOKEN"すべてが正常に機能することも確認しました。そのため、password-command に固有の問題があり、これをデバッグする方法がわかりません。
  • もう 1 つの奇妙な動作: パスワード コマンドを次のように簡略化するとhal config provider docker-registry account add some-ecr-registry --address $ADDRESS --username AWS --repositories code --password-command "aws --region us-west-2 ecr get-authorization-token"、 という追加の出力が得られます"- WARNING Password command returned non 0 return code stderr/stdout was:bash: aws: command not found"。この出力は、この簡略化されたコマンドに対してのみ表示されます。

これをデバッグする方法についてのアドバイスは大歓迎です。

4

2 に答える 2

0

私のように、ECR レジストリが別のアカウントにある場合、レジストリが存在するターゲット アカウントの役割を強制的に引き受ける必要があります。

passwordCommand: read -r AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN <<< `aws sts assume-role --role-arn arn:aws:iam::<AWS_ACCOUNT>:role/<SPINNAKER ROLE_NAME> --query "[Credentials.AccessKeyId, Credentials.SecretAccessKey, Credentials.SessionToken]" --output text --role-session-name spinnakerManaged-w2`; export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN; aws ecr get-authorization-token --region us-west-2 --output text --query 'authorizationData[].authorizationToken' --registry-ids <AWS_ACCOUNT> | base64 -d | sed 's/^AWS://'

https://github.com/spinnaker/spinnaker/issues/5374#issuecomment-607468678へのクレジット

于 2020-07-08T09:36:56.330 に答える