使用 registry-creds 插件为 AWS Elastic Container Registry 配置凭证

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

概述

minikube registry-creds 插件 使开发者能够设置凭证,以便从 minikube 集群内部拉取 AWS ECR 中的镜像。

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

先决条件

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

配置并启用 registry-creds 插件

配置 registry-creds 插件

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

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

minikube addons configure registry-creds

按照提示,对 AWS ECR 输入 y。提供所需信息。它应该看起来像这样:

$ 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 之外的每个命名空间中创建名为 awsecr-cred 的 Secret,该 Secret 可用于 Pod 的 imagePullSecrets。它还会更新每个命名空间中的 default 服务账户以使用这些 imagePullSecrets,这意味着任何在 kube-system 命名空间之外创建的、没有明确指定非 default 服务账户的 Pod 都将自动使用镜像拉取 Secret。

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

本教程将使用一个已上传到 AWS ECR 仓库的普通 alpine 镜像。

让我们使用这个设置为从 ECR 拉取 alpine 镜像的 alpine 部署。请确保将 image 字段更新为有效的 URI。

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 的 Secret。
  • 检查镜像路径是否有效。
  • 使用 minikube addons list 检查 registry-creds 插件是否已启用。
  • 如果您使用的是自定义服务账户,请检查是否在工作负载或相关服务账户上指定了 imagePullSecrets

上次修改时间:2023 年 3 月 17 日:添加反引号 (51c5cd3b7)