Quiero implementar gráficos de timón, que se almacenan en un repositorio en AWS ECR, en el clúster de kubernetes mediante ArgoCD. Pero recibo un problema 401 no autorizado. He pegado todo el problema a continuación.
Unable to create application: application spec is invalid: InvalidSpecError: Unable to get app details: rpc error: code = Unknown desc = `helm chart pull <aws account id>.dkr.ecr.<region>.amazonaws.com/testrepo:1.1.0` failed exit status 1: Error: unexpected status code [manifests 1.1.0]: 401 UnauthorizedSí, puede usar ECR para almacenar gráficos de timón ( https://docs.aws.amazon.com/AmazonECR/latest/userguide/push-oci-artifact.html )
Logré agregar el repositorio a ArgoCD, pero el token caduca, por lo que no es una solución completa.
argocd repo add XXXXXXXXXX.dkr.ecr.us-east-1.amazonaws.com --type helm --name some-helmreponame --enable-oci --username AWS --password $(aws ecr get-login-password --region us-east-1)Estoy experimentando con lo siguiente (aún no completo)
Cree un secreto para un rol de IAM de AWS que le permita obtener una contraseña de inicio de sesión de ECR.
apiVersion: v1 kind: Secret metadata: name: aws-ecr-get-login-password-creds namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: AWS_ACCESS_KEY_ID: <Fill In> AWS_SECRET_ACCESS_KEY: <Fill In>Ahora cree un flujo de trabajo de ArgoCD que se ejecute cada 12 horas o se ejecute en PreSync Hook (totalmente sin probar, intentaré mantener esto actualizado, cualquiera puede actualizarlo por mí).
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: aws-ecr-get-login-password- annotations: argocd.argoproj.io/hook: PreSync spec: entrypoint: update-ecr-login-password templates: # This is what will run. # First the awscli # Then the resource creation using the stdout of the previous step - name: update-ecr-login-password steps: - - name: awscli template: awscli - - name: argocd-ecr-credentials template: argocd-ecr-credentials arguments: parameters: - name: password value: "{{steps.awscli.outputs.result}}" # Create a container that has awscli in it # and run it to get the password using `aws ecr get-login-password` - name: awscli script: image: amazon/aws-cli:latest command: [bash] source: | aws ecr get-login-password --region us-east-1 # We need aws secrets that can run `aws ecr get-login-password` envFrom: - secretRef: name: aws-ecr-get-login-password-creds # Now we can create the secret that has the password in it - name: argocd-ecr-credentials inputs: parameters: - name: password resource: action: create manifest: | apiVersion: v1 kind: Secret metadata: name: argocd-ecr-credentials namespace: argocd labels: argocd.argoproj.io/secret-type: repository stringData: url: 133696059149.dkr.ecr.us-east-1.amazonaws.com username: AWS password: {{inputs.parameters.password}}