分享

kubernetes获取私有registry的images

 馒头的人生 2018-07-31

通常在实际的项目中用kubernetes做开发的时候,会用到私有的registry(镜像仓库),比如:在创建应用的时候,镜像用的就是私有仓库的镜像。但是通常会有一个问题,如果你的私有的镜像仓库做了认证和授权,kubernetes在创建应用的时候去获取私有仓库镜像就会失败,会报没有认证的错误。有两种方式去解决。

  1. 在k8s中的每个集群中的node节点中去docker login 登录。显然这种方式不合理。
  2. 通过k8s的secret来做。

下面我主要讲解的就是第二种方式。

首先在其中一个node上登录私有仓库

docker login hub.yfcloud.io

登录成功后会在/root/.docker目录下生产config.json文件,然后执行如下命令:

cat /root/.docker/config.json | base64

该命令会将你的认证信息通过base64编码,生成一个编码之后的字符串,在linux中terminal中看到是两行,但是其实质是一行,所以之后要用到的这个字符串需要合并为一行。

在kubernetes中的master节点中创建secret 元素:

apiVersion: v1
kind: Secret
metadata:
  name: hub.yfcloud.io.key
type: kubernetes.io/dockerconfigjson
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJkb2NrZXIuY29vY2xhLm9yZyI6IHsKCQkJImF1dGgiOiAiWkdWMk9tUnZZMnRsY2c9PSIsCgkJCSJlbWFpbCI6ICIiCgkJfQoJfQp9

其中name你可以随便取,推荐用私有仓库地址.key的方式命名。

之后在创建其他元素的时候指定:imagesPullSecrets即可。例如:

pod:

apiVersion: v1
kind: Pod
metadata:
  name: go-web
spec:
  containers:
  - name: go-web
    image: hub.yfcloud.io/go-web
  imagePullSecrets:
  - name: hub.yfcloud.io.key

replicationController:

apiVersion: v1
kind: ReplicationController
metadata:
  name: go-web
  labels:
    name: go-web
spec:
  replicas: 1 
  selector: 
    name: go-web
  template: 
    metadata: 
      labels: 
        name: go-web
    spec: 
      containers:
        - name: go-web
          image: hub.yfcloud.io/go-web 
          ports: 
            - containerPort: 9080
          resources: 
            limits:
              cpu: 100m
              memory: 100Mi
      imagePullSecrets:
        - name: hub.yfcloud.io.key 
其中要修改k8s部署各个节点(未验证, 应该是只修改 master 上即可)
/etc/docker/daemon.json, "insecure-registries": ["hub.yfcloud.io"]
重启 docker, systemctl restart docker

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多