当在k8s中拉取私有镜像仓库的镜像时会碰到没有权限的问题,如果使用的容器运行时是docker时,可以使用以下三种方法解决:

  1. 配置daemon.json文件
    在/etc/docker/daemon.json文件(如果不存在则需要手动创建)中添加以下内容
{
"insecure-registries": ["x.x.x.x/x"]
}

方括号中的地址填写镜像仓库的地址,也可以填域名。配置完重启docker,重新拉取镜像即可。

  1. 创建kubernetes.io/dockerconfigjson类型的secret
    首先使用docker命令登录镜像仓库
docker login xxxx

接着根据提示输入用户名密码,完成之后会打印config.json文件生成的位置。然后通过config.json文件生成secret,如下

kubectl create secret generic image-pull-secret \
  --from-file=.dockerconfigjson=/root/.docker/config.json \
  --type=kubernetes.io/dockerconfigjson

除了上述方法也可以通过指定用户名密码直接创建secret

kubectl create secret docker-registry image-pull-secret \
    --docker-server=xxxxxxx \
    --docker-username='xxxxxx' \
    --docker-password='xxxxxx' 

最后在部署应用的添加imagePullSecrets

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  template:
    spec:
      containers:
        - name: test
          image: test:latest
      imagePullSecrets:
        - name: image-pull-secret
  1. 在serviceaccount中增加imagePullSecrets
    在第二种办法中创建了secret后,也可以将其添加到serviceaccount中
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "image-pull-secret"}]}' 

在部署应用的时候添加对应的serviceaccount,如下

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  template:
    spec:
      containers:
        - name: test
          image: test:latest
      serviceAccount: default

`

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐