Я запускаю свой собственный кластер Kubernetes, развернутый, используя Rancher на AWS Lightsail, которая является альтернативой DigitaloCean. Хотя Lightsail является частью AWS, он не так сильно интегрирован, как остальные AWS. Токен изображения ECR Docker (или пароль) истекает каждые 12 часов, и каждый раз, когда вы хотите тянуть или нажимать, вы должны его обновить. Чтобы использовать его с помощью Kubernetes, вам нужно что -то нужно обновлять секрет автоматически каждые 12 часов. Получение ECR работать с ним так же, как и любой другой кластер без AWS (или EKS). Вы можете прочитать дальше, если хотите интегрировать его с вашим DIY или другими кластерами Non AWS Kubernetes. Я рассчитывал легкий сценарий Python для работы в качестве задания Cron, который будет приносить новый токен для входа каждые 6 часов (в зависимости от вашего развертывания.yaml). Сначала создайте секрет, который удерживает ваши учетные данные AWS с
kubectl create secret -n ecr-kube-helper generic ecr-kube-helper-ecr-secret --from-literal=REGION=[AWS_REGION] --from-literal=ID=[AWS_KEY_ID] --from-literal=SECRET=[AWS_SECRET]
Давайте начнем с создания учетной записи службы.
apiVersion: v1 kind: Namespace metadata: name: ecr-kube-helper labels: name: ecr-kube-helper --- apiVersion: v1 kind: ServiceAccount metadata: namespace: ecr-kube-helper name: svac-ecr-kube-helper --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: role-ecr-kube-helper namespace: ecr-kube-helper rules: - apiGroups: [""] resources: ["secrets"] verbs: ["get","delete", "create"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: ecr-kube-helper name: rb-ecr-kube-helper roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: role-ecr-kube-helper subjects: - kind: ServiceAccount name: svac-ecr-kube-helper namespace: ecr-kube-helper
Затем разверните его с помощью развертывания Cronjob, но обязательно измените значения среды.
apiVersion: batch/v1beta1 kind: CronJob metadata: namespace: ecr-kube-helper name: cron-ecr-kube-helper labels: app: cron-ecr-kube-helper spec: schedule: "0 */6 * * *" successfulJobsHistoryLimit: 3 failedJobsHistoryLimit: 5 jobTemplate: spec: template: spec: restartPolicy: OnFailure serviceAccountName: svac-ecr-kube-helper volumes: - name: svac-ecr-kube-helper-token-dr9bg secret: secretName: svac-ecr-kube-helper-token-dr9bg containers: - name: pod-ecr-kube-helper image: anaganisk/ecr-kube-helper:1.0.0 imagePullPolicy: IfNotPresent volumeMounts: - mountPath: /var/run/secrets/kubernetes.io/serviceaccount name: svac-ecr-kube-helper-token-dr9bg env: - name: AWS_DEFAULT_REGION valueFrom: secretKeyRef: # AWS credientials secret name: ecr-kube-helper-ecr-secret key: REGION - name: AWS_ACCESS_KEY_ID valueFrom: secretKeyRef: # AWS credientials secret name: ecr-kube-helper-ecr-secret key: ID - name: AWS_SECRET_ACCESS_KEY valueFrom: secretKeyRef: # AWS credientials secret name: ecr-kube-helper-ecr-secret key: SECRET - name: LOGLEVEL value: INFO - name: TARGET_SECRET value: xxxSecretxxx - name: TARGET_ECR value: "xxxECR_REPOxxx" - name: TARGET_NAMESPACE value: "ecr-kube-helper" - name: TARGET_EMAIL value: "docker@example.com"
И вы сделали. Пусть он справится с остальным. Помощник теперь может обновить только один идентификатор ECR, поэтому, если вы хотите использовать его с несколькими ECR, вам, возможно, придется создать несколько Cronjobs. Один идентификатор ECR может иметь несколько репозитории, например, ECR_ID.DKR.ECR.AP-South-1.amazonaws.com/repository
GitHub Page https://anaganisk.github.io/ecr-kube-helper/
Оригинал: “https://dev.to/anaganisk/integrating-aws-ecr-elastic-container-registry-with-kubernetes-1c1i”