Zum Hauptinhalt springen

Eine private Image-Registry anbinden

Diese Anleitung erklärt, wie Sie von Ihrem Hikube-Kubernetes-Cluster aus den Zugriff auf eine private Container-Image-Registry (Docker Hub, GitLab Registry, GitHub Container Registry usw.) konfigurieren.

Hinweis

Diese Anleitung verwendet die nativen Kubernetes-Mechanismen zur Authentifizierung bei Image-Registries. Alle Befehle werden in Ihrem Cluster ausgeführt.

Voraussetzungen​

  • Ein bereitgestellter Hikube-Kubernetes-Cluster (siehe Schnellstart)
  • Die über die Konsole heruntergeladene kubeconfig des Clusters (Schaltfläche Kubeconfig, Projektadministratoren vorbehalten), in Ihre Sitzung geladen (export KUBECONFIG=~/Downloads/kubeconfig-<cluster-name>.yaml)
  • Die Zugangsdaten für Ihre private Registry (URL, Benutzername, Passwort oder Token)

Schritte​

1. Ein Secret vom Typ docker-registry erstellen​

Erstellen Sie ein Kubernetes-Secret mit den Zugangsdaten Ihrer privaten Registry:

kubectl create secret docker-registry my-registry \
--docker-server=registry.example.com \
--docker-username=user \
--docker-password=pass \
--docker-email=user@example.com

Beispiele für gängige Registries:

# Docker Hub
kubectl create secret docker-registry dockerhub \
--docker-server=https://index.docker.io/v1/ \
--docker-username=myuser \
--docker-password=mytoken

# GitLab Container Registry
kubectl create secret docker-registry gitlab-registry \
--docker-server=registry.gitlab.com \
--docker-username=deploy-token-user \
--docker-password=deploy-token-pass

# GitHub Container Registry
kubectl create secret docker-registry ghcr \
--docker-server=ghcr.io \
--docker-username=github-user \
--docker-password=ghp_xxxxxxxxxxxx

2. Das Secret an den ServiceAccount default anhängen​

Damit alle Pods des Namespace die private Registry automatisch verwenden, hängen Sie das Secret an den ServiceAccount default an:

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-registry"}]}'
Tipp

Diese Methode ist praktisch, wenn alle Pods eines Namespace auf dieselbe Registry zugreifen müssen. Neue Pods erben das Secret automatisch.

3. Oder direkt in der Pod-Spec referenzieren​

Sie können imagePullSecrets auch direkt in der Spec jedes Pods oder Deployments angeben:

deployment-private-image.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: registry.example.com/company/my-app:v1.2.3
ports:
- containerPort: 8080
imagePullSecrets:
- name: my-registry

4. Mit einem Deployment testen, das ein privates Image verwendet​

Stellen Sie Ihre Anwendung bereit und prüfen Sie, ob das Image korrekt heruntergeladen wird:

kubectl apply -f deployment-private-image.yaml

# Status der Pods prüfen
kubectl get pods -l app=my-app

# Bei einem Fehler die Events untersuchen
kubectl describe pod -l app=my-app

Überprüfung​

Prüfen Sie, ob die Pods das private Image korrekt verwenden:

# Prüfen, ob die Pods Running sind
kubectl get pods -l app=my-app

Erwartetes Ergebnis:

NAME READY STATUS RESTARTS AGE
my-app-6b8d5f7c9d-abc12 1/1 Running 0 1m
my-app-6b8d5f7c9d-def34 1/1 Running 0 1m
Warnung

Wenn die Pods im Zustand ImagePullBackOff oder ErrImagePull bleiben, prüfen Sie:

  • die URL der Registry im Secret (--docker-server);
  • die Zugangsdaten (Benutzername und Passwort oder Token);
  • den vollständigen Namen des Images mit dem Präfix der Registry;
  • ob sich das Secret im selben Namespace wie der Pod befindet.

Weiterführende Informationen​