kubernetes中拉取私有镜像imagePullSecrets

avatar 2022年7月30日18:07:10 评论 2,144 次浏览

在kubernetes中,每次打包生成镜像,并把镜像传到仓库中。pod会根据yaml文件中定义的镜像路径以及版本拉取镜像,如果你的镜像是公有的,拉取镜像不需要输入账号和密码,如果是私有的就需要用户和密码验证了。不过在服务中有一些变量有有些隐秘的信息,所以一般都会使用私有,通过账号密码拉取镜像,这里就介绍一下如何拉取私有镜像。

使用yaml文件

如果你通过yaml文件创建secret的方式拉取私有镜像就需要利用base64进行转换一下用户名和密码,然后把转换后的用户名和密码加到yaml文件中即可,看下面的例子:

[root@www.wulaoer.org ~/.docker]# cat ~/.docker/config.json
{
	"auths": {
		"ops-harbor.wulaoer.org": {
			"auth": "YWRtaW46SGFyYm9yMTIzNDU="
		}
	},
	"HttpHeaders": {
		"User-Agent": "Docker-Client/18.06.3-ce (linux)"
	}
}
[root@www.wulaoer.org ~/.docker]#  echo "YWRtaW46SGFyYm9yMTIzNDU=" | base64 -d
admin:Harbor12345  #镜像仓库的用户名和密码的解密
[root@www.wulaoer.org ~/.docker]# cat ~/.docker/config.json | base64 -w 0
ewoJImF1dGhzIjogewoJCSJvcHMtaGFyYm9yLnd1bGFvZXIub3JnIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE4LjA2LjMtY2UgKGxpbnV4KSIKCX0KfQo=[root@www.wulaoer.org ~/.docker]#
[root@www.wulaoer.org ~/.docker]# echo "ewoJImF1dGhzIjogewoJCSJvcHMtaGFyYm9yLnd1bGFvZXIub3JnIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE4LjA2LjMtY2UgKGxpbnV4KSIKCX0KfQo=" | base64 -d
{
	"auths": {
		"ops-harbor.wulaoer.org": {
			"auth": "YWRtaW46SGFyYm9yMTIzNDU="
		}
	},
	"HttpHeaders": {
		"User-Agent": "Docker-Client/18.06.3-ce (linux)"
	}
}
[root@www.wulaoer.org ~/.docker]# cat wulaoer-prod-image.yaml
kind: Secret
apiVersion: v1
metadata:
  name: wulaoer-prod-image  #secrets名称,在pod拉取镜像时需要这个secrets进行验证
  namespace: beijing-prod  #命名空间
data:
  .dockerconfigjson: >-
    ewoJImF1dGhzIjogewoJCSJvcHMtaGFyYm9yLnd1bGFvZXIub3JnIjogewoJCQkiYXV0aCI6ICJZV1J0YVc0NlNHRnlZbTl5TVRJek5EVT0iCgkJfQoJfSwKCSJIdHRwSGVhZGVycyI6IHsKCQkiVXNlci1BZ2VudCI6ICJEb2NrZXItQ2xpZW50LzE4LjA2LjMtY2UgKGxpbnV4KSIKCX0KfQo= #加密后的config.json文件
type: kubernetes.io/dockerconfigjson

利用base64进行加密解密,随便找个节点创建一个docker的config.json文件,auth是用户名和密码的base64的加密,格式是: 用户名:密码,这里注意如果是阿里云的镜像不需要加后缀onaliyun.com。然后在加密config.json文件,把config.json文件加密后的字符串加入到secrets的dockerconfigjson后面即可,secrets名称和命名空间可以根据自己的需求修改。如果使用secrets作为认证,必须在imagePullSecrets后面加secrets名称,后面会举例。

使用命令创建secrets

使用命令创建和使用yaml文件创建性质都是一样的,根据自己的喜好,这里注意一下,下面命令中有五个关键词,分别是secrets名称wulaoer-prod-image,仓库地址:ops-harbor.wulaoer.org,用户名:admin,密码:Harbor12345,命名空间:Beijing-prod。

[root@www.wulaoer.org ~/.docker]# kubectl create secret docker-registry wulaoer-prod-image --docker-server=ops-harbor.wulaoer.org --docker-username=admin --docker-password=Harbor12345 -n beijing-prod

如果创建到默认空间可以不加后面的-n beijing-prod,以上五个关键词可以根据自己的需求进行修改,其他不要修改。secrets加好了,那么如果pod要拉取私有镜像就需要在pod的imagePullSecrets中加上wulaoer-prod-image,看下面的pod例子:

spec:
  replicas: 2
  selector:
    matchLabels:
      app: wulaoer-web
      release: prod
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: wulaoer-web
        release: prod
      annotations:
        kubesphere.io/restartedAt: '2022-07-21T02:49:17.489Z'
    spec:
      containers:
        - name: wulaoer-web
          image: >-
            ops-harbor.wulaoer.org/reatil-harb/wulaoer-web:46
      ...................................
      nodeSelector:
        node: application
      securityContext: {}
      imagePullSecrets:
        - name: wulaoer-prod-image  #这里就是拉取私有镜像的认证secrets
................................................

pod创建后会自动拉取私有镜像了,而且不管pod运行在那个节点上,都会自动通过secrets认证拉取镜像。不需要认为的登录node节点,imagePullSecrets私有认证就先写这么多吧,后期如果有更新在继续补充,如果有不同的方式也可以在这里补充,没有了,看些其他的吧。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: