2017-11-12 18 views
13

Tôi đang cố gắng định cấu hình cit gitlab để triển khai ứng dụng cho công cụ tính toán của google. Tôi đã thành công đẩy hình ảnh để gitlab kho nhưng sau khi áp dụng kubernetes cấu hình triển khai i xem sau lỗi trong kubectl mô tả vỏ:kubectl kéo hình ảnh từ gitlab trái phép: HTTP Cơ bản: Truy cập bị từ chối

Failed to pull image "registry.gitlab.com/proj/subproj/api:v1": rpc error: code = 2 
desc = Error response from daemon: {"message":"Get https://registry.gitlab.com/v2/proj/subproj/api/manifests/v1: unauthorized: HTTP Basic: Access denied"} 

Đây là triển khai gitlab-ci công việc của tôi:

docker: 
    stage: docker_images 
    image: docker:latest 
    services: 
    - docker:dind 
    script: 
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY 
    - docker build -t registry.gitlab.com/proj/subproj/api:v1 -f Dockerfile . 
    - docker push registry.gitlab.com/proj/subproj/api:v1 
    only: 
    - master 
    dependencies: 
    - build_java 

k8s-deploy: 
    image: google/cloud-sdk 
    stage: deploy 
    script: 
    - echo "$GOOGLE_KEY" > key.json # Google Cloud service account key 
    - gcloud auth activate-service-account --key-file key.json 
    - gcloud config set compute/zone us-central1-c 
    - gcloud config set project proj 
    - gcloud config set container/use_client_certificate True 
    - gcloud container clusters get-credentials proj-cluster 
    - kubectl delete secret registry.gitlab.com --ignore-not-found 
    - kubectl create secret docker-registry registry.gitlab.com --docker-server=https://registry.gitlab.com/v1/ --docker-username="$CI_REGISTRY_USER" --docker-password="$CI_REGISTRY_PASSWORD" [email protected] 
    - kubectl apply -f cloud-kubernetes.yml 

và đây là đám mây -kubernetes.yml:

apiVersion: v1 
kind: Service 
metadata: 
    annotations: 
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true" 
    name: proj 
    labels: 
    app: proj 
spec: 
    type: LoadBalancer 
    ports: 
    - port: 8082 
    name: proj 
    targetPort: 8082 
    nodePort: 32756 
    selector: 
    app: proj 
---  
apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
    name: projdeployment 
spec: 
    replicas: 1 
    template: 
    metadata: 
     labels: 
     app: proj 
    spec: 
     containers: 
     - name: projcontainer 
     image: registry.gitlab.com/proj/subproj/api:v1 
     imagePullPolicy: Always 
     env: 
      - name: SPRING_PROFILES_ACTIVE 
      value: "cloud" 
     ports: 
     - containerPort: 8082 
     imagePullSecrets: 
     - name: registry.gitlab.com 

tôi đã theo this article

+0

Bạn có chắc chắn rằng bạn đã tạo bí mật trong cùng một không gian tên như triển khai không? – user3232739

+1

Đối với không gian tên mặc định của người dùng bí mật i (theo kubectl mô tả bí mật) –

+1

Và triển khai sử dụng mặc định quá (theo kubectl get pods --all-namespaces) –

Trả lời

6

Có giải pháp thay thế, hình ảnh có thể được đẩy tới đăng ký vùng chứa của google và sau đó lấy từ gcr mà không cần bảo mật. Chúng tôi có thể đẩy hình ảnh vào gcr mà không cần gcloud cli bằng cách sử dụng json token file. Vì vậy, .gitlab-ci.yaml có thể trông giống như:

docker: 
    stage: docker_images 
    image: docker:latest 
    services: 
    - docker:dind 
    script: 
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY 
    - docker build -t registry.gitlab.com/proj/subproj/api:v1 -f Dockerfile . 
    - docker push registry.gitlab.com/proj/subproj/api:v1 
    - docker tag registry.gitlab.com/proj/subproj/api:v1 gcr.io/proj/api:v1 
    - docker login -u _json_key -p "$GOOGLE_KEY" https://gcr.io 
    - docker push gcr.io/proj/api:v1 
    only: 
    - master 
    dependencies: 
    - build_java 

k8s-deploy: 
    image: google/cloud-sdk 
    stage: deploy 
    script: 
    - echo "$GOOGLE_KEY" > key.json # Google Cloud service account key 
    - gcloud auth activate-service-account --key-file key.json 
    - gcloud config set compute/zone us-central1-c 
    - gcloud config set project proj 
    - gcloud config set container/use_client_certificate True 
    - gcloud container clusters get-credentials proj-cluster 
    - kubectl apply -f cloud-kubernetes.yml 

Và hình ảnh trong đám mây kubernetes.yaml nên là:

gcr.io/proj/api:v1

1

Bạn phải sử dụng --docker-server=CI_REGISTRY . Giống như bạn kiện cho docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY.

Cũng lưu ý rằng các bí mật của trình docker phải nằm trong cùng một không gian tên với Deployment/ReplicaSet/DaemonSet/StatefullSet/Job.

+0

Đó là lần đầu tiên tôi đã thử, sau đó tôi tìm thấy [thread] này (https) : //forum.gitlab.com/t/docker-login-fails-with-registry-gitlab-com/6208/9), ai đó đã đề xuất sử dụng url v1 - không có kết quả không gian tên - mặc định ở mọi nơi. –

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