我的笔记本电脑上安装了ubuntu。
我启动了私有docker注册表(ssl enabled + htpasswd secure)并将其添加到覆盖网络上(因此可以从其他主机/ vms访问)
这是代码(docker-compose.yaml):
version: "3"
services:
registry:
restart: always
image: registry:2
ports:
- 5000:5000
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
- /certs:/certs
- ~/caas_rd/workspace/ci_cd_pipeline/registry_setup:/auth
networks:
- overlaynetwork
networks:
overlaynetwork:
所以我的注册表在以下链接中运行(使用dns,我可以在浏览器中验证它):https://home-thinkpad-t420s:5000/v2/_catalog
现在我在笔记本电脑上安装了“Minikube”。 &安培;&安培; ssh it by“minikube ssh”。
我在minikube vm& amp;创建了一个文件夹“/etc/docker/certs.d”。根据说明添加证书:
https://docs.docker.com/engine/security/certificates/#understanding-the-configuration
我还修改了/ etc / hosts&&在/etc/ssl/certs/ca-certificates.crt附加了ca.cert。
并在minikube vm上重新启动docker service:sudo systemctl restart docker.service
在此之后,我可以通过“docker login& docker pull”& amp;也可以通过“curl with(cacert + username / password)” 上面工作得很好,意味着我可以成功访问/拉出minikube vm中的私人注册表图像。
然后我尝试创建一个秘密(在我的笔记本电脑上使用kubectl create -f)定义如下:
apiVersion: "v1"
kind: "Secret"
metadata:
name: "ssl-proxy-secret"
namespace: "default"
data:
proxycert: "LS0..."
proxykey: "LS0t..."
htpasswd: "YWRt..."
并创建了一个pod(在我的笔记本电脑上使用kubectl create -f),如下所示:
apiVersion: v1
kind: Pod
metadata:
name: private-jenkins
spec:
containers:
- name: private-jenkins-container
image: home-thinkpad-t420s:5000/my-jenkins
volumeMounts:
- name: secrets
mountPath: /etc/secrets
volumes:
- name: secrets
secret:
secretName: ssl-proxy-secret
但是当我尝试运行此pod时,它会抛出错误:
无法提取图片“home-thinkpad-t420s:5000 / my-jenkins”:rpc错误:代码= 2 desc =错误:图片my-jenkins未找到 同步pod时出错,跳过:对于带有ErrImagePull的“private-jenkins-container”失败为“StartContainer”:“rpc error:code = 2 desc = Error:image my-jenkins not found”
如果我能够通过curl& amp;成功地在minikube vm中拉出图像docker login / pull ......那么为什么pod创建失败并出现上述错误?
答案 0 :(得分:0)
您是否可以从secret.yml文件中的凭据中删除这些双引号并尝试再次旋转pod?
答案 1 :(得分:0)
您需要创建一个单独的kubernetes registry secret
。可以使用此命令:
kubectl create secret docker-registry <secret-name> \
--docker-email=<your-email> --docker-username=<registry-user> \
--docker-password=<registry-password> --docker-server=<registry-server-domain>
之后,您可以更新pod configuration
,如下所示:
apiVersion: v1
kind: Pod
metadata:
name: private-jenkins
spec:
containers:
- name: private-jenkins-container
image: home-thinkpad-t420s:5000/my-jenkins
imagePullSecrets:
- name: <secret-name>
参考:link
希望它有所帮助!