我一直在尝试将docker映像部署到Kubernetes集群上而没有运气,我的deployment.yaml看起来像:
apiVersion: v1
kind: Pod
metadata:
name: application-deployment
labels:
app: application
spec:
serviceAccountName: gitlab
automountServiceAccountToken: false
containers:
- name: application
image: example.org:port1/foo/bar:latest
ports:
- containerPort: port2
volumes:
- name: foo
secret:
secretName: regcred
但是无法获取图像。
无法提取图像“ example.org:port1/foo/bar:latest”:rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://example.org:port1/v2/foo/bar/manifests/latest:拒绝:禁止访问
deployment.yaml
中使用的秘密是这样创建的:
kubectl create secret docker-registry regcred --docker-server=${CI_REGISTRY} --docker-username=${CI_REGISTRY_USER} --docker-password=${CI_REGISTRY_PASSWORD} --docker-email=${GITLAB_USER_EMAIL}
尝试#1:添加imagePullSecrets
...
imagePullSecrets:
- name: regcred
导致:
无法提取图像“ example.org:port1/foo/bar:latest”:rpc错误:代码=未知desc =来自守护程序的错误响应:获取https://example.org:port1/v2/foo/bar/manifests/latest:未经授权:HTTP基本:访问被拒绝>
解决方案:
我已经在 Settings> Repository> Deploy Tokens>(已创建具有read_registry范围的一个)下创建了部署令牌
并将给定值添加到环境变量中,现在合适的行如下所示:
kubectl create secret docker-registry regcred --docker-server=${CI_REGISTRY} --docker-username=${CI_DEPLOY_USER} --docker-password=${CI_DEPLOY_PASSWORD}
我从教程和Gitlab文档中获得了有问题的内容,他们描述了部署令牌,但在示例中进一步使用了有问题的内容。
答案 0 :(得分:1)
您需要在部署中添加imagePullSecret,因此您的Pod将为:
apiVersion: v1
kind: Pod
metadata:
name: application-deployment
labels:
app: application
spec:
serviceAccountName: gitlab
automountServiceAccountToken: false
containers:
- name: application
image: example.org:port1/foo/bar:latest
ports:
- containerPort: port2
imagePullSecrets:
- name: regcred
确保密钥和pod在同一名称空间上运行。
我注意到您正在尝试在gitlab-ci上的管道上运行命令,在运行create secret命令后检查您的密码是否正确(使用变量替换)。
您可以验证是否可以登录注册表并在其他Linux上手动提取映像,以确保凭据正确。
答案 1 :(得分:0)
我转载了您的问题,问题出在创建存储库机密时使用的密码。为gitlab存储库创建密钥时,必须使用在gitlab中创建的个人令牌代替密码。
您可以转到Settings -> Access Tokens
来创建令牌。然后,您必须为令牌选择名称,到期日期和令牌的范围。
然后通过运行
像以前一样创建一个秘密kubectl create secret docker-registry regcred --docker-server=$docker_server --docker-username=$docker_username --docker-password=$personal_token
在创建广告连播时,您必须包含
imagePullSecrets:
- name: regcred
答案 2 :(得分:0)
起初创建机密对我不起作用,但我必须为机密指定命名空间并且它起作用了。
kubectl delete secret -n ${NAMESPACE} regcred --ignore-not-found
kubectl create secret -n ${NAMESPACE} docker-registry regcred --docker-server=${CI_REGISTRY} --docker-username=${CI_DEPLOY_USERNAME} --docker-password=${CI_DEPLOY_PASSWORD} --docker-email=${GITLAB_USER_EMAIL}