Dopo aver eseguito il provisioning di un cluster TKG, è consigliabile distribuire un carico di lavoro di prova e convalidare la funzionalità del cluster.

Distribuire un'app di prova per verificare che il cluster TKG sia in esecuzione.

Prerequisiti

  • Effettuare il provisioning di un cluster TKG.
  • Connettersi al cluster TKG.

Procedura

  1. Effettuare il provisioning di un cluster TKG.
  2. Accedere al Supervisore tramite kubectl.
    kubectl vsphere login --server=<IP or FQDN> --vsphere-username <USERNAME>
  3. Passare al contesto di configurazione di Spazio dei nomi vSphere in cui è stato eseguito il provisioning del cluster TKGS.
    kubectl config use-context VSPHERE-NAMESPACE
  4. Accedere al cluster TKG di destinazione.
    kubectl vsphere login --server=<IP or FQDN> --vsphere-username <USERNAME> \
    --tanzu-kubernetes-cluster-name CLUSTER-NAME \
    --tanzu-kubernetes-cluster-namespace NAMESPACE-NAME
  5. Creare il file ping-pod.yaml con il contenuto seguente.
    apiVersion: v1
    kind: Pod
    metadata:
      name: ping-pod
      namespace: default
    spec:
      containers:
      - image: busybox:1.34
        name: busybox
        command: ["ping", "-c"]
        args: ["1", "8.8.8.8"]
      imagePullSecrets:
      - name: regcred
      restartPolicy: Never
    
  6. Creare le credenziali del registro regcred.
    L'immagine del container utilizzata per questo scenario (busybox) viene estratta dal registro di Docker Hub pubblico, che potrebbe limitare l'estrazione delle immagini. In tal caso, sarà necessario un account Docker Hub e un segreto dell'estrazione dell'immagine ("regcred") a cui si fa riferimento nella specifica del pod. Per creare questo segreto, vedere Creazione di un segreto per le credenziali del registro privato.
  7. Configurare la sicurezza del pod in base alle necessità.
    Se si utilizza Tanzu Kubernetes versione v1.24 o precedente, procedere con il passaggio successivo e creare il pod.
    Se si utilizza Tanzu Kubernetes versione v1.25, gli avvisi PSA sono abilitati. È possibile procedere con il passaggio successivo e creare il pod. Si tenga tuttavia presente che verrà visualizzato un avviso relativo alle violazioni della sicurezza del pod, che è possibile ignorare.
    Warning: would violate PodSecurity "restricted:latest": allowPrivilegeEscalation != false 
    (container "busybox" must set securityContext.allowPrivilegeEscalation=false), 
    unrestricted capabilities (container "busybox" must set securityContext.capabilities.drop=["ALL"]), 
    runAsNonRoot != true (pod or container "busybox" must set securityContext.runAsNonRoot=true), 
    seccompProfile (pod or container "busybox" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    Se si utilizza Tanzu Kubernetes versione v1.26 o successiva, vengono applicate le restrizioni PSA. Se si tenta di creare il pod come illustrato nel passaggio successivo, l'operazione non riesce e viene visualizzato il messaggio di errore seguente.
    Error from server (Forbidden): error when creating "ping-pod.yaml": pods "ping-pod" is forbidden: 
    violates PodSecurity "restricted:latest": allowPrivilegeEscalation != false 
    (container "busybox" must set securityContext.allowPrivilegeEscalation=false), 
    unrestricted capabilities (container "busybox" must set securityContext.capabilities.drop=["ALL"]), 
    runAsNonRoot != true (pod or container "busybox" must set securityContext.runAsNonRoot=true), 
    seccompProfile (pod or container "busybox" must set securityContext.seccompProfile.type to "RuntimeDefault" or "Localhost")
    Per risolvere questo problema, eseguire il comando seguente nello spazio dei nomi default in cui viene creato il pod. Si tenga presente che in questo modo si rimuovono le restrizioni PSA nello spazio dei nomi.
    kubectl label --overwrite ns default pod-security.kubernetes.io/enforce=privileged
    In alternativa, è possibile applicare securityContext direttamente al pod, ad esempio:
    ...
    spec:
      containers:
      - image: busybox:1.34
        name: busybox
        command: ["ping", "-c"]
        args: ["1", "8.8.8.8"]
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            drop: ["ALL"]
          runAsNonRoot: true
          runAsUser: 1000
          seccompProfile:
            type: "RuntimeDefault"
    ...
  8. Applicare il file YAML.
    kubectl apply -f ping-pod.yaml
    Risultato previsto:
    pod/ping-pod created
  9. Verificare che il pod sia stato completato correttamente.
    kubectl get pods -n default
    NAME       READY   STATUS      RESTARTS   AGE
    ping-pod   0/1     Completed   0          13s
    
  10. Verificare che il pod eseguiva il ping del server DNS.
    kubectl logs ping-pod -f
    Risultato previsto:
    PING 8.8.8.8 (8.8.8.8): 56 data bytes
    64 bytes from 8.8.8.8: seq=0 ttl=106 time=33.352 ms
    
    --- 8.8.8.8 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss
    round-trip min/avg/max = 33.352/33.352/33.352 ms
    
  11. Eliminare il pod.
    kubectl delete -f ping-pod.yaml
  12. Verificare che il pod sia stato eliminato.
    kubectl get pods