使用 registry-creds 插件为 AWS Elastic Container Registry 配置凭证
概述
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
。