Update Containers/docker-registry

Prima bozza incompleta del capitolo 3
This commit is contained in:
Celestino Amoroso 2025-07-09 09:37:34 +02:00
parent 64d3ae1681
commit e618b48cb6

View File

@ -412,6 +412,222 @@ fd2758d7a50e: Layer already exists
amo1: digest: sha256:f8ff90f6715f4708afe556f5b708befeb5f0480c175fc369c2e59202f3374f04 size: 739 amo1: digest: sha256:f8ff90f6715f4708afe556f5b708befeb5f0480c175fc369c2e59202f3374f04 size: 739
---- ----
## Pod Kubernetes con immagine dal registry
Con le procedure spiegate nel capitolo precedente è stato realizzato un servizio registry per immagini Docker. In questo capitolo si esaminano le condizioni e le azioni che consentono la creazione di Pod Kubernetes che utilizzano immagini scaricate dal servizio registry creato.
Nella prima parte di questo capitolo si mostra come definire e creare un Pod attraverso un file _manifest_. In seguito si capirà come eseguire direttamente procedere con l'esecuzione diretta di un Pod con il comando _"kubectl run ..."_.
Di seguito i link ad alcune pagine della documentazione Kubernetes utili per il tema del capitolo.
* https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/[Pull an Image from a Private Registry]
* https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod[Specifying `imagePullSecrets` on a Pod]
* https://kubernetes.io/docs/reference/kubectl/generated/kubectl_run/[kubectl run]
### File manifest
Un file manifest definisce le caratteristiche di un oggetto Kubernetes, ad esempio quelle di un Pod.
L'esempio seguente specifica gli attributi di un Pod per l'esecuzione dell'applicazione _kuard_. In particolare, specifica che la sorgente dell'immagine da utilizzare per il container è quella caricata nel registry privato _hub.paas.portale-stac.it_.
.Prima bozza del manifest per Pod kuard
[source,yaml]
----
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: hub.paas.portale-stac.it/kuard-amd64:amo1
name: kuard
ports:
- containerPort: 8080
name: http
protocol: TCP
----
Se si tentasse di attivare il Pod secondo la specifica di sopra, si otterrebbe l'errore _ErrImagePull_ che indica l'impossibilità di scaricare l'immagine richiesta.
Per verificare questa situazione, registrare il manifest nel file YAML _kuard-pod.yaml_ ed eseguire le istruzioni seguenti.
[[a_pod_activation,Attivazione Pod]]
.Tentativo di attivazione del Pod
[source,shell]
----
# Creazione del Pod
[fedoravm]$ kubectl apply -f kuard-pod.yaml
pod/kuard created
# Stato del Pod: ErrImagePull
[fedoravm]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
kuard 0/1 ErrImagePull 0 5s
# Distruzione del Pod
[fedoravm]$ kubectl delete pods/kuard
pod "kuard" deleted
----
In questo caso, la causa dell'errore risiede nel fatto che il Pod non dispone delle credenziali per accedere al registry remoto.
Per risolvere questo problema è necessario, innanzitutto, definire un oggetto contenitore per le credenziali, detto _secret_. Poi serve associare questo oggetto al Pod che le utilizzerà.
L'associazione di un secret ad un Pod può essere effetuata in due modi:
* associazione diretta, con specifica del secret nel Pod manifest;
* associazione indiretta, mediante l'uso di _ServiceAccount_.
#### Creazione secret
I _secret_ sono oggetti che consentono ai Pod l'accesso a servizi esterni. Esistono diversi tipi di credenziali, una delle quali è quella basata su username e password per accedere ai registry delle immagini Docker.
La pagina di riferimento nella documentazione Kubernetes è https://kubernetes.io/docs/concepts/configuration/secret/[Secret].
##### Copia credenziali Docker
Le credenziali Docker possono essere recuperate dal suo file di configurazione `~/.docker/config.json` nel quale sono registrate automaricamente dal comando _docker_ dopo un'operazione di login conclusa con successo. Questa modalità è appropriata per connessioni a servizi registry.
Se non già fatto, eseguire il login al registry con il comando _docker_.
.Login Docker al registry
[source, shell]
----
[fedoravm]$ docker login -u camoroso https://hub.paas.portale-stac.it
Password:
Login Succeeded
[fedoravm]$ cat ~/.docker/config.json
{
"auths": {
"hub.paas.portale-stac.it": {
"auth": "Y2Ftb3Jvc286SHViLkFtbw=="
}
}
}
----
Procedere ora con la creazione del secret con le credenziali registrate dal login in `~/.docker/config.json`.
.Creazione di un secret a partire dalla configurazione Docker
[source, shell]
----
# Creazione secret con nome regcred
[fedoravm]$ kubectl create secret generic regcred \
--from-file=.dockerconfigjson=${HOME}/.docker/config.json \
--type=kubernetes.io/dockerconfigjson
# Verifica secret
[fedoravm]$ kubectl get secret regcred --output=yaml
apiVersion: v1
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSJodWIucGFhcy5wb3J0YWxlLXN0YWMuaXQiOiB7CgkJCSJhdXRoIjogIlkyRnRiM0p2YzI4NlNIVmlMa0Z0Ync9PSIKCQl9Cgl9Cn0=
kind: Secret
metadata:
creationTimestamp: "2025-07-04T20:23:17Z"
name: regcred
namespace: default
resourceVersion: "284323"
uid: 6ca08567-aa66-455d-8245-ab0e8a48d3c4
type: kubernetes.io/dockerconfigjson
# Eventualmente, è possibile richiedere uno specifico attributo
[fedoravm]$ kubectl get secret regcred \
--output="jsonpath={.data.\.dockerconfigjson}"
ewoJImF1dGhzIjogewoJCSJodWIucGFhcy5wb3J0YWxlLXN0YWMuaXQiOiB7CgkJCSJhdXRoIjogIlkyRnRiM0p2YzI4NlNIVmlMa0Z0Ync9PSIKCQl9Cgl9Cn0=
# Lista dei secrets
[fedoravm]$ kubectl get secrets
NAME TYPE DATA AGE
regcred kubernetes.io/dockerconfigjson 1 4d10h
----
##### Creazione esplicita di un secret Docker
#todo#
#### Associazione del secret al Pod
L'associazione al Pod del secret creato si realizza semplicemente aggiungendo l'attributo _imagePullSecrets_ al file manifest.
.Manifest per Pod kuard con specifica diretta delle credenziali
[source,yaml]
----
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: hub.paas.portale-stac.it/kuard-amd64:amo1
name: kuard
ports:
- containerPort: 8080
name: http
protocol: TCP
imagePullSecrets:
- name: regcred
----
Salvare la modifica nel file manifest ed attivare il Pod come mostrato in <<a_pod_activation>>. Questa volta lo stato dovrebbe essere _Running_.
#### Creazione di un ServiceAccount
#todo, spiegare la funzione dei ServiceAccount#
.Creazione ServiceAccount con nome amo-sc
[source,shell]
----
# Creazione ServiceAccount
[fedoravm]$ kubectl create serviceaccount amo-sc
serviceaccount/amo-sc created
# Associazione del secret regcred al ServiceAccount
[fedoravm]$ kubectl patch serviceaccount amo-sc \
-p '{"imagePullSecrets": [{"name": "regcred"}]}'
serviceaccount/amo-sc patched
----
#### Associazione del ServiceAccount al Pod
Anche l'associazione del ServiceAccount al Pod si esegue con l'aggiunta di un attributo, _serviceAccountName_.
.Manifest per Pod kuard con specifica ServiceAccount
[source,yaml]
----
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: hub.paas.portale-stac.it/kuard-amd64:amo1
name: kuard
ports:
- containerPort: 8080
name: http
protocol: TCP
serviceAccountName: amo-sc
----
Anche in questo caso, verificare il funzionamento del Pod con i comandi di <<a_pod_activation>>.
////
.Specifica della modalità di pull
[source,yaml]
----
apiVersion: v1
kind: Pod
metadata:
name: kuard
spec:
containers:
- image: hub.paas.portale-stac.it/kuard-amd64:amo1
#imagePullPolicy: Never
name: kuard
ports:
- containerPort: 8080
name: http
protocol: TCP
serviceAccountName: amo-sc
#imagePullSecrets:
# - name: regcred
----
////
//// ////
Add ImagePullSecrets to a service account Add ImagePullSecrets to a service account
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account