Impostazione di un bastion per l'accesso al cluster

Scopri come impostare un bastion per accedere ai cluster creati utilizzando Kubernetes Engine (OKE).

Quando si eseguono operazioni su un cluster utilizzando kubectl, è necessario avere accesso all'endpoint API Kubernetes. Analogamente, quando si eseguono task amministrativi sui nodi di lavoro, è necessario disporre dell'accesso ai nodi di lavoro. Tuttavia, l'accesso all'endpoint API Kubernetes e/o ai nodi di lavoro potrebbe essere limitato a causa di regole della lista di sicurezza o perché l'endpoint API Kubernetes e/o i nodi di lavoro si trovano in una subnet privata. In questi casi, puoi impostare i bastion nel servizio Oracle Cloud Infrastructure Bastion per fornire un accesso sicuro all'endpoint API Kubernetes e/o ai nodi di lavoro.

L'impostazione dei bastion e delle sessioni bastion comporta una serie di task diversi. A seconda dell'organizzazione, questi task possono essere eseguiti dalla stessa persona o da persone diverse, come indicato di seguito.

  • Un amministratore della VCN è responsabile della creazione della VCN, delle subnet e delle regole di sicurezza per un cluster Kubernetes e un bastion. I criteri IAM consentono all'amministratore della VCN di gestire la VCN.
  • Un amministratore del cluster è responsabile della creazione dei bastion per accedere agli endpoint API Kubernetes e ai nodi di lavoro, nonché per la creazione di sessioni bastion per l'accesso ai nodi di lavoro. I criteri IAM consentono all'amministratore del cluster di gestire cluster e bastion.
  • Un utente cluster è responsabile della creazione di sessioni bastion per accedere agli endpoint API Kubernetes. I criteri IAM consentono all'utente del cluster di utilizzare i cluster e i bastion.

Questo diagramma mostra una configurazione cluster di esempio con un bastion che fornisce accesso sicuro all'endpoint API Kubernetes e ai nodi di lavoro di un cluster.

Questa immagine mostra una configurazione cluster di esempio con una subnet dell'endpoint API Kubernetes, una subnet del nodo di lavoro e subnet del load balancer. L'accesso alle subnet è controllato rispettivamente dalle liste di sicurezza seclist-KubernetesAPIendpoint, seclist-workernodes e seclist-loadbalancers. La subnet dell'endpoint API Kubernetes è connessa al piano di controllo del cluster da una VNIC. Un bastion in una subnet bastion fornisce l'accesso SSH all'endpoint API Kubernetes e ai nodi di lavoro del cluster. Le altre funzioni di questa configurazione di esempio sono descritte nel testo circostante.

Criteri IAM necessari per creare e utilizzare i bastion per accedere ai cluster

Per informazioni sui criteri IAM necessari per creare bastion e sessioni bastion, vedere Criteri bastion.

Se lo si desidera, gli amministratori del cluster possono anche impostare i criteri IAM per limitare le risorse a cui gli utenti del cluster possono accedere utilizzando un bastion. Vedere Impostazione dei criteri IAM per limitare l'uso dei bastion.

Impostazione di un bastion per accedere all'endpoint API Kubernetes

Affinché gli utenti del cluster possano accedere all'endpoint API Kubernetes privato di un cluster, gli amministratori VCN, gli amministratori del cluster e gli utenti del cluster devono eseguire ognuno una serie di passi, come descritto in questa sezione.

Procedure dell'amministratore VCN

L'amministratore della VCN deve attenersi alla procedura riportata di seguito per impostare le regole di sicurezza di uscita e entrata in modo da consentire a un bastion di accedere all'endpoint API Kubernetes.

  1. Creare una nuova subnet privata per ospitare il bastion nella stessa VCN del cluster a cui si desidera fornire l'accesso.

    Tenere presente che se è già stata creata una subnet per ospitare un bastion per accedere ai nodi di lavoro, è possibile riutilizzare tale subnet anziché creare una nuova subnet. Vedere Impostazione di un bastion per fornire l'accesso SSH ai nodi gestiti.

  2. Aggiungere la regola di sicurezza di uscita TCP/6443 seguente alla lista di sicurezza associata alla subnet del bastion.

    Questa regola di sicurezza di uscita consente il traffico dalla subnet bastion alla subnet dell'endpoint API Kubernetes del cluster.

    Stato: Destinazione Protocollo/destinazione Porta Descrizione:
    Con conservazione dello stato CIDR endpoint API Kubernetes (ad esempio, 10.0.0.0/29) TCP/6443 Consenti bastion alla comunicazione dell'endpoint API Kubernetes.
  3. Se non è già presente, aggiungere la seguente regola di sicurezza in entrata TCP/6443 a una lista di sicurezza nuova o esistente associata alla subnet che ospita l'endpoint API Kubernetes.

    Questa regola di sicurezza in entrata consente il traffico nella subnet dell'endpoint API Kubernetes dalla subnet bastion.

    Stato: Origine Protocollo/destinazione Porta Descrizione:
    Con conservazione dello stato CIDR subnet bastion TCP/6443 Consenti bastion alla comunicazione dell'endpoint API Kubernetes.
    Nota

    Sebbene non sia la progettazione preferita da Oracle, puoi utilizzare la stessa subnet sia per il bastion che per l'endpoint API Kubernetes del cluster. In questo caso, aggiungere la regola di sicurezza di uscita TCP/6443 alla lista di sicurezza associata alla subnet dell'endpoint API Kubernetes.

Procedure dell'amministratore cluster

In qualità di amministratore del cluster, attenersi alla procedura riportata di seguito per impostare un bastion per accedere all'endpoint API Kubernetes.

  1. Creare un bastion come indicato di seguito.
    1. Nella console aprire il menu di navigazione e fare clic su Identità e sicurezza.
    2. Fare clic su Bastion.
    3. Nella pagina Bastion fare clic su Crea bastion.
    4. Nella finestra di dialogo Crea bastion impostare le proprietà riportate di seguito.
      • Nome bastion: un nome per il bastion. Evitare di inserire informazioni riservate. Sono supportati solo caratteri alfanumerici.
      • Rete cloud virtuale di destinazione: specificare la VCN del cluster Kubernetes a cui si desidera fornire l'accesso.
      • Subnet di destinazione: subnet che funge da host del bastion, con le regole di sicurezza in entrata e in uscita impostate.
      • Lista di inclusione blocchi CIDR: uno o più intervalli di indirizzi nella notazione CIDR per i quali si desidera consentire la connessione alle sessioni ospitate da questo bastion. Ad esempio, 0.0.0.0/0 per consentire l'accesso da Internet o un intervallo di indirizzi più limitato. ad esempio 203.0.113.0/24.
    5. (Facoltativo) Per modificare il periodo di tempo massimo durante il quale una sessione di questo bastion può rimanere attiva, fare clic su Mostra opzioni avanzate, quindi immettere un valore per Tempo massimo di attivazione sessione.
    6. Fare clic su Crea bastion.
    7. Una volta creato il bastion, fare clic sul nome del bastion per visualizzare le relative informazioni, incluso il relativo OCID.

    Per ulteriori informazioni sulla creazione di un bastion, vedere Per creare un bastion.

  2. Fornire agli utenti del cluster l'OCID del bastion.
  3. Assicurarsi che siano disponibili criteri IAM appropriati per autorizzare gli utenti del cluster a utilizzare il bastion. Vedere Criteri IAM obbligatori per la creazione e l'uso dei bastion per accedere ai cluster.

    Se lo si desidera, è inoltre possibile impostare i criteri IAM per limitare le risorse alle quali gli utenti del cluster possono accedere utilizzando il bastion. Vedere Impostazione dei criteri IAM per limitare l'uso dei bastion.

Procedura per gli utenti cluster

Gli utenti cluster possono eseguire i passi riportati di seguito per creare una sessione bastion per accedere all'endpoint API Kubernetes.

  1. Se non lo si è già fatto, creare il file kubeconfig per il cluster a cui si desidera accedere, eseguendo:
    oci ce cluster create-kubeconfig \
      --cluster-id <cluster OCID> \
      --file $HOME/.kube/config \
      --region <region> \
      --token-version 2.0.0
    
  2. Modificare il file kubeconfig del cluster e modificare l'indirizzo IP specificato per server per specificare l'indirizzo IP e la porta su cui ascoltare il traffico SSH:
    1. Cercare la riga:
      server: https://x.x.x.x:6443
    2. Cambiare la linea in:
      server: https://127.0.0.1:6443

      Ad esempio:

      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority-data:______
          server: https://127.0.0.1:6443
      - name: cluster-xxxxxxx
      …
      
  3. Creare una sessione bastion utilizzando la console o l'interfaccia CLI come indicato di seguito.

    Utilizzo di Console
    1. Nella pagina Bastion fare clic sul nome del bastion creato dall'amministratore del cluster.
    2. Nella pagina Sessioni fare clic su Crea sessione.
    3. Nella finestra di dialogo Crea sessione impostare le proprietà riportate di seguito.
      • Tipo di sessione: selezionare Sessione di inoltro porta SSH.
      • Nome sessione: un nome visualizzato per la nuova sessione. Evitare di inserire informazioni riservate.
      • Connettersi all'host di destinazione utilizzando: selezionare indirizzo IP.
      • Indirizzo IP: specificare la parte dell'indirizzo IP dell'endpoint privato API Kubernetes del cluster (visualizzata nella pagina Dettagli cluster).
      • Porta: specificare la parte porta dell'endpoint privato API Kubernetes del cluster (visualizzata nella pagina Dettagli cluster). ad esempio 6443.
      • Chiave SSH: specificare il file della chiave pubblica di una coppia di chiavi SSH esistente che si desidera utilizzare per la sessione oppure generare una nuova coppia di chiavi SSH e salvare la chiave privata.
    4. (Facoltativo) Per modificare il periodo di tempo massimo durante il quale la sessione può rimanere attiva, fare clic su Mostra opzioni avanzate, quindi immettere un valore per Tempo massimo di attivazione sessione.
    5. Fare clic su Crea sessione.
    Uso dell'interfaccia CLI
    oci bastion session create-port-forwarding \
     --bastion-id <bastion OCID> \
     --ssh-public-key-file <ssh public key> \
     --target-private-ip <API Private IP endpoint> \
     --target-port 6443
    

    Per ulteriori informazioni sulla creazione di una sessione bastion, vedere Per creare una sessione.

  4. Ottenere il comando per creare un tunnel SSH utilizzando la console o l'interfaccia CLI come indicato di seguito.

    Uso della console

    Nella pagina Sessioni selezionare Copia comando SSH nel menu Azioni Menu Azioni accanto alla sessione appena creata.

    Uso dell'interfaccia CLI
    oci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'

    Il comando tunnel SSH ottenuto ha il seguente formato:

    ssh -i <privateKey> -N -L <localPort>:<session-IP>:<session-port> -p 22 <session-ocid>

    Dove:

    • <session-IP>:<session-port> indica l'indirizzo IP e il numero di porta dell'endpoint API Kubernetes specificato durante la creazione della sessione bastion. Ad esempio, 10.0.0.6:6443.
    • <session-ocid> è l'OCID della sessione bastion creata.
  5. Eseguire il comando per creare il tunnel SSH su una workstation locale o in Cloud Shell, come indicato di seguito.
    1. Modificare il comando tunnel SSH ottenuto come indicato di seguito.

      • Sostituire <privateKey> con il percorso del file che contiene la chiave privata della coppia di chiavi SSH specificata per la sessione. Ad esempio, /home/johndoe/.ssh/id_rsa
      • Sostituire <localPort> con 6443 o con una porta libera nel sistema (una workstation locale se la rete è sottoposta a peering con la VCN del cluster o Cloud Shell)
      • Aggiungere & alla fine del comando per eseguire il comando in background.
    2. Eseguire il comando tunnel SSH modificato su una workstation locale o nella finestra Cloud Shell.

      Ad esempio:

      ssh -i /home/johndoe/.ssh/id_rsa -N -L 6443:10.0.0.6:6443 -p 22 ocid1.bastionsession_______oraclecloud.com &

Ora è possibile eseguire le operazioni kubectl sul cluster fino al timeout del tunnel SSH o della sessione bastion.

Impostazione di un bastion per fornire l'accesso SSH ai nodi gestiti

Affinché gli utenti del cluster dispongano dell'accesso SSH ai nodi gestiti, gli amministratori VCN, gli amministratori del cluster e gli utenti del cluster devono eseguire ognuno una serie di passi, come descritto in questa sezione.

Procedure dell'amministratore VCN

L'amministratore della VCN deve attenersi alla procedura riportata di seguito per impostare le regole di sicurezza di uscita e entrata in modo da consentire a un bastion di fornire l'accesso SSH ai nodi gestiti.

  1. Creare una nuova subnet per ospitare il bastion nella stessa VCN del cluster a cui si desidera fornire l'accesso.

    Tenere presente che se hai già creato una subnet per ospitare un bastion e accedere all'endpoint API Kubernetes, puoi riutilizzare tale subnet invece di creare una nuova subnet. Vedere Impostazione di un bastion per accedere all'endpoint API Kubernetes.

  2. Aggiungere la regola di sicurezza di uscita TCP/22 seguente alla lista di sicurezza associata alla subnet del bastion.

    Questa regola di sicurezza di uscita consente il traffico dalla subnet bastion alla subnet dei nodi di lavoro.

    Stato: Destinazione Protocollo/destinazione Porta Descrizione:
    Con conservazione dello stato CIDR nodi di lavoro (ad esempio, 10.0.1.0/24) TCP/22 Consente la comunicazione tra bastion e nodi di lavoro.
  3. Se non è già presente, aggiungere la seguente regola di sicurezza in entrata TCP/22 a una lista di sicurezza nuova o esistente associata alla subnet che ospita i nodi di lavoro.

    Questa regola di sicurezza in entrata consente il traffico nella subnet del nodo di lavoro dalla subnet del bastion.

    Stato: Origine Protocollo/destinazione Porta Descrizione:
    Con conservazione dello stato CIDR subnet bastion TCP/22 Consente la comunicazione tra bastion e nodi di lavoro.
    Nota

    Sebbene non sia la progettazione preferita da Oracle, puoi utilizzare la stessa subnet sia per il bastion che per i nodi di lavoro. In questo caso, aggiungere la regola di sicurezza di uscita TCP/22 alla lista di sicurezza associata alla subnet del nodo di lavoro.

Procedure dell'amministratore cluster

In qualità di amministratore del cluster, effettuare le operazioni riportate di seguito per impostare un bastion per fornire l'accesso SSH ai nodi gestiti.

  1. Abilitare l'agente bastion sul nodo di lavoro a cui si desidera connettersi tramite SSH come indicato di seguito.
    1. Aprire il menu di navigazione e selezionare Developer Services. In Container e artifact, selezionare Cluster Kubernetes (OKE).
    2. Nella pagina Elenco cluster, fare clic sul nome del cluster contenente il nodo di lavoro al quale si desidera connettersi.
    3. In Risorse, fare clic su Pool di nodi e fare clic sul nome del pool di nodi contenente il nodo di lavoro al quale si desidera connettersi.
    4. In Risorse, fare clic su Nodi e fare clic sul nome del nodo di lavoro a cui si desidera connettersi.
    5. Nella pagina Dettagli istanza, visualizzare la scheda Agente Oracle Cloud e attivare/disattivare il plugin Abilitato Bastion.

      Per rendere effettiva la modifica possono richiedere fino a 10 minuti.

    6. Attendere che il stato del plugin Bastion venga visualizzato come In esecuzione prima di continuare con il passo successivo.
  2. Creare un bastion come indicato di seguito.
    1. Aprire il menu di navigazione e fare clic su Identità e sicurezza.
    2. Fare clic su Bastion.
    3. Nella pagina Bastion fare clic su Crea bastion.
    4. Nella finestra di dialogo Crea bastion impostare le proprietà riportate di seguito.
      • Nome bastion: un nome per il bastion. Evitare di inserire informazioni riservate. Sono supportati solo caratteri alfanumerici.
      • Rete cloud virtuale di destinazione: specificare la VCN del cluster Kubernetes a cui si desidera fornire l'accesso.
      • Subnet di destinazione: subnet che funge da host del bastion, con le regole di sicurezza in entrata e in uscita impostate.
      • Lista di inclusione blocchi CIDR: uno o più intervalli di indirizzi nella notazione CIDR per i quali si desidera consentire la connessione alle sessioni ospitate da questo bastion. Ad esempio, 0.0.0.0/0 per consentire l'accesso da Internet o un intervallo di indirizzi più limitato. ad esempio 203.0.113.0/24.
    5. (Facoltativo) Per modificare il periodo di tempo massimo durante il quale una sessione di questo bastion può rimanere attiva, fare clic su Mostra opzioni avanzate, quindi immettere un valore per Tempo massimo di attivazione sessione.
    6. Fare clic su Crea bastion.
    7. Una volta creato il bastion, fare clic sul nome del bastion per visualizzare le relative informazioni, incluso il relativo OCID.

    Per ulteriori informazioni sulla creazione di un bastion, vedere Per creare un bastion.

  3. Fornire agli utenti del cluster l'OCID del bastion.
  4. Assicurarsi che siano disponibili criteri IAM appropriati per autorizzare gli utenti del cluster a utilizzare il bastion. Vedere Criteri IAM obbligatori per la creazione e l'uso dei bastion per accedere ai cluster.

    Se lo si desidera, è inoltre possibile impostare i criteri IAM per limitare le risorse alle quali gli utenti del cluster possono accedere utilizzando il bastion. Vedere Impostazione dei criteri IAM per limitare l'uso dei bastion.

Procedura per gli utenti cluster

Gli utenti cluster possono eseguire i passi riportati di seguito per creare una sessione bastion per fornire l'accesso SSH ai nodi gestiti.

  1. Creare una sessione bastion utilizzando la console o l'interfaccia CLI come indicato di seguito.

    Uso dell'interfaccia CLI
    1. Nella pagina Bastion fare clic sul nome del bastion creato dall'amministratore del cluster.
    2. Nella pagina Sessioni fare clic su Crea sessione.
    3. Nella finestra di dialogo Crea sessione impostare le proprietà riportate di seguito.
      • Tipo di sessione: selezionare Sessione SSH gestita.
      • Nome sessione: un nome visualizzato per la nuova sessione. Evitare di inserire informazioni riservate.
      • Nome utente: immettere opc.
      • Istanza di computazione in <compartment name>: selezionare il nome dell'istanza di computazione del nodo di lavoro dalla lista delle istanze di computazione nel compartimento. Se necessario, modificare il compartimento per trovare l'istanza. Vengono elencate solo le istanze attive.
      • Chiave SSH: specificare il file della chiave pubblica di una coppia di chiavi SSH esistente che si desidera utilizzare per la sessione oppure generare una nuova coppia di chiavi SSH e salvare la chiave privata.
    4. (Facoltativo) Per modificare il periodo di tempo massimo durante il quale la sessione può rimanere attiva, fare clic su Mostra opzioni avanzate, quindi immettere un valore per Tempo massimo di attivazione sessione.

      Si noti che non si modifica il valore predefinito nel campo Porta istanza di computazione di destinazione (la porta predefinita è già impostata su 22). Inoltre, non specificare gli indirizzi IP nel campo Indirizzo IP dell'istanza di computazione di destinazione perché le istanze di computazione sono già state selezionate.

    5. Fare clic su Crea sessione.
    Uso dell'interfaccia CLI
    oci bastion session create-managed-ssh \
      --bastion-id <bastion OCID> \
      --ssh-public-key-file <ssh public key> \
      --target-resource-id <worker node instance OCID> \
      --target-os-username <instance_username>

    Per ulteriori informazioni sulla creazione di una sessione bastion, vedere Per creare una sessione.

  2. Ottenere il comando per creare un tunnel SSH utilizzando la console o l'interfaccia CLI come indicato di seguito.

    Uso della console

    Nella pagina Sessioni selezionare Copia comando SSH nel menu Azioni Menu Azioni accanto alla sessione appena creata.

    Uso dell'interfaccia CLI
    oci bastion session get --session-id <session OCID> | jq '.data."ssh-metadata".command'

    Il comando tunnel SSH ottenuto ha il seguente formato:

    ssh -i <privateKey> -o ProxyCommand="ssh -i <privateKey> -W %h:%p -p 22 <session-ocid>" -p 22 opc@<node-private-ip>

    Dove:

    • <session-ocid> è l'OCID della sessione bastion creata.
    • <node-private-ip> è l'indirizzo IP privato del nodo di lavoro specificato durante la creazione della sessione bastion. Ad esempio: 10.0.10.99.
  3. Eseguire il comando per creare il tunnel SSH su una workstation locale o in Cloud Shell, come indicato di seguito.
    1. Modificare il comando tunnel SSH ottenuto come indicato di seguito.

      • Sostituire <privateKey> con il percorso del file che contiene la chiave privata della coppia di chiavi SSH specificata per la sessione. Ad esempio, /home/johndoe/.ssh/id_rsa
      • Aggiungere & alla fine del comando per eseguire il comando in background.
    2. Eseguire il comando tunnel SSH modificato su una workstation locale o nella finestra Cloud Shell.

      Ad esempio:

      ssh -i /home/johndoe/.ssh/id_rsa -o ProxyCommand="ssh -i /home/johndoe/.ssh/id_rsa -W %h:%p -p 22 ocid1.bastionsession_______oraclecloud.com" -p 22 opc@10.0.10.99 &

Ora è possibile eseguire operazioni sui nodi di lavoro fino al timeout del tunnel SSH o della sessione bastion.

Impostazione dei criteri IAM per limitare l'uso dei bastion

Gli amministratori del cluster possono impostare i criteri IAM per limitare le risorse alle quali gli utenti del cluster possono accedere utilizzando un bastion. Ad esempio, un requisito comune consiste nel limitare gli utenti del cluster all'uso di un bastion per accedere solo all'endpoint API Kubernetes di un cluster, anziché essere anche in grado di accedere ai nodi di lavoro tramite SSH.

Il criterio di esempio riportato di seguito consente agli utenti del gruppo cluster-users di creare, connettersi e arrestare le sessioni bastion per gli endpoint API Kubernetes (nella subnet 10.0.0.11/32, sulla porta 6443) solo nel compartimento ABC:

Allow group cluster-users to use bastion in compartment ABC 
Allow group cluster-users to manage bastion-session in compartment ABC where ALL {target.bastion.ocid='ocid1.bastion.xxx', target.bastion-session.type='port_forwarding', target.bastion-session.ip in ['10.0.0.11/32'], target.bastion-session.port='6443'}
Allow group cluster-users to read vcn in compartment ABC
Allow group cluster-users to read subnet in compartment ABC

L'esempio presuppone:

  • Un bastion è già stato creato.
  • Le reti e i nodi di lavoro si trovano nello stesso compartimento del bastion.
  • L'accesso alla rete deve essere impostato sul valore minimo richiesto.