k8s的imagePullSecrets如何生成及使用

1、概述

公司的docker倉庫(harbor),是私有的,須要用戶認證以後,才能拉取鏡像。html

 

2、生成secret

登陸docker

登陸到k8s master節點,先登陸dockerlinux

root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.10.122/v2/: dial tcp 192.168.10.122:443: connect: connection refused

 

注意:出現這個報錯,是因爲harbor爲了安全性考慮,默認是須要https證書支持的docker

可是咱們能夠經過一個簡單的辦法解決json

修改 /etc/docker/daemon.json 文件vim

vim /etc/docker/daemon.json

內容以下:api

{"insecure-registries": ["192.168.10.122"]}

 

從新加載docker配置安全

/etc/init.d/docker reload

 

再次登陸tcp

root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

提示登陸成功。jsonp

 

登陸過程建立或更新一個包含受權令牌的config.json文件。
查看config.json文件:ui

cat ~/.docker/config.json

 

輸出包含相似如下內容的部分:

{
    "auths": {
        "192.168.10.122": {
            "auth": "YWRtaW46SGFyYm9yMTIzNDU="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.1 (linux)"
    }
}

注意:若是您使用Docker憑據存儲,您將看不到該auth條目,而是看到一個以存儲名稱爲值的credsstore條目。

 

基於現有Docker憑據建立secret

kubernetes集羣使用docker註冊表類型的祕密對容器註冊表進行身份驗證,以獲取私有映像。

若是您已經運行了Docker登陸,則能夠將該憑證複製到Kubernetes中:

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

注意:主要修改紅色部分。

harborsecret 表示key名

/root/.docker/config.json 表示docker認證文件,注意要寫絕對路徑。

 

查看內容

kubectl get secrets harborsecret --output="jsonpath={.data.\.dockerconfigjson}" | base64 -d

輸出:

{
    "auths": {
        "192.168.10.122": {
            "auth": "YWRtaW46SGFyYm9yMTIzNDU="
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.1 (linux)"
    }
}

 

要了解剛剛建立的regcred祕密的內容,請從以yaml格式查看祕密開始:

kubectl get secret harborsecret --output=yaml

輸出:

apiVersion: v1
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSIxOTIuMTY4LjEwLjEyMiI6IHsKCQkJImF1dGgiOiAiWVdSdGFXNDZTR0Z5WW05eU1USXpORFU9IgoJCX0KCX0sCgkiSHR0cEhlYWRlcnMiOiB7CgkJIlVzZXItQWdlbnQiOiAiRG9ja2VyLUNsaWVudC8xOS4wMy4xIChsaW51eCkiCgl9Cn0=
kind: Secret
metadata:
  creationTimestamp: "2019-08-30T06:14:10Z"
  name: harborsecret
  namespace: default
  resourceVersion: "6128"
  selfLink: /api/v1/namespaces/default/secrets/harborsecret
  uid: 76e16e61-a6b9-4a47-a842-e884cf6f468d
type: kubernetes.io/dockerconfigjson

 

3、在demployment yaml文件中的使用示例

... 
spec:
      imagePullSecrets: - name:harborsecret
      containers:
      - name: eureka
        image: 192.168.10.122/library/alpine:latest
...

 

若是須要刪除secret,使用命令

kubectl delete secrets harborsecret

 

本文參考連接:

https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

http://www.javashuo.com/article/p-apvunerx-mk.html

相關文章
相關標籤/搜索