rma*_*002 3 kubernetes docker-registry minikube kubernetes-secrets
我在启动 Pod 时收到此错误
Failed to pull image "docker-username/docker-private-repository:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for docker-username/docker-private-repository, repository does not exist or may require 'docker login': denied: requested access to the resource is denied
Run Code Online (Sandbox Code Playgroud)
我的设置如下:
使用命令行创建秘密服务
kubectl create secret docker-registry docker-keys --docker-username=docker-username --docker-password=password --docker-email=docker-email@gmail.com --docker-server=https://index.docker.io/v1
Run Code Online (Sandbox Code Playgroud)
它会在机密内生成以下数据
kubectl get secret docker-keys -o json | jq '.data | map_values(@base64d)'
{
".dockerconfigjson": "{\"auths\":{\"https://index.docker.io/v1\":{\"username\":\"docker-username\",\"password\":\"password\",\"email\":\"docker-email@gmail.com\",\"auth\":\"base64encodedtoken\"}}}"
}
Run Code Online (Sandbox Code Playgroud)
然后在部署中我使用docker-keys秘密
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-private-repository
labels:
app: docker-private-repository
spec:
replicas: 1
selector:
matchLabels:
app: docker-private-repository
template:
metadata:
labels:
app: docker-private-repository
spec:
imagePullSecrets:
- name: docker-keys
containers:
- name: docker-private-repository
image: docker-username/docker-private-repository:latest
imagePullPolicy: Always
ports:
- containerPort: 3000
Run Code Online (Sandbox Code Playgroud)
我确实尝试寻找解决方案,但总是以上述设置告终。
Update1:
Secrets 服务和 pod 运行在同一个命名空间中default。从 docker-hub 手动拉取工作
docker pull docker-username/docker-private-repository:latest
latest: Pulling from docker-username/docker-private-repository
0ecb575e629c: Already exists
...
7467d1831b69: Already exists
Digest: sha256:153643ecb19c2ce54635839ce9393b2e256ce6c34a2fe75b91c7a41525a6a535
Status: Downloaded newer image for docker-username/docker-private-repository:latest
docker.io/docker-username/docker-private-repository:latest
Run Code Online (Sandbox Code Playgroud)
更新2 kubectl describe pod
我有 2 个 sercrets 服务,一个用于 dockerhub 凭据,另一个token-rzlx6用于任何原因。问题是当我运行describe pod时,我看不到将dockerhub挂载为的秘密token-rzlx6,这可能是原因吗?为什么它没有安装?
...
Volumes:
default-token-rzlx6:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-rzlx6
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
...
Run Code Online (Sandbox Code Playgroud)
所以问题出在 docker-server 值上。根据我看过的教程,我使用的是 api V1,而我的图像是使用 V2 推送/创建到 dockerhub 的,可能它不相关并且 V1 已被弃用。当我创建秘密服务时,我需要使用 V2 服务器https://index.docker.io/v2/,例如:
kubectl create secret docker-registry docker-keys \
--docker-username=yyyyyy \
--docker-password=xxxxx \
--docker-email=my@mail.com \
--docker-server=https://index.docker.io/v2/
Run Code Online (Sandbox Code Playgroud)
一个简单的事情,花了几天时间才发现,因为许多文章都有 V1,或者根本没有显示它或使用私有 docker 注册表。文档在这里。https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/
更新:
我没有关注 API 版本的另一件事是docker config文件,该文件将 V1 作为 API,从这里我使用端点来创建秘密服务,而它仅适用于 V2。
cat ~/.docker/config.json
{
"auths": {
"https://index.docker.io/v1/": {}
},
"credsStore": "osxkeychain"
}%
Run Code Online (Sandbox Code Playgroud)
更新 2:
但是,当我使用docker pull命令在本地拉取图像时,使用 v1 url 成功拉取了图像。假设是,api V1 在 docker 中工作,但在 kubernetes 中不起作用。
| 归档时间: |
|
| 查看次数: |
7130 次 |
| 最近记录: |