2017-11-12 46 views
13

Próbuję skonfigurować gitlab ci do wdrożenia aplikacji do silnika obliczeniowego google. Mam powodzeniem pchnął obraz do gitlab repozytorium ale po zastosowaniu kubernetes wdrażania config widzę następujący błąd w kubectl opisać Dozetkikubectl pull image from gitlab unauthorized: HTTP Basic: Access denied

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"} 

Oto moja rozmieszczenie gitlab-ci zadanie:

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 

a oto obłok -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 

śledzę this article

+0

Czy jesteś pewien, że utworzyłeś sekret w tym samym obszarze nazw co wdrożenie? – user3232739

+1

Dla tajnej i domyślnej przestrzeni nazw użytkownika (według kubectl opisują sekrety) –

+1

A także wdrożenia używają domyślnie (zgodnie z kubectl get pods --all-namespaces) –

Odpowiedz

6

Istnieje obejście, zdjęcie można przekazać do rejestru kontenerów Google, a następnie pobrać z gcr bez zabezpieczeń. Możemy przesłać obraz do gcr bez użycia gcloud cli przy użyciu json token file. Więc .gitlab-ci.yaml mógłby wyglądać następująco:

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 

i obrazu w chmury-kubernetes.yaml powinno być:

gcr.io/proj/api:v1

1

Musisz użyć --docker-server=CI_REGISTRY . To samo, co w przypadku docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY.

Należy również pamiętać, że sekrety dokerów muszą znajdować się w tym samym obszarze nazw, co Deployment/ReplicaSet/DaemonSet/StatefullSet/Job.

+0

To było pierwsze co próbowałem, to znalazłem to [wątek] (https) : //forum.gitlab.com/t/docker-login-fails-with-registry-gitlab-com/6208/9) ktoś zaproponował użycie adresu URL w1 - brak wyniku namespace - domyślnie wszędzie. –

Powiązane problemy