kubernetes获取私有registry的images

来源:互联网 发布:淘宝暗语 编辑:程序博客网 时间:2024/05/16 12:09

通常在实际的项目中用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: v1kind: Secretmetadata:  name: hub.yfcloud.io.keytype: kubernetes.io/dockercfgdata:  .dockercfg: ewoJImF1dGhzIjogewoJCSJkb2NrZXIuY29vY2xhLm9yZyI6IHsKCQkJImF1dGgiOiAiWkdWMk9tUnZZMnRsY2c9PSIsCgkJCSJlbWFpbCI6ICIiCgkJfQoJfQp9

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

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

pod:

apiVersion: v1kind: Podmetadata:  name: go-webspec:  containers:  - name: go-web    image: hub.yfcloud.io/go-web  imagePullSecrets:  - name: hub.yfcloud.io.key

replicationController:

apiVersion: v1kind: ReplicationControllermetadata:  name: go-web  labels:    name: go-webspec:  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 
0 0