web-dev-qa-db-de.com

kubectl Bild von gitlab nicht autorisiert: HTTP Basic: Zugriff verweigert

Ich versuche, gitlab ci so zu konfigurieren, dass app für google compute engine bereitgestellt wird. Ich habe das Image erfolgreich in das gitlab-Repository verschoben, aber nach der Anwendung der kubernetes-Implementierungskonfiguration sehe ich den folgenden Fehler in kubectl-Beschreibungs-Pods:

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

Hier ist mein Einsatz von gitlab-ci:

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

und hier ist cloud-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

Ich habe diesen Artikel

15

Es gibt eine Problemumgehung, das Image könnte in die Google-Containerregistrierung verschoben und dann ohne Sicherheit aus dem gcr abgerufen werden. Wir können das Image ohne gcloud cli mit json token file nach gcr verschieben. So könnte .gitlab-ci.yaml aussehen:

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

Und Bild in cloud-kubernetes.yaml sollte sein:

gcr.io/proj/api:v1

11

Sie müssen --docker-server=CI_REGISTRY..__ verwenden. Das gleiche wie für docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY.

Beachten Sie außerdem, dass sich Ihre Docker-Geheimnisse im selben Namespace befinden müssen wie Deployment/ReplicaSet/DaemonSet/StatefullSet/Job.

1
Grigoriev Nick