k8s使用secret從私有倉庫拉取映象

y_hai_yang發表於2020-12-02

        使用docker從私有倉庫拉取經銷,可以使用docker login [私有倉庫地址]  然後輸入使用者名稱和密碼登入後就可以拉取映象了,但如果使用k8s時,node 節點過多,難道需要跑到每個node節點去執行一次登入麼?當然不是.這裡就牽扯到k8s中的一個secret的東西.

Secret 有三種型別: 

  • Service Account :用來訪問 Kubernetes API,由 Kubernetes 自動建立,並且會自動掛載到 Pod 的/run/secrets/kubernetes.io/serviceaccount  目錄中
  • Opaque :base64編碼格式的Secret,用來儲存密碼、金鑰等
  • kubernetes.io/dockerconfigjson :用來儲存私有 docker registry 的認證資訊

 

這裡主要介紹第三種kubernetes.io/dockerconfigjson 如何使用.當使用k8s命令啟動pod時,出現了

      rpc error: code = Unknown desc = Error response from daemon: pull access denied for 222.212.85.199:12375/gzlt/gzlt, repository does not exist or may require 'docker login'

 rpc error: code = Unknown desc = Error response from daemon: pull access denied for 222.212.85.199:12375/gzlt/gzlt, repository does not exist or may require 'docker login'

這樣的錯誤提示,一般就是沒有通過身份驗證.,這時,就需要設定驗證資訊,來告訴docker,然後通過驗證後拉取映象.

 

首先通過kubectl 命令建立secret 

 

kubectl create secret docker-registry [secret名稱] --docker-server=[私有倉庫ip:埠] --docker-username=[使用者名稱] --docker-password=[密碼]  --namespace=[k8s名稱空間]

這裡選擇docker-registry型別建立secret  

需要注意的是: --namespace 引數和後面使用此secret 的pod 有密切的關係.如果他們不在同一個名稱空間,也是不會驗證成功的.

然後就是在建立pod的yaml檔案中新增secret


apiVersion: v1
kind : ReplicationController
metadata:
  name : 
  namespace: 
spec:
  replicas: 2
  selector :
    app : 
  template:
    metadata:
      labels :
        app : 
    spec:
      containers:
        - name : 
          image : 
          imagePullPolicy: IfNotPresent
          ports :
            - name: webservice
              containerPort: 8088
            - name: 
              containerPort: 9081
      imagePullSecrets:  
      - name: [secret名稱]   --這裡就配置你剛才建立的secret 的名稱即可

然後再次建立pod  就可以了.

 

 

ps: 網上還有很多建立secret 的方法,這裡就不說了,畢竟也沒有使用過.感興趣的可以自己再去多瞭解一下.

相關文章