apiVersion: v1
kind: Namespace
metadata:
name: appmixer
---
apiVersion: v1
kind: Secret
metadata:
name: ecr-credentials
namespace: appmixer
type: Opaque
stringData:
AWS_ACCESS_KEY_ID: "YOUR_ACCESS_KEY_ID"
AWS_SECRET_ACCESS_KEY: "YOUR_SECRET_ACCESS_KEY"
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: ecr-token-refresher
namespace: appmixer
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: ecr-token-refresher
namespace: appmixer
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "create", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: ecr-token-refresher
namespace: appmixer
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ecr-token-refresher
subjects:
- kind: ServiceAccount
name: ecr-token-refresher
namespace: appmixer
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: ecr-token-refresh
namespace: appmixer
spec:
schedule: "0 */10 * * *" # Every 10 hours
successfulJobsHistoryLimit: 1
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
serviceAccountName: ecr-token-refresher
restartPolicy: OnFailure
containers:
- name: refresh-token
image: amazon/aws-cli:latest
envFrom:
- secretRef:
name: ecr-credentials
command:
- /bin/bash
- -c
- |
set -e
echo "Installing kubectl..."
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
mv kubectl /usr/local/bin/
echo "Getting ECR login token..."
TOKEN=$(aws ecr get-login-password --region eu-central-1)
echo "Creating/updating docker-registry secret..."
kubectl create secret docker-registry ecr-registry-secret \
--docker-server=874193467787.dkr.ecr.eu-central-1.amazonaws.com \
--docker-username=AWS \
--docker-password="$TOKEN" \
--namespace=appmixer \
--dry-run=client -o yaml | kubectl apply -f -
echo "ECR token refresh completed successfully"