2015-12-15 22 views
7

Tôi đang cố gắng để Kubernetes làm việc với hình ảnh đăng ký riêng tư của tôi trên hub.docker.com.Kubernetes PullImageError sử dụng Docker Hub với hình ảnh riêng

Tôi đang sử dụng phiên bản kubectl: Client Version: version.Info{Major:"1", Minor:"1+", GitVersion:"v1.1.0-alpha.0.1588+e44c8e6661c931", GitCommit:"e44c8e6661c931f7fd434911b0d3bca140e1df3a", GitTreeState:"clean"} Server Version: version.Info{Major:"1", Minor:"1", GitVersion:"v1.1.3", GitCommit:"6a81b50c7e97bbe0ade075de55ab4fa34f049dc2", GitTreeState:"clean"}

và Vagrant 1.7.4 trên Mac OS X Yosemite 10.10.5

Tôi làm theo các hướng dẫn đưa ra ở đây: https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/user-guide/images.md#pre-pulling-images

Tóm lại, nó nói rằng bạn nên đăng nhập vào registry sau đó base64 mã hóa nội dung của kết quả .docker/config.json và sử dụng nó trong tài liệu yaml như sau:

apiVersion: v1 
kind: Secret 
metadata: 
    name: myregistrykey 
data: 
    .dockercfg: eyAiYXV0aHMiOiB7ICJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOiB7ICJhdXRoIjogImFXNTBjbWx1YzJsak9tSTJVVTR5Z...h1YkBpbnRyaW5zaWMud29ybGQiIH0gfSB9Cg== 
type: kubernetes.io/dockercfg 

Sau đó, cấp dữ liệu đó cho kubectl. Sau đó tôi đã sử dụng khóa kết quả (ở đây có tên là myregistrykey) trong định nghĩa nhóm của tôi:

apiVersion: v1 
kind: Pod 
metadata: 
    name: authorities-backend 
spec: 
    containers: 
    - name: authorities-backend 
     image: intrinsic/authorities-backend:latest 
    imagePullSecrets: 
    - name: myregistrykey 

kubectl create d.

Tuy nhiên, kubectl tiếp tục thất bại trong việc lấy lại hình ảnh:

[[email protected] intrinsic]# kubectl get pods 
NAME     READY  STATUS   RESTARTS AGE 
authorities-backend 0/1  PullImageError 0   7m 

Docker kéo trên tổng thể Kubernetes làm việc tuy nhiên.

Tôi đang thiếu gì?

CẬP NHẬT

Trong định nghĩa pod ở trên, tôi đã bỏ qua để xác định các máy chủ đăng ký, ví dụ: docker.io. Sửa chữa, nó sẽ trở thành: image: docker.io/intrinsic/authorities-backend:latest Tuy nhiên, sự cố vẫn tiếp diễn. Làm kubectl get events -w được tôi: 6s 0s 2 authorities-backend Pod spec.containers{authorities-backend} Failed {kubelet 10.245.1.3} Failed to pull image "docker.io/intrinsic/authorities-backend": image pull failed for docker.io/intrinsic/authorities-backend, this may be because there are no credentials on this request. details: (Error: image intrinsic/authorities-backend:latest not found) tôi biết bí mật đã được đăng ký đúng cách, như tôi đã có nó dưới kubectl get secrets: NAME TYPE DATA AGE default-token-a7s5n kubernetes.io/service-account-token 2 51m myregistrykey kubernetes.io/dockercfg 1 50m

Vẫn còn lẫn lộn ...

Candide

Trả lời

5

Tài liệu đã lỗi thời, trong đó tài liệu tham chiếu đến .dockercfg thay vì .docker/config.json. Tôi sẽ cập nhật nó.

Khi bạn sử dụng định dạng .docker/config.json mới, bạn cần đặt type: kubernetes.io/dockerconfigjson thay vì type: kubernetes.io/.dockercfg.

Hỗ trợ cho type: kubernetes.io/dockerconfigjson được thêm vào v1.1.0 do đó máy chủ của bạn hỗ trợ nhưng không được máy khách của bạn hỗ trợ (là v1.1.0-alpha trước v1.1.0).

Khi bạn sử dụng type: kubernetes.io/dockerconfigjson, nó phải xác thực nội dung bí mật của bạn.

Với type: kubernetes.io/dockerconfigjson, bạn muốn giữ bao bì auths.

+0

https://github.com/kubernetes/kubernetes/pull/18777 khắc phục tài liệu. Đánh giá của bạn sẽ được hoan nghênh. –

+0

Trên thực tế, do giám sát, Kubernetes hiện không xác thực 'loại: kubernetes.io/dockerconfigjson'. Tôi đã viết https://github.com/kubernetes/kubernetes/pull/18790 để sửa lỗi này. –

+0

Cảm ơn Eric này - tài liệu hoạt động tuyệt vời. Đơn khiếu nại nhỏ: Tôi thực sự không thể thực thi 'nodes = $ (kubectl nhận được nút -o jsonpath = '{range.items [*]. Metadata} {. Name} {end}')' (nhận 'lỗi: định dạng đầu ra" jsonpath = {range.items [*]. metadata} {. name} {end} "không được công nhận') có khả năng là do sự thiếu hiểu biết của tôi về cách thực hiện điều này. Vẫn sẽ tốt đẹp nếu nó rõ ràng hơn một chút. – candide

5

Vì vậy, , Tôi tiếp tục nghiên cứu web để tìm câu trả lời cho vấn đề của mình và cuối cùng tìm thấy câu trả lời này:

https://github.com/kubernetes/kubernetes/issues/7954#issuecomment-115241561

Vào cuối của chủ đề, jjw27 đã đóng đinh nó. Các kubernetes documentation đề cập đến các tập tin .dockercfg.json chỉ để nói rằng nội dung của nó cần phải được mã hóa base64. Thực tế, có hai vấn đề với tập tin này:

  1. có vẻ như nó biến thành một tập tin thực sự, tức là .docker/config.json
  2. các thông tin auth trong tập tin này được bao bọc bởi một thêm auths đối tượng, mà bạn có để thoát khỏi của.

Trích dẫn jjw27

Không làm việc:

{ 
    "auths": { 
    "hub.example.com:1024": { 
     "auth": "asdf=", 
     "email": "[email protected]" 
    } 
    } 
} 

Làm việc:

{ 
    "hub.example.com:1024": { 
    "auth": "asdf=", 
    "email": "[email protected]" 
    } 
} 

Google, vui lòng cập nhật doc này !!

Thông báo cho Kubernetes devs # 2: Ngoài ra, không phàn nàn với bí mật được mã hóa base64 không đúng định dạng là rất gây hiểu lầm. Vui lòng xác thực đầu vào của người dùng và khiếu nại nếu nó có lỗi.

Các vấn đề liên quan