簡體   English   中英

如何從 Kube.netes pod 中運行的私有 docker 注冊表中拉取鏡像?

[英]How to pull an image from private docker registry running in Kubernetes pod?

我們在 kube.netes 中設置了一個私有的 docker 注冊表(目前類型為 LoadBalancer)。 我們能夠成功推送圖像,但是當我們嘗試使用 helm chart 或簡單的 pod yaml 文件從私有注冊表中拉取圖像時,我們收到錯誤:ImagePullBackOff with "dial tcp: lookup docker-registry-external on {CoreDNS IP }:53: 沒有這樣的主機”。 請查看隨附的以下資源。 您能否指導我們,我們在這里可能做錯了什么?

以下是 Docker 注冊表 yaml 文件,

apiVersion: v1
kind: Pod
metadata:
  name: docker-registry
  labels:
    app: docker-registry
spec:
  containers:
    - name: docker-registry
      image: registry:2
      ports:
        - containerPort: 5000
          hostPort: 5000
      volumeMounts:
      - name: repo-vol
        mountPath: "/var/lib/registry"
      - name: certs-vol
        mountPath: "/certs"
        readOnly: true
      - name: auth-vol
        mountPath: "/auth"
        readOnly: true
      - name: etc-docker
        mountPath: /etc/docker/certs.d
      env:
        - name: REGISTRY_HTTP_ADDR
          value: 0.0.0.0:5000
        - name: REGISTRY_AUTH
          value: "htpasswd"
        - name: REGISTRY_AUTH_HTPASSWD_REALM
          value: "Registry Realm"
        - name: REGISTRY_AUTH_HTPASSWD_PATH
          value: "/auth/.htpasswd"
        - name: REGISTRY_HTTP_TLS_CERTIFICATE
          value: "/certs/tls.crt"
        - name: REGISTRY_HTTP_TLS_KEY
          value: "/certs/tls.key"
  volumes:
  - name: repo-vol
    persistentVolumeClaim:
      claimName: docker-repo-pvc
  - name: certs-vol
    secret:
      secretName: certs-secret
  - name: auth-vol
    secret:
      secretName: auth-secret
  - name: etc-docker
    hostPath:
      path: /etc/docker/certs.d

以下是我們用於重現問題的服務 yaml 文件,

apiVersion: v1
kind: Service
metadata:
  name: docker-registry-external
  labels:
    app: docker-registry
spec:
  type: LoadBalancer
  ports:
    - targetPort: 5000
      port: 5000
  selector:
    app: docker-registry

以下是我們用於重現問題的示例 pod yaml 文件,

apiVersion: v1
kind: Pod
metadata:
  name: test-docker
  labels:
    name: test
spec:
  containers:
  - name: test
    image: docker-registry-external:5000/testproject:v1
    imagePullPolicy: Always
    env:
      - name: REGISTRY_HTTP_ADDR
        value: 0.0.0.0:5000
  imagePullSecrets:
   - name: docker-reg-cred

PS:身份驗證和自簽名 TLS 證書和機密已正確安裝。 我們能夠從 Ubuntu WSL 等外部客戶端推送和拉取圖像,當我們嘗試從 Kube.netes 集群(集群不是私有的)中的 pod/helm chart 拉取圖像時,拉取操作失敗。

需要為集群中的每個節點設置 DNS 分辨率,最好是通過更新公共 DNS 服務器,但您也可以在集群中的每個節點上使用 HostAliases 向 Pod /etc/hosts 添加條目 Kube.netes 和 docker 從節點而不是容器中拉取圖像,因此他們不會看到應用於 coredns 之類的設置(它會產生循環依賴,你如何解析 coredns 圖像注冊表的名稱) . 有關詳細信息,請參閱此SO

也可以參考這個官方定制DNS服務獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM