joh*_*487 3 gitlab kubernetes docker-desktop
我在 gitlab 上托管了一个私有 docker 注册表,我想使用此存储库为我的本地 kubernetes 集群提取映像:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 68m
Run Code Online (Sandbox Code Playgroud)
K8s 已启动v1.22.5,是一个单节点集群,与 Docker Desktop 一起“开箱即用”。我已经构建了一个映像并将其部署到 gitlab 容器注册表registry.gitlab.com。我已经做了什么:
docker login -u <username> -p <password> registry.gitlab.com~/.docker/config.json为以下内容:
{
"auths": {
"registry.gitlab.com": {}
},
"credsStore": "osxkeychain"
}
Run Code Online (Sandbox Code Playgroud)
apiVersion: v1
kind: Secret
metadata:
name: registry-key
data:
.dockerconfigjson: <base-64-encoded-.config.json-file>
type: kubernetes.io/dockerconfigjson
Run Code Online (Sandbox Code Playgroud)
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment
labels:
app: test-app
spec:
replicas: 1
selector:
matchLabels:
app: test-app
template:
metadata:
labels:
app: test-app
spec:
imagePullSecrets:
- name: registry-key
containers:
- name: test-app
image: registry.gitlab.com/<image-name>:latest
imagePullPolicy: Always
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
部署已成功创建,但在检查 pod ( kubectl describe pod) 时,我发现以下事件:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 21s default-scheduler Successfully assigned default/test-deployment-87b5747b5-xdsl9 to docker-desktop
Normal BackOff 19s kubelet Back-off pulling image "registry.gitlab.com/<image-name>:latest"
Warning Failed 19s kubelet Error: ImagePullBackOff
Normal Pulling 7s (x2 over 20s) kubelet Pulling image "registry.gitlab.com/<image-name>:latest"
Warning Failed 7s (x2 over 19s) kubelet Failed to pull image "registry.gitlab.com/<image-name>:latest": rpc error: code = Unknown desc = Error response from daemon: Head "https://registry.gitlab.com/v2/<image-name>/manifests/latest": denied: access forbidden
Warning Failed 7s (x2 over 19s) kubelet Error: ErrImagePull
Run Code Online (Sandbox Code Playgroud)
请提供可能导致这些错误的任何信息。
config.json我设法通过编辑以下命令生成的默认值解决了该问题$ docker login:
{
"auths": {
"registry.gitlab.com": {}
},
"credsStore": "osxkeychain"
}
Run Code Online (Sandbox Code Playgroud)
变成
{
"auths": {
"registry.gitlab.com": {
"auth":"<access-token-in-plain-text>"
}
}
}
Run Code Online (Sandbox Code Playgroud)
感谢巴拉在评论中提出这一建议。我意识到以纯文本形式将访问令牌存储在文件中可能不安全,但如果需要,可以更改为使用路径。
我还根据 OzzieFZI 的建议创建了这个秘密:
$ kubectl create secret docker-registry registry-key \
--docker-server=registry.gitlab.com \
--docker-username=<username> \
--docker-password="$(cat /path/to/token.txt)"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10901 次 |
| 最近记录: |