如何配置 microk8s kubernetes 以使用 https://hub.docker.com/ 中的私有容器?
How to configure microk8s kubernetes to use private container's in https://hub.docker.com/?
microk8s document "Working with a private registry" 让我不知道该怎么做。 Secure registry 部分说 Kubernetes 是一种方式(没有说明 Kubernetes 的方式是否适用于 microk8), microk8s 在其实现中使用 containerd。
我的 YAML 文件包含对 dockerhub 上私有容器的引用。
apiVersion: apps/v1
kind: Deployment
metadata:
name: blaw
spec:
replicas: 1
selector:
matchLabels:
app: blaw
strategy:
type: Recreate
template:
metadata:
labels:
app: blaw
spec:
containers:
- image: johngrabner/py_blaw_service:v0.3.10
name: py-transcribe-service
当我 microk8s kubectl apply 这个文件并执行 microk8s kubectl describe 时,我得到:
Warning Failed 16m (x4 over 18m) kubelet Failed to pull image "johngrabner/py_blaw_service:v0.3.10": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/johngrabner/py_blaw_service:v0.3.10": failed to resolve reference "docker.io/johngrabner/py_blaw_service:v0.3.10": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
我已验证我可以从控制台执行 docker 拉命令下载此 repo。
Pods 使用 public 容器在 microk8s 中工作正常。
文件 /var/snap/microk8s/current/args/containerd-template.toml 已经包含了使 dockerhub 工作的东西,因为 public 容器可以工作。在这个文件中,我发现
# 'plugins."io.containerd.grpc.v1.cri".registry' contains config related to the registry
[plugins."io.containerd.grpc.v1.cri".registry]
# 'plugins."io.containerd.grpc.v1.cri".registry.mirrors' are namespace to mirror mapping for all namespaces.
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io", ]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:32000"]
endpoint = ["http://localhost:32000"]
以上未出现认证相关问题
在互联网上,我找到了创建秘密来存储凭据的说明,但这也不起作用。
microk8s kubectl create secret generic regcred --from-file=.dockerconfigjson=/home/john/.docker/config.json --type=kubernetes.io/dockerconfigjson
创建秘密后,您必须设置 deployment/pod 使用该秘密才能下载图像。这可以通过 imagePullSecrets
实现,如您提到的 microk8s 文档中所述。
由于您已经创建了您的秘密,因此您只需在部署中引用它即可:
...
spec:
containers:
- image: johngrabner/py_blaw_service:v0.3.10
name: py-transcribe-service
imagePullSecrets:
- name: regcred
...
如需更多阅读,请查看如何 Pull an Image from a Private Registry.
microk8s document "Working with a private registry" 让我不知道该怎么做。 Secure registry 部分说 Kubernetes 是一种方式(没有说明 Kubernetes 的方式是否适用于 microk8), microk8s 在其实现中使用 containerd。
我的 YAML 文件包含对 dockerhub 上私有容器的引用。
apiVersion: apps/v1
kind: Deployment
metadata:
name: blaw
spec:
replicas: 1
selector:
matchLabels:
app: blaw
strategy:
type: Recreate
template:
metadata:
labels:
app: blaw
spec:
containers:
- image: johngrabner/py_blaw_service:v0.3.10
name: py-transcribe-service
当我 microk8s kubectl apply 这个文件并执行 microk8s kubectl describe 时,我得到:
Warning Failed 16m (x4 over 18m) kubelet Failed to pull image "johngrabner/py_blaw_service:v0.3.10": rpc error: code = Unknown desc = failed to pull and unpack image "docker.io/johngrabner/py_blaw_service:v0.3.10": failed to resolve reference "docker.io/johngrabner/py_blaw_service:v0.3.10": pull access denied, repository does not exist or may require authorization: server message: insufficient_scope: authorization failed
我已验证我可以从控制台执行 docker 拉命令下载此 repo。
Pods 使用 public 容器在 microk8s 中工作正常。
文件 /var/snap/microk8s/current/args/containerd-template.toml 已经包含了使 dockerhub 工作的东西,因为 public 容器可以工作。在这个文件中,我发现
# 'plugins."io.containerd.grpc.v1.cri".registry' contains config related to the registry
[plugins."io.containerd.grpc.v1.cri".registry]
# 'plugins."io.containerd.grpc.v1.cri".registry.mirrors' are namespace to mirror mapping for all namespaces.
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io", ]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."localhost:32000"]
endpoint = ["http://localhost:32000"]
以上未出现认证相关问题
在互联网上,我找到了创建秘密来存储凭据的说明,但这也不起作用。
microk8s kubectl create secret generic regcred --from-file=.dockerconfigjson=/home/john/.docker/config.json --type=kubernetes.io/dockerconfigjson
创建秘密后,您必须设置 deployment/pod 使用该秘密才能下载图像。这可以通过 imagePullSecrets
实现,如您提到的 microk8s 文档中所述。
由于您已经创建了您的秘密,因此您只需在部署中引用它即可:
...
spec:
containers:
- image: johngrabner/py_blaw_service:v0.3.10
name: py-transcribe-service
imagePullSecrets:
- name: regcred
...
如需更多阅读,请查看如何 Pull an Image from a Private Registry.