Configura i nodi per l'autenticazione in un registro privato

Puoi configurare il tuo cluster Google Distributed Cloud in modo che i relativi nodi worker possano utilizzare registri privati. I registri privati a livello di nodo sono destinati all'utilizzo con i tuoi carichi di lavoro per offrirti un maggiore controllo sui pull delle immagini e sulla relativa sicurezza. Quando configuri un cluster con i registri privati come descritto in questo documento, Google Distributed Cloud aggiorna la configurazione containerd di conseguenza. Una volta configurato il cluster, tutti i pod sui nodi qualificati possono utilizzare i registri senza dover specificare imagePullSecrets nella specifica del pod.

Questa funzionalità può essere abilitata o disabilitata in qualsiasi momento durante il ciclo di vita del cluster.

Prerequisiti

Per utilizzare questa funzionalità di anteprima, il cluster deve soddisfare i seguenti requisiti:

  • Questa funzionalità è destinata ai cluster utente e ai cluster autogestiti (ibridi e autonomi) con pool di nodi worker.
  • La versione del cluster deve essere 1.29.
  • La versione del pool di nodi deve essere 1.29 (non tutti i pool di nodi devono essere alla versione 1.29, ma la funzionalità è valida solo per i pool di nodi con versione 1.29).
  • Il cluster deve avere l'annotazione della funzionalità di anteprima preview.baremetal.cluster.gke.io/private-registry: "enable".

Configura un cluster a gestione autonoma per i registri privati

Per configurare un cluster autonomo o ibrido per l'utilizzo di registri privati a livello di nodo:

  1. Modifica il file di configurazione del cluster per aggiungere il blocco privateRegistries nella sezione delle credenziali:

    ---
    gcrKeyPath: baremetal/gcr.json
    sshPrivateKeyPath: .ssh/id_rsa
    ...
    privateRegistries:
      - host: REGISTRY_HOST
        caCertPath: CA_CERT_PATH
        pullCredentialConfigPath: CREDENTIALS_FILE_PATH
    ...
    ---
    apiVersion: v1
    kind: Namespace
    metadata:
      name: cluster-hybrid-basic
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: hybrid-basic
      namespace: cluster-hybrid-basic
      annotations:
        preview.baremetal.cluster.gke.io/private-registry: "enable"
        ...
    spec:
      type: hybrid
      ...
    

    Sostituisci quanto segue:

    • REGISTRY_HOST: il nome di dominio o l'indirizzo IP del registro privato e la porta. Ad esempio: 10.200.0.2:5007.

    • CA_CERT_PATH: il percorso del file del certificato CA (CA principale del server). Ad esempio: /root/cert.pem. Se il tuo registro privato non richiede un certificato TLS privato, puoi omettere questo campo.

    • CREDENTIALS_FILE_PATH: il percorso del file che contiene le credenziali per accedere al registro privato. Ad esempio: /root/.docker/config.json. Se il tuo server del registry privato non richiede le credenziali per l'autenticazione, puoi omettere questo campo.

  2. Applica le modifiche al cluster:

    bmctl update cluster -c CLUSTER_NAME --kubeconfig=CLUSTER_KUBECONFIG
    

    Sostituisci quanto segue:

    • CLUSTER_NAME: il nome del cluster che vuoi aggiornare.

    • CLUSTER_KUBECONFIG: percorso del file kubeconfig del cluster autogestito (ibrido o autonomo).

Configura un cluster utente per i registri privati

Per i cluster utente, la configurazione del registro privato viene specificata nelle specifiche delle risorse cluster. Inoltre, per i cluster utente, devi archiviare le credenziali del registro privato in un secret:

  1. Crea un secret Kubernetes di tipo kubernetes.io/dockerconfigjson per le credenziali del registro:

    Se vuoi limitare il secret a uno spazio dei nomi specifico, aggiungi il flag --namespace al comando seguente per specificare il nome dello spazio dei nomi.

    kubectl create secret docker-registry CREDS_SECRET_NAME \
        --from-file=.dockerconfigjson=CREDENTIALS_FILE_PATH \
        --kubeconfig=ADMIN_KUBECONFIG
    

    Sostituisci quanto segue:

    • CREDS_SECRET_NAME: il nome del tuo secret.

    • CREDENTIALS_FILE_PATH: il percorso del file di configurazione Docker. Ad esempio, /root/.docker/config.json.

    Il tuo secret dovrebbe essere simile al seguente esempio:

    apiVersion: v1
    data:
      .dockerconfigjson: ewoJImF1dGhzIjogewoJ...clpYSXdNak14IgoJCX0KCX0KfQ==
    kind: Secret
    metadata:
      creationTimestamp: "2024-04-28T22:06:06Z"
      name: private-registry-secret
      namespace: default
      resourceVersion: "5055821"
      ...
      annotations:
        ...
        baremetal.cluster.gke.io/mark-source: "true"
    type: kubernetes.io/dockerconfigjson
    

    Se il secret non si trova nello stesso spazio dei nomi del cluster, aggiungi l'annotazione baremetal.cluster.gke.io/mark-source: "true", come mostrato nell'esempio precedente.

  2. Se applicabile, memorizza il certificato CA per il registry in un secret.

    Il secret è simile al seguente:

    apiVersion: v1
    kind: Secret
    metadata:
      annotations:
        baremetal.cluster.gke.io/mark-source: "true"
      name: ca-9dd74fd308bac6df562c7a7b220590b5
      namespace: some-namespace
    type: Opaque
    data:
      ca.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUR2RENDQXFTZ0F3SUJBZ0lVQi
      3UGxjUzVFVk8vS0xuYjZiMHRhRFVleXJvd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2ZqRUxNQWtHQ
      ...
      QnpPTkxTRFZJVk5LMm9YV1JvNEpJY0ZoNFZ4MWRMRHpqMldEaHhrUEljWEhLdGR3dk5iS2tocU
      LUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
      ```
    
  3. Modifica il file di configurazione del cluster utente per abilitare e configurare il registro privato:

    1. Aggiungi l'annotazione preview.baremetal.cluster.gke.io/private-registry: "enable" per abilitare il registro privato mentre è in anteprima.

      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
        namespace: cluster-user-basic
        resourceVersion: "766027"
        annotations:
          ...
          preview.baremetal.cluster.gke.io/private-registry: "enable"
      ...
      
    2. Nella sezione nodeConfig del file di configurazione del cluster utente, aggiungi il blocco privateRegistries:

      apiVersion: baremetal.cluster.gke.io/v1
      kind: Cluster
      metadata:
        name: user-basic
      ...
      spec:
        bypassPreflightCheck: false
      ...
        nodeConfig:
          containerRuntime: containerd
          podDensity:
            maxPodsPerNode: 250
          privateRegistries:
          - caCertSecretRef:
              name: CA_CERT_SECRET_NAME
              namespace: CA_CERT_SECRET_NAMESPACE
            host: REGISTRY_HOST
            pullCredentialSecretRef:
              name: CREDS_SECRET_NAME
              namespace: CREDS_SECRET_NAMESPACE
      

    Sostituisci quanto segue:

    • CA_CERT_SECRET_NAME: il nome del secret che hai creato per archiviare il certificato CA. Se non hai creato questo secret, rimuovi il blocco caCertSecretRef.

    • CA_CERT_SECRET_NAMESPACE: il nome dello spazio dei nomi per il secret del certificato CA, se lo hai creato.

    • REGISTRY_HOST: il nome di dominio o l'indirizzo IP del registro privato e la porta. Ad esempio: 10.200.0.2:5007.

    • CREDS_SECRET_NAME: il nome del tipo Secret kubernetes.io/dockerconfigjson per le credenziali del registry.

    • CREDS_SECRET_NAMESPACE: il nome dello spazio dei nomi per il Secret delle credenziali del registry.

  4. Applica le modifiche al cluster:

    bmctl update cluster -c USER_CLUSTER_NAME --kubeconfig=ADMIN_KUBECONFIG
    

    Sostituisci quanto segue:

    • USER_CLUSTER_NAME: il nome del cluster che stai aggiornando.

    • ADMIN_KUBECONFIG: percorso del file kubeconfig del cluster di amministrazione.