Update Containers/docker-registry
Prima bozza incompleta del capitolo 3
This commit is contained in:
parent
64d3ae1681
commit
e618b48cb6
@ -412,6 +412,222 @@ fd2758d7a50e: Layer already exists
|
||||
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
|
||||
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account
|
||||
|
Loading…
Reference in New Issue
Block a user