1. 程式人生 > 其它 >k8s-harbor拉取映象許可權問題-imagePullSecrets

k8s-harbor拉取映象許可權問題-imagePullSecrets

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 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

提示登入成功。

登入過程建立或更新一個包含授權令牌的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