K8S從私有倉庫拉取鏡像


通常來講,我們在通過公共鏡像倉庫拉取docker鏡像的時候,不需要任何的認證操作,但我們在構建了企業的私有鏡像以后,就不得不在拉取鏡像之前通過用戶名密碼來完成認證。

在docker單機環境中,我們可以直接在宿主機上執行docker login https://myhub.fdccloud.com類似這種命令的方式來完成認證。但在通過kubernetes來對docker做相關集群管理時,就不得不在所有的節點機上通過上面那種方式完成認證。這在大規模的應用架構中,是不可取的。

當然,我們有另外一種稍微簡便的方法。事實上,在執行docker login https://xxxxx完成認證的時候,實際是在當前用戶的家目錄的.docker目錄下生成了一個config.json文件。我們查看該文件的內容如下:

    {
        "auths": {
            "https://myhub.fdccloud.com": {
                "auth": "xxxx",
                "email": "yanw02@mysoft.com.cn"
            },
        }
    }

這個文件包含了認證信息。所以另一個可行的辦法,就是直接將該文件通過自動化的方式,推送到所有節點機的相應目錄即可。但在實際的測試中,這種方式推送的節點仍然會偶爾出現認證失敗的情況,具體什么原因目前尚不清楚。

kubernetes提供多種針對私有倉庫認證的方式,在這里,我只說明其中的一種方法,也是我實際使用的方法,通過k8s的secret來實現。

  1. 在k8s master上通過docker login登錄registry,生成config.json文件。然后執行如下命令,將文件轉換成base64編碼:
    cat /root/.docker/config.json|base64 -w 0
  1. 生成registrykey-myhub.yml的配置文件,內容如下:
    apiVersion: v1
    kind: Secret
    metadata:
      name: registrykey-myhub
      namespace: default
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJodHRwczovL215aHViLmZkY2Nsb3VkLmNvbS8iOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2VFhsemIyWjBPVFU1TXpnPSIsCgkJCSJlbWFpbCI6ICJ5YW53MDJAbXlzb2Z0LmNvbS5jbiIKCQl9Cgl9Cn0=
    
    #創建secret:
    kubectl create -f registrykey-myhub.yml
  1. 在創建pod時,指定imagePullSecrets,示例如下:
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: sqltools-ycz
      labels:
        name: sqltools-ycz
    spec:
      replicas: 1
      selector:
        name: sqltools-ycz
      template:
        metadata:
          labels:
            name: sqltools-ycz
        spec:
          containers:
          - name: sqltools-ycz
            image: myhub.fdccloud.com/common/sqltools
            ports:
            - containerPort: 80
            env:
            - name: DB_HOST
              value: "mysql-ycz.default.svc.cluster.local"
            - name: DB_NAME
              value: "config"
            - name: DB_USERNAME
              value: "ycz"
            - name: DB_PASSWORD
              value: "77TqrfPaMbwaZXYu"
            - name: CACHE_HOST
              value: "memcached-ycz.default.svc.cluster.local"
            - name: CACHE_PORT
              value: "11211"
            - name: CACHE_PREFIX
              value: "ycz"
          nodeSelector:
            kubernetes.io/hostname: k8s-master
          imagePullSecrets:
          - name: registrykey-myhub

官方文檔配置說明如下:
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM