[LINUX] Essayez de créer un pod Kubernetes à partir d'une image GitLab Container Registry

Voici un résumé des étapes lors de la tentative de création d'un pod Kubernetes à partir d'une image du registre de conteneurs de GitLab pour apprendre les compétences. * La partie rouge dans la figure ci-dessous. L'image à extraire pour l'essai comprend nginx. k8s.png

Conditions préalables

・ Le cluster Kubernetes a été construit ・ GitLab a été construit ・ La version de l'environnement que j'ai essayée est la suivante  CentOS:7.3  Kubernetes:1.18.2  Calico:3.13.3  Docker:1.13.1-109  GitLab:11.6.8

Matériel de référence

https://docs.docker.com/registry/insecure/ https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

1. Pré-configuration pour Docker et K8s

En guise de préparation, placez le certificat et définissez les informations d'accès au registre de conteneurs.

Placement du certificat dans Docker

Placez un certificat pour accéder au registre de conteneurs à partir de Docker.

Implémenté à chaque nœud K8s


# sudo mkdir -p /etc/docker/certs.d/registry.test01.com
# sudo cp cert.crt /etc/docker/certs.d/registry.test01.com/ca.crt

cert.crt ・ ・ ・ Certificat utilisé pour accéder au registre des conteneurs GitLab

Paramètres de registre non sécurisés Docker

Si le certificat que vous avez placé était un certificat auto-signé, vous deviez configurer Docker pour qu'il l'autorise.

/etc/docker/daemon.json


{
  "insecure-registries": ["registry.test01.com"]
}

Redémarrez Docker pour qu'il prenne effet.

systemctl restart docker

Enregistrement des informations d'accès au registre de conteneurs dans les K8

Enregistrez les informations pour accéder au registre de conteneurs dans K8s. Tout d'abord, connectez-vous au registre de conteneurs depuis Docker.

nœud maître k8s


#docker login registry.test01.com
Username: <Nom d'utilisateur lors de l'accès au registre de conteneurs>
Password: <Mot de passe correspondant au nom d'utilisateur ci-dessus>
Login Succeeded

Vérifiez le fichier config.json généré par la connexion ci-dessus.

python


# cat ~/.docker/config.json
{
	"auths": {
		"registry.test01.com": {
			"auth": "***************************="
		}
	}

Créez un secret pour la connexion de cluster qui contient le jeton d'authentification.

# kubectl create secret docker-registry regcred --docker-server=registry.test01.com --docker-username=<Nom d'utilisateur du registre de conteneurs> --docker-password=<Nom d'utilisateur du registre de conteneursに対応するパスワード>
secret/regcred created

2. Créez un pod qui utilise l'image du registre de conteneurs

Définissez les paramètres de service pour accéder au conteneur via le réseau et les paramètres du pod qui utilisent l'image du conteneur.

Paramètres de service (nodePort) pour l'accès depuis l'extérieur du cluster

Créez les informations d'accès au pod comme suit. Associez le port externe 30080 au port nginx 80 du côté du conteneur.

testapp01-svc.yaml


apiVersion: v1
kind: Service
metadata:
  name: testapp01-np
spec:
  selector:
   app:testapp01 ← Faites correspondre ceci avec la définition de pod
  ports:
  - targetPort:80 ← Port de réception des conteneurs(nginx)
    port: 8080
    nodePort:30080 ← Port utilisé lors de l'accès depuis l'extérieur. "Node IP" lors de l'accès depuis l'extérieur:Spécifiez le numéro de port spécifié ici.
    protocol: "TCP"
  type: NodePort

Appliquez le fichier ci-dessus.

python


# kubectl apply -f testapp01-svc.yaml

Vérifiez le résultat de l'application.

# kubectl get services testapp01-np
NAME           TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
testapp01-np   NodePort   xx.xx.xx.xx      <none>        8080:30080/TCP   4d2h

Création d'un pod à l'aide d'une image du registre de conteneurs

Créez un fichier manifeste pour Ipod comme suit.

testapp01.yaml



apiVersion: v1
kind: Pod
metadata:
  name: testapp01
  labels:
    app:testapp01 ← Libellé de liaison avec les services
spec:
  containers:
  - name: testapp01-container
    image: registry.test01.com/test/testapp01:dernière ← Image applicable
    ports:
    - containerPort:80 ← Port d'application utilisé dans le conteneur
  imagePullSecrets:
  - name:regcred ← Secret créé en préparation du déploiement

Appliquez le fichier ci-dessus.

# kubectl create -f testapp01.yaml
pod/testapp01 created

Assurez-vous que le pod est en cours d'exécution.

# kubectl get pod testapp01
NAME        READY   STATUS    RESTARTS   AGE
testapp01   1/1     Running   0          4s

Enfin, essayez d'accéder à l'application et vérifiez le fonctionnement. Cette fois, j'ai accédé à l'URL suivante à partir d'un navigateur externe et l'ai confirmée.

http://[podが起動しているノードのIP]:30080

Résumé

L'enquête a pris beaucoup de temps car il était nécessaire de prendre des mesures en raison de l'utilisation du certificat auto-signé, mais il était relativement facile de lier GitLab, le registre de conteneurs et les K8.

Recommended Posts

Essayez de créer un pod Kubernetes à partir d'une image GitLab Container Registry
Essayez d'extraire une chaîne de caractères d'une image avec Python3
Créer un identifiant Santa à partir d'une image du Père Noël
Essayez d'embellir avec Talking Head Anime à partir d'une seule image [préparation python]