在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私有认证就先写这么多吧,后期如果有更新在继续补充,如果有不同的方式也可以在这里补充,没有了,看些其他的吧。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏