![](/img/trans.png)
[英]How to pull docker image from a insecure private registry with latest Kubernetes
[英]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.