k8s-harbor拉取映象許可權問題-imagePullSecrets
阿新 • • 發佈:2021-09-08
k8s的imagePullSecrets如何生成及使用
一、概述
公司的docker倉庫(harbor),是私有的,需要使用者認證之後,才能拉取映象。
二、生成secret
登入到k8s master節點,先登入docker
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證書支援的
但是我們可以通過一個簡單的辦法解決
修改/etc/docker/daemon.json檔案
vim /etc/docker/daemon.json
內容如下:
{"insecure-registries": ["192.168.10.122"]}
重新載入docker配置
systemctl daemon-reload
systemctl restart docker
再次登入
root@k8s-master:~# docker login 192.168.10.122 -u admin -p Harbor12345WARNING! 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
提示登入成功。
登入過程建立或更新一個包含授權令牌的config.json檔案。
檢視config.json檔案:
cat ~/.docker/config.json
輸出包含類似以下內容的部分:
{ "auths": { "192.168.10.122": { "auth": "YWRtaW46SGFyYm9yMTIzNDU=" } } }
注意:如果您使用Docker憑據儲存,您將看不到該auth條目,而是看到一個以儲存名稱為值的credsstore條目。
基於現有Docker憑據建立secret
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=" } } }
在具體的Pod中引用就行:
apiVersion: apps/v1 kind: Deployment metadata: name: iot-nignx namespace: iot spec: selector: matchLabels: app: iot-nignx replicas: 1 template: metadata: labels: app: iot-nignx spec: containers: - name: iot-nignx imagePullPolicy: Always image: 192.168.2.11:30013/iot/nginx_iot:202109071808 ports: - containerPort: 80 name: iot-nignx - containerPort: 4949 name: iot-nginx-scada imagePullSecrets: - name: harborsecret