使用 registry-creds 插件为 AWS 弹性容器注册表配置凭据

如何使用 minikube 集群的 registry-creds 插件为 AWS ECR 配置凭据

概述

minikube registry-creds 插件 使开发人员能够设置凭据,以便从其 minikube 集群内部从 AWS ECR 拉取镜像。

该插件会自动刷新 default 命名空间中 default 服务帐户的服务帐户令牌。

前提条件

  • 一个正常工作的 minikube 集群
  • 您想要使用的 AWS ECR 中的容器镜像
  • 可用于拉取上述镜像的 AWS 访问密钥
  • 托管注册表的帐户的 AWS 帐号

配置并启用 registry-creds 插件

配置 registry-creds 插件

使用以下命令配置 minikube registry-creds 插件

注意:在本教程中,我们将仅关注 AWS ECR。

minikube addons configure registry-creds

按照提示输入 y 表示 AWS ECR。提供所需的信息。它应该如下所示 -

$ minikube addons configure registry-creds

Do you want to enable AWS Elastic Container Registry? [y/n]: y
-- Enter AWS Access Key ID: <put_access_key_here>
-- Enter AWS Secret Access Key: <put_secret_access_key_here>
-- (Optional) Enter AWS Session Token:
-- Enter AWS Region: us-west-2
-- Enter 12 digit AWS Account ID (Comma separated list): <account_number>
-- (Optional) Enter ARN of AWS role to assume:

Do you want to enable Google Container Registry? [y/n]: n

Do you want to enable Docker Registry? [y/n]: n

Do you want to enable Azure Container Registry? [y/n]: n
✅  registry-creds was successfully configured

启用 registry-creds 插件

使用以下命令启用 minikube registry-creds 插件

minikube addons enable registry-creds

该插件将在除 kube-system 之外的每个命名空间中创建可用于 pod 上 imagePullSecrets 的密钥。它还会更新每个命名空间中的 default 服务帐户以使用这些 imagePullSecrets,这意味着在 kube-system 命名空间之外创建的任何没有明确服务帐户(default 除外)的 pod 将自动使用镜像拉取密钥。

创建一个使用 AWS ECR 中镜像的部署

本教程将使用已上传到 AWS ECR 中存储库的原始 alpine 镜像。

让我们使用此 alpine 部署,该部署设置为使用来自 ECR 的 alpine 镜像。确保使用有效的 URI 更新 image 字段。

alpine-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: alpine-deployment
  labels:
    app: alpine
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alpine
  template:
    metadata:
      labels:
        app: alpine
    spec:
      containers:
      - name: alpine
        image: <<aws_account_number>>.dkr.ecr.<<aws_region>>.amazonaws.com/alpine:latest
        command: ['sh', '-c', 'echo Container is Running ; sleep 3600']

创建一个名为 alpine-deployment.yaml 的文件,并将上面的内容粘贴进去。请务必将«aws_account_number»和«aws_region»替换为您的实际帐号和 aws 区域。然后使用以下命令创建 alpine 部署

kubectl apply -f alpine-deployment.yaml

测试您的部署

描述 pod 并验证镜像拉取是否成功

kubectl describe pods << alpine-deployment-pod-name >>

您应该会看到类似这样的事件

Successfully pulled image "<<account_number>>.dkr.ecr.<<aws_region>>.amazonaws.com/alpine:latest"

如果您没有看到该事件,请查看故障排除部分。

回顾

在上面的教程中,我们配置了 registry-creds 插件以刷新 AWS ECR 的凭据,以便我们可以将私有容器镜像拉取到我们的 minikube 集群上。我们最终创建了一个使用私有 AWS ECR 存储库中镜像的部署。

故障排除

  • 通过运行 kubectl get secrets 检查在 default 命名空间中是否有一个名为 awsecr-cred 的密钥。
  • 检查镜像路径是否有效。
  • 使用 minikube addons list 检查是否已启用 registry-creds 插件。
  • 如果您使用的是自定义服务帐户,请检查是否在工作负载或相关服务帐户上指定了 imagePullSecrets

最后修改于 2023 年 3 月 17 日: 添加反引号 (51c5cd3b7)