使用 registry-creds 插件配置 AWS Elastic Container Registry 凭证
概述
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
根据提示,为 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 之外的每个命名空间中创建可用于 pod 的 imagePullSecrets 的 Secret。它还会更新每个命名空间中的 default 服务账户以使用这些 imagePullSecrets,这意味着在 kube-system 命名空间之外创建的任何没有显式服务账户(非 default)的 pod 都将自动使用镜像拉取 Secret。
创建一个使用 AWS ECR 中镜像的部署
本教程将使用一个已上传到 AWS ECR 仓库的普通 alpine 镜像。
让我们使用这个配置为使用 ECR 中 alpine 镜像的 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的 Secret。 - 检查镜像路径是否有效。
- 使用
minikube addons list检查 registry-creds 插件是否已启用。 - 如果你使用的是自定义服务账户,请检查是否在工作负载或相关服务账户上指定了
imagePullSecrets。