K8s 从 docker 私有存储库中提取问题
K8s issue pulling from docker private repository
我有一个要部署到 Kubernetes 的 Jhipster 应用程序。我使用 jhipster kubernetes
命令创建了所有 k8s 对象,并提供了一个 Docker Hub 存储库来推送它们。 Docker Hub 存储库是私有的。
部署对象如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demodevices
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: demodevices
version: 'v1'
template:
metadata:
labels:
app: demodevices
version: 'v1'
spec:
initContainers:
- name: init-ds
image: busybox:latest
command:
- '/bin/sh'
- '-c'
- |
while true
do
rt=$(nc -z -w 1 demodevices-postgresql 5432)
if [ $? -eq 0 ]; then
echo "DB is UP"
break
fi
echo "DB is not yet reachable;sleep for 10s before retry"
sleep 10
done
containers:
- name: demodevices-app
image: myRepo/demo:demodevices-1.0.0
env: ...
resources: ...
ports: ...
readinessProbe: ...
livenessProbe: ...
imagePullSecrets:
- name: regcred
因为我使用了私有 Docker Hub 存储库,所以我添加了 imagePullSecret
。秘密已创建并部署到 k8s。
应用文件时,在 pods 中我看到以下消息:
Warning Failed <invalid> (x4 over <invalid>) kubelet, k8node1 Failed to pull image "busybox:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/busybox/manifests/latest: unauthorized: incorrect username or password
Warning Failed <invalid> (x4 over <invalid>) kubelet, k8node1 Error: ErrImagePull
Normal BackOff <invalid> (x6 over <invalid>) kubelet, k8node1 Back-off pulling image "busybox:latest"
Warning Failed <invalid> (x6 over <invalid>) kubelet, k8node1 Error: ImagePullBackOff
据我了解,它会尝试使用私有存储库的凭据来拉取 busybox:latest 图像。预期的结果是无误地提取 busybox:latest 并从我的私有存储库中提取我的自定义图像。如何解决上述问题?
您是否已将私人仓库添加到 Docker In-Secure 注册表中。您是否也尝试过使用 docker 登录名登录到您的私人仓库?当您这样做时,它会创建一个登录凭据条目。
尝试使用 docker 登录和 docker pull/run 进行手动拉取。如果这可行,它也必须适用于 K8s。
此错误与您使用 imagePullSecret
无关。
Review 您用来创建秘密的过程,这里是一个示例:
kubectl create secret docker-registry anyname \
--docker-server=docker.io \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email>
我已经重现了你的案例,当我用错误的信息创建秘密时,我也有同样的错误。
我有一个要部署到 Kubernetes 的 Jhipster 应用程序。我使用 jhipster kubernetes
命令创建了所有 k8s 对象,并提供了一个 Docker Hub 存储库来推送它们。 Docker Hub 存储库是私有的。
部署对象如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demodevices
namespace: demo
spec:
replicas: 1
selector:
matchLabels:
app: demodevices
version: 'v1'
template:
metadata:
labels:
app: demodevices
version: 'v1'
spec:
initContainers:
- name: init-ds
image: busybox:latest
command:
- '/bin/sh'
- '-c'
- |
while true
do
rt=$(nc -z -w 1 demodevices-postgresql 5432)
if [ $? -eq 0 ]; then
echo "DB is UP"
break
fi
echo "DB is not yet reachable;sleep for 10s before retry"
sleep 10
done
containers:
- name: demodevices-app
image: myRepo/demo:demodevices-1.0.0
env: ...
resources: ...
ports: ...
readinessProbe: ...
livenessProbe: ...
imagePullSecrets:
- name: regcred
因为我使用了私有 Docker Hub 存储库,所以我添加了 imagePullSecret
。秘密已创建并部署到 k8s。
应用文件时,在 pods 中我看到以下消息:
Warning Failed <invalid> (x4 over <invalid>) kubelet, k8node1 Failed to pull image "busybox:latest": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/library/busybox/manifests/latest: unauthorized: incorrect username or password
Warning Failed <invalid> (x4 over <invalid>) kubelet, k8node1 Error: ErrImagePull
Normal BackOff <invalid> (x6 over <invalid>) kubelet, k8node1 Back-off pulling image "busybox:latest"
Warning Failed <invalid> (x6 over <invalid>) kubelet, k8node1 Error: ImagePullBackOff
据我了解,它会尝试使用私有存储库的凭据来拉取 busybox:latest 图像。预期的结果是无误地提取 busybox:latest 并从我的私有存储库中提取我的自定义图像。如何解决上述问题?
您是否已将私人仓库添加到 Docker In-Secure 注册表中。您是否也尝试过使用 docker 登录名登录到您的私人仓库?当您这样做时,它会创建一个登录凭据条目。
尝试使用 docker 登录和 docker pull/run 进行手动拉取。如果这可行,它也必须适用于 K8s。
此错误与您使用 imagePullSecret
无关。
Review 您用来创建秘密的过程,这里是一个示例:
kubectl create secret docker-registry anyname \
--docker-server=docker.io \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email>
我已经重现了你的案例,当我用错误的信息创建秘密时,我也有同样的错误。