Рубрики
Без рубрики

Интеграция AWS ECR (реестр эластичных контейнеров) с Kubernetes

Я запускаю свой собственный кластер Kubernetes, развернутый, используя Rancher на AWS Lightsail, которая является альтернативой копать … с меткой Kubernetes, AWS, Python.

Я запускаю свой собственный кластер 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”