È possibile stabilire una connessione SSH a un nodo del cluster TKG come vmware-system-user utilizzando una chiave privata.

È possibile connettersi tramite SSH a qualsiasi nodo del cluster TKG come utente vmware-system-user. Il segreto che contiene la chiave privata SSH è denominato CLUSTER-NAME-ssh. Vedere Recupero dei segreti del cluster TKG mediante Kubectl.

Per connettersi a un nodo del cluster TKG tramite SSH utilizzando una chiave privata, creare una jump box Pod vSphere in Supervisore.

Prerequisiti

In questa attività viene eseguito il provisioning di un Pod vSphere come jump host per la connettività SSH. Pod vSphere richiede Networking con NSX per Supervisore. Se si utilizzano i servizi di rete vDS per Supervisore, vedere Stabilire una connessione SSH ai nodi del cluster Servizio TKG come utente di sistema utilizzando una password.

Procedura

  1. Connettersi a Supervisore.
  2. Creare una variabile di ambiente denominata SPAZIO DEI NOMI il cui valore è il nome dello Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster TKG di destinazione.
    export NAMESPACE=VSPHERE-NAMESPACE
  3. Passare al contesto dello Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster Tanzu Kubernetes.
    kubectl config use-context $NAMESPACE
  4. Visualizzare l'oggetto segreto TKG-CLUSTER-NAME-ssh.
    kubectl get secrets
  5. Creare il segreto delle credenziali del registro di Docker Hub.
    Per impostazione predefinita, l'immagine utilizzata per creare il pod vSphere (PhotonOS) viene estratta da Docker Hub. Per estrarre l'immagine correttamente, potrebbe essere necessario un segreto delle credenziali. Vedere Creazione di un segreto per le credenziali del registro privato.
  6. Creare un Pod vSphere utilizzando il seguente codice jumpbox.yaml.
    Sostituire il valore namespace YOUR-NAMESPACE con lo Spazio dei nomi vSphere in cui viene eseguito il provisioning del cluster di destinazione. Sostituire il valore del secretName YOUR-CLUSTER-NAME-ssh con il nome del cluster di destinazione.
    apiVersion: v1
    kind: Pod
    metadata:
      name: jumpbox
      namespace: YOUR-NAMESPACE     #REPLACE
    spec:
      containers:
      - image: "photon:3.0"
        name: jumpbox
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "yum install -y openssh-server; mkdir /root/.ssh; cp /root/ssh/ssh-privatekey /root/.ssh/id_rsa; chmod 600 /root/.ssh/id_rsa; while true; do sleep 30; done;" ]
        volumeMounts:
          - mountPath: "/root/ssh"
            name: ssh-key
            readOnly: true
        resources:
          requests:
            memory: 2Gi
      volumes:
        - name: ssh-key
          secret:
            secretName: YOUR-CLUSTER-NAME-ssh     #REPLACE 
      imagePullSecrets:
        - name: regcred
    
  7. Distribuire il pod applicando la specifica jumpbox.yaml.
    kubectl apply -f jumpbox.yaml
    pod/jumpbox created
  8. Verificare che il pod sia in esecuzione.
    kubectl get pods
    NAME      READY   STATUS    RESTARTS   AGE
    jumpbox   1/1     Running   0          3h9m
    
    Nota: Il pod della jumpbox di vCenter dovrebbe essere presente anche nello Spazio dei nomi vSphere.
  9. Creare una variabile di ambiente con l'indirizzo IP del nodo del cluster di destinazione eseguendo il seguente set di comandi.
    1. Ottenere il nome della macchina virtuale di destinazione.
      kubectl get virtualmachines
    2. Creare la variabile di ambiente VMNAME il cui valore è il nome del nodo di destinazione.
      export VMNAME=NAME-OF-THE-VIRTUAL-MACHINE
    3. Creare la variabile di ambiente VMIP il cui valore è l'indirizzo IP della macchina virtuale del nodo di destinazione.
      export VMIP=$(kubectl -n $NAMESPACE get virtualmachine/$VMNAME -o jsonpath='{.status.vmIp}')
  10. Stabilire una connessione SSH al nodo del cluster utilizzando il pod della jumpbox eseguendo il comando seguente.
    kubectl exec -it jumpbox  /usr/bin/ssh vmware-system-user@$VMIP
    Importante: Il processo di creazione del contenitore e di installazione del software richiede circa 60 secondi. Se viene visualizzato il messaggio di errore "error executing command in container: container_linux.go:370: starting container process caused: exec: "/usr/bin/ssh": stat /usr/bin/ssh: no such file or directory" attendere qualche secondo ed eseguire nuovamente il comando.
  11. Confermare l'autenticità dell'host immettendo yes.
    The authenticity of host '10.249.0.999 (10.249.0.999)' can't be established.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.249.0.999' (ECDSA) to the list of known hosts.
    Welcome to Photon 3.0
     
  12. Verificare di avere effettuato l'accesso nel nodo di destinazione come vmware-system-user.
    Ad esempio, l'output seguente indica che è stato effettuato l'accesso a un nodo del piano di controllo come utente di sistema.
    vmware-system-user@tkg-cluster-1-control-plane-66tbr [ ~ ]$
    
  13. Eseguire le operazioni desiderate nel nodo.
    Avvertimento: Potrebbe essere necessario utilizzare sudo o sudo su per eseguire determinate operazioni nel nodo, ad esempio il riavvio del kubelet.
  14. Al termine, digitare exit per disconnettersi dalla sessione SSH nel Pod vSphere.
  15. Per eliminare il pod, eseguire il comando kubectl delete pod jumpbox.
    Attenzione: Per motivi di sicurezza, è consigliabile eliminare il pod della jumpbox dopo aver completato il lavoro. Sarà possibile ricrearlo in un secondo momento, se necessario.