IBM Cloud Docs
Impostazione della connettività VPN classica

Impostazione della connettività VPN classica

Queste informazioni sulla VPN sono specifiche per i cluster classici. Per le informazioni sulla VPN per i cluster VPC, vedi Configurazione della connettività VPN VPC.

Con la connettività VPN, puoi collegare in modo sicuro le applicazioni di un cluster Kubernetes su IBM Cloud® Kubernetes Service a una rete in loco. Puoi anche connettere le applicazioni esterne al tuo cluster a un'applicazione in esecuzione nel tuo cluster.

Per collegare i tuoi nodi di lavoro e applicazioni a un data center in loco, puoi configurare una delle seguenti opzioni.

  • strongSwan IPSec VPN Servizio: È possibile impostare un servizio strongSwan IPSec VPN che connetta in modo sicuro il cluster Kubernetes con una rete on-premises. Il servizio VPN strongSwan IPSec fornisce un canale di comunicazione end-to-end sicuro su internet che si basa sulla suite di protocolli standard del settore Internet Protocol Security (IPSec). Per configurare una connessione protetta tra il tuo cluster e una rete in loco, configura e distribuisci il servizio VPN IPSec strongSwan direttamente in un pod nel tuo cluster.

  • IBM Cloud® Direct Link: IBM Cloud Direct Link ti consente di creare una connessione privata diretta tra i tuoi ambienti di rete remota e IBM Cloud Kubernetes Service senza instradamento su internet pubblico. Le offerte IBM Cloud Direct Link sono utili quando devi implementare carichi di lavoro ibridi, carichi di lavoro tra provider, trasferimenti di dati di grandi dimensioni o frequenti oppure carichi di lavoro privati. Per scegliere un'offerta IBM Cloud Direct Link e configurare una connessione IBM Cloud Direct Link, vedi Introduzione a IBM Cloud IBM Cloud Direct Link nella documentazione di IBM Cloud Direct Link.

  • Virtual Router Appliance (VRA): puoi scegliere di configurare una VRA(Vyatta) per configurare un endpoint IPSec VPN. Questa opzione è utile quando hai un cluster più grande, vuoi accedere a più cluster su una singola VPN o hai bisogno di una VPN basata sugli instradamenti. Per configurare una VRA, vedi Configurazione della connettività VPN con VRA.

Se si prevede di collegare il cluster a reti on-premises, si consiglia di verificare le seguenti funzioni utili.

  • Potresti avere dei conflitti di sottorete con l'intervallo 172.30.0.0/16 predefinito fornito da IBM per i pod e l'intervallo 172.21.0.0/16 per i servizi. È possibile evitare i conflitti di subnet quando si crea un cluster dalla CLI specificando una subnet CIDR personalizzata per i pod nell'opzione --pod-subnet e una subnet CIDR personalizzata per i servizi nell'opzione --service-subnet.

  • Se la tua soluzione VPN preserva gli indirizzi IP di origine delle richieste, puoi creare degli instradamenti statici personalizzati per garantire che i tuoi nodi di lavoro possano instradare le risposte dal tuo cluster nuovamente alla tua rete in loco.

Gli intervalli di sottorete 172.16.0.0/16, 172.18.0.0/16, 172.19.0.0/16 e 172.20.0.0/16 non sono consentiti perché sono riservati per la funzionalità del piano di controllo IBM Cloud Kubernetes Service.

Utilizzo del grafico Helm del servizio VPN IPSec strongSwan

Utilizza un grafico Helm per configurare e distribuire il servizio VPN IPSec strongSwan all'interno di un pod Kubernetes.

Poiché strongSwan è integrato con il tuo cluster, non hai bisogno di un dispositivo gateway esterno. Quando viene stabilita la connettività VPN, i percorsi vengono configurati automaticamente su tutti i nodi worker del cluster. Questi instradamenti consentono una connettività a due vie tramite il tunnel VPN tra i pod su un qualsiasi nodo di lavoro e il sistema remoto. Ad esempio, il seguente diagramma mostra come un'applicazione in IBM Cloud Kubernetes Service possa comunicare con un server on-premises attraverso una connessione VPN strongSwan.

Flusso di traffico tra il tuo cluster e un data center in loco tramite la VPN strongSwan.
Flusso di traffico attraverso il servizio VPN strongSwan

  1. Un'applicazione nel tuo cluster, myapp, riceve una richiesta da un servizio Ingress o LoadBalancer e deve connettersi in modo sicuro alla tua rete in loco.

  2. La richiesta al data center in loco viene inoltrata al pod VPN strongSwan IPSec. L'indirizzo IP di destinazione viene utilizzato per determinare quali pacchetti di rete inviare al pod VPN strongSwan IPSec.

  3. La richiesta viene crittografata e inviata sul tunnel VPN nel data center in loco.

  4. La richiesta in entrata passa attraverso il firewall in loco e viene consegnata all'endpoint del tunnel VPN (router) in cui viene decrittografata.

  5. L'endpoint del tunnel VPN (router) inoltra la richiesta al server in loco o al mainframe, a seconda dell'indirizzo IP di destinazione specificato nel passo 2. I dati necessari vengono inviati di nuovo tramite la connessione VPN a myapp attraverso lo stesso processo.

Considerazioni sul servizio VPN strongSwan

Prima di utilizzare il grafico Helm strongSwan, esamina le considerazioni e le limitazioni riportate di seguito.

  • Il grafico strongSwan Helm è supportato solo per i cluster classici e non per i cluster VPC. Per le informazioni sulla VPN per i cluster VPC, vedi Configurazione della connettività VPN VPC.
  • Il grafico Helm strongSwan richiede che l'endpoint VPN remoto abiliti l'attraversamento NAT. L'attraversamento NAT richiede la porta UDP 4500 in aggiunta alla porta UDP IPSec predefinita 500. Entrambe le porte UDP devono essere consentite attraverso qualsiasi firewall configurato.
  • Il grafico Helm strongSwan non supporta le VPN IPSec basate sugli instradamenti.
  • Il grafico strongSwan Helm supporta le VPN IPSec che utilizzano chiavi pre-condivise, ma non supporta le VPN IPSec che richiedono certificati.
  • Il grafico Helm strongSwan non consente a più cluster e ad altre risorse IaaS di condividere una singola connessione VPN.
  • Il grafico Helm strongSwan viene eseguito come un pod Kubernetes all'interno del cluster. Le prestazioni della VPN sono influenzate dall'utilizzo della memoria e della rete di Kubernetes e di altri pod che sono in esecuzione nel cluster. Se hai un ambiente critico per le prestazioni, considera l'utilizzo di una soluzione VPN eseguita esternamente al cluster su hardware dedicato.
  • Il grafico Helm strongSwan esegue un singolo pod VPN come endpoint del tunnel IPSec. Se si verifica un malfunzionamento del pod, il cluster lo riavvia. Tuttavia, potrebbe verificarsi un breve periodo di inattività durante l'avvio del nuovo pod e il ripristino della connessione VPN. Se hai bisogno di un ripristino a seguito di un errore più rapido oppure una soluzione ad alta disponibilità più elaborata, considera l'utilizzo di una soluzione VPN eseguita esternamente al cluster su hardware dedicato.
  • Il grafico Helm strongSwan non fornisce le metriche o il monitoraggio del traffico di rete che transita sulla connessione VPN. Per un elenco degli strumenti di monitoraggio supportati, consulta Servizi di registrazione e monitoraggio.
  • Sono supportate solo le versioni del grafico strongSwan Helm rilasciate negli ultimi 6 mesi. Assicurati di aggiornare costantemente il tuo grafico strongSwan Helm per le funzioni e le correzioni di sicurezza più recenti.

Gli utenti del cluster possono utilizzare il servizio VPN strongSwan per connettersi al master Kubernetes attraverso l'endpoint del servizio di cloud privato. Tuttavia, la comunicazione con il master Kubernetes attraverso l'endpoint del servizio cloud privato deve passare attraverso l'intervallo di indirizzi IP 166.X.X.X, che non è instradabile da una connessione VPN. È possibile esporre l'endpoint del servizio cloud privato del master per gli utenti del cluster utilizzando un bilanciatore di carico di rete privato(NLB). L'NLB privato espone l'endpoint del servizio cloud privato del master come indirizzo IP interno del cluster 172.21.x.x a cui il pod VPN strongSwan può accedere. Se si abilita solo l'endpoint del servizio cloud privato, è possibile utilizzare la dashboard Kubernetes o abilitare temporaneamente l'endpoint del servizio cloud pubblico per creare l'NLB privato.

Configurazione della VPN strongSwan in un cluster multizona

I cluster multizona garantiscono un'elevata disponibilità delle applicazioni in caso di interruzione, rendendo disponibili le istanze delle applicazioni sui nodi worker di più zone. Tuttavia, la configurazione del servizio VPN strongSwan in un cluster multizona è più complessa della configurazione di strongSwan in un cluster a zona singola.

Prima di configurare strongSwan in un cluster multizona, prova a distribuire un grafico Helm strongSwan in un cluster a zona singola. Quando si stabilisce per la prima volta una connessione VPN tra un cluster a zona singola e una rete on-premises, è possibile determinare più facilmente le impostazioni del firewall della rete remota che sono importanti per una configurazione strongSwan multizona.

  • Alcuni endpoint VPN remoti hanno impostazioni quali leftid o rightid nel file ipsec.conf. Se hai queste impostazioni, controlla se devi impostare il leftid sull'indirizzo IP del tunnel IPSec VPN.
  • Se la connessione è in entrata al cluster dalla rete remota, controlla se l'endpoint VPN remoto può ristabilire la connessione VPN a un indirizzo IP differente in caso di malfunzionamento del programma di bilanciamento del carico in una zona.

Per iniziare con uno strongSwan in un cluster multizona, scegli una delle seguenti opzioni:

Prova a configurare il tuo ambiente in modo da aver bisogno solo di una singola distribuzione VPN strongSwan per una connessione VPN in uscita o in entrata al tuo cluster multizona. Se devi configurare delle VPN strongSwan separate in ciascuna zona, assicurati di pianificare come gestire questa complessità aggiunta e questo utilizzo di risorse aumentato.

Configurazione di una singola connessione VPN in uscita da un cluster multizona

La soluzione più semplice per configurare il servizio VPN strongSwan in un cluster multizona consiste nell'utilizzare una singola connessione VPN in uscita che fluttua tra diversi nodi di lavoro in tutte le zone di disponibilità nel tuo cluster.

Quando la connessione VPN è in uscita dal cluster multizona, è necessaria solo una singola distribuzione strongSwan. Se un nodo di lavoro viene rimosso o se riscontra dei tempi di inattività, kubelet ripianifica il pod VPN su un nuovo nodo di lavoro. Se una zona di disponibilità riscontra un'interruzione, kubelet ripianifica il pod VPN su un nuovo nodo di lavoro in una zona differente.

  1. Configura un grafico Helm VPN strongSwan. Quando si seguono i passi di questa sezione, assicurarsi di specificare le seguenti impostazioni.

    • ipsec.auto: modifica in start. Le connessioni sono in uscita dal cluster.
    • loadBalancerIP: non specificare un indirizzo IP. Lascia questa impostazione vuota.
    • zoneLoadBalancer: specifica un indirizzo IP di programma di bilanciamento del carico pubblico per ciascuna zona dove hai dei nodi di lavoro. Puoi verificare se visualizzare i tuoi indirizzi IP pubblici disponibili o liberare un indirizzo IP utilizzato. Poiché il pod VPN strongSwan può essere pianificato su un nodo di lavoro in qualsiasi zona, questo elenco di IP garantisce che possa essere utilizzato un IP di programma di bilanciamento del carico in qualsiasi zona dove è pianificato il pod VPN.
    • connectUsingLoadBalancerIP: imposta su true. Quando il pod VPN strongSwan è pianificato su un nodo di lavoro, il servizio strongSwan seleziona l'indirizzo IP del programma di bilanciamento del carico che si trova nella stessa zona e utilizza questo IP per stabilire la connessione in uscita.
    • local.id: specifica un valore fisso che è supportato dal tuo endpoint VPN remoto. Se l'endpoint VPN remoto richiede di impostare l'opzione local.id (valore leftid in ipsec.conf) sull'indirizzo IP pubblico del tunnel IPSec VPN, impostare local.id su %loadBalancerIP. Questo valore configura automaticamente il valore leftid in ipsec.conf all'indirizzo IP del programma di bilanciamento del carico utilizzato per la connessione.
    • Facoltativo: nascondere tutti gli indirizzi IP del cluster dietro un singolo indirizzo IP in ogni zona impostando enableSingleSourceIP su true. Questa opzione fornisce una delle configurazioni più sicure per la connessione VPN perché non è consentita alcuna connessione dalla rete remota che vada nuovamente nel cluster. Devi anche impostare local.subnet sulla variabile %zoneSubnet e utilizzare local.zoneSubnet per specificare un indirizzo IP come una sottorete /32 per ciascuna zona del cluster.
  2. Nel tuo firewall di rete remota, consenti le connessioni VPN IPSec in entrata dagli indirizzi IP pubblici che hai elencato nell'impostazione zoneLoadBalancer.

  3. Configura l'endpoint VPN remoto per consentire una connessione VPN in entrata da ciascuno dei possibili IP di programma di bilanciamento del carico che hai elencato nell'impostazione zoneLoadBalancer.

Configurazione d una singola connessione VPN in entrata da un cluster multizona

Quando hai bisogno di connessioni VPN in entrata e l'endpoint VPN remoto può ristabilire automaticamente la connessione VPN a un IP diverso quando viene rilevato un malfunzionamento, puoi utilizzare una singola connessione VPN in entrata che fluttua tra i diversi nodi di lavoro in tutte le zone di disponibilità nel tuo cluster.

L'endpoint VPN remoto può stabilire la connessione VPN a uno qualsiasi dei programmi di bilanciamento del carico strongSwan in una qualsiasi delle zone. La richiesta in entrata viene inviata al pod VPN indipendentemente da quale sia la zona in cui si trova il pod VPN. Le risposte dal pod VPN vengono restituite tramite il programma di bilanciamento del carico originale all'endpoint VPN remoto. Questa opzione garantisce l'alta disponibilità perché kubelet ripianifica il pod VPN su un nuovo nodo di lavoro, se un nodo di lavoro viene rimosso o se riscontra dei tempi di inattività. Inoltre, se una zona di disponibilità riscontra un'interruzione, l'endpoint VPN remoto può ristabilire la connessione VPN all'indirizzo IP del programma di bilanciamento del carico in una zona differente in modo che sia ancora possibile raggiungere il pod VPN.

  1. Configura un grafico Helm VPN strongSwan. Quando si seguono i passi di questa sezione, assicurarsi di specificare le seguenti impostazioni.

    • ipsec.auto: modifica in add. Le connessioni sono in entrata al cluster.
    • loadBalancerIP: non specificare un indirizzo IP. Lascia questa impostazione vuota.
    • zoneLoadBalancer: specifica un indirizzo IP di programma di bilanciamento del carico pubblico per ciascuna zona dove hai dei nodi di lavoro. Puoi verificare se visualizzare i tuoi indirizzi IP pubblici disponibili o liberare un indirizzo IP utilizzato.
    • local.id: se l'endpoint VPN remoto richiede di impostare l'opzione local.id (valore leftid in ipsec.conf) sull'indirizzo IP pubblico del tunnel IPSec VPN, impostare local.id su %loadBalancerIP. Questo valore configura automaticamente il valore leftid in ipsec.conf all'indirizzo IP del programma di bilanciamento del carico utilizzato per la connessione.
  2. Nel tuo firewall di rete remota, consenti le connessioni VPN IPSec in uscita agli indirizzi IP pubblici che hai elencato nell'impostazione zoneLoadBalancer.

Configurazione di una connessione VPN in entrata in ciascuna zona di un cluster multizona

Quando si richiedono connessioni VPN in entrata e l'endpoint VPN remoto non può ristabilire la connessione VPN a un IP diverso, è necessario distribuire un servizio VPN strongSwan separato in ogni zona.

L'endpoint VPN remoto deve essere aggiornato per stabilire una connessione VPN separata a un programma di bilanciamento del carico in ciascuna delle zone. Devi inoltre configurare le impostazioni specifiche per la zona sull'endpoint VPN remoto in modo che ciascuna di queste connessioni VPN sia univoca. Assicurarsi che queste connessioni VPN multiple in entrata rimangano attive.

Dopo che hai distribuito ciascun grafico Helm, ogni distribuzione VPN strongSwan viene avviata come un servizio di programma di bilanciamento del carico Kubernetes nella zona corretta. Le richieste in entrata a tale IP pubblico sono inoltrate al pod VPN che è anche allocato nella stessa zona. Se la zona riscontra un'interruzione, le connessioni VPN stabilite nelle altre zone non ne risentono.

  1. Configura un grafico Helm VPN strongSwan per ciascuna zona. Quando ti attieni alla procedura indicata in tale sezione, assicurati di specificare le seguenti impostazioni:

    • loadBalancerIP: specifica un indirizzo IP di programma di bilanciamento del carico pubblico disponibile che sia nella zona dove distribuisci questo servizio strongSwan. Puoi verificare se visualizzare i tuoi indirizzi IP pubblici disponibili o liberare un indirizzo IP utilizzato.
    • zoneSelector: specifica la zona dove desideri che sia pianificato il pod VPN.
    • Potrebbero essere necessarie delle ulteriori impostazioni, come zoneSpecificRoutes, remoteSubnetNAT, localSubnetNAT o enableSingleSourceIP, a seconda di quali siano le risorse che devono essere accessibili sulla VPN. Per ulteriori dettagli, vedi il prossimo passo.
  2. Configurare le impostazioni specifiche per la zona su entrambi i lati del tunnel VPN per garantire che ciascuna connessione VPN sia univoca. A seconda di quali risorse devono essere accessibili sulla VPN, disponi di due opzioni per rendere le connessioni distinguibili:

    • Se i pod del cluster devono accedere ai servizi della rete remota on-premises,
      • zoneSpecificRoutes: imposta su true. Questa impostazione limita la connessione VPN a una singola regione del cluster. I pod in una zona specifica utilizzano solo la connessione VPN configurata per quella specifica zona. Questa soluzione riduce il numero di pod strongSwan richiesti per supportare più VPN in un cluster multizona, migliora le prestazioni della VPN perché il traffico della VPN fluisce solo ai nodi di lavoro che si trovano nella zona corrente e assicura che la connettività VPN per ciascuna zona non sia influenzata dalla connettività VPN, dai pod per cui si è verificato un arresto anomalo o dalle interruzioni che si sono verificate in altre zone. Non è necessario configurare remoteSubnetNAT. Più VPN che utilizzano l'impostazione zoneSpecificRoutes possono avere la stessa sottorete remota (remote.subnet) perché l'instradamento è configurato in base a ogni singola zona.
      • enableSingleSourceIP: imposta su true e imposta la sottorete locale (local.subnet) su un singolo indirizzo IP /32. Questa combinazione di impostazioni nasconde tutti gli indirizzi IP privati del cluster dietro un singolo indirizzo IP /32. Questo indirizzo /32 univoco consente alla rete in loco remota di inviare risposte sulla connessione VPN corretta al pod corretto nel cluster che ha avviato la richiesta. Tieni presente che il singolo indirizzo IP /32 configurato per l'opzione (local.subnet) deve essere univoco in ciascuna configurazione VPN strongSwan.
    • Se le applicazioni della rete remota on-premises devono accedere ai servizi del cluster,
      • localSubnetNAT: assicurati che un'applicazione nella rete remota in loco possa selezionare una connessione VPN specifica per inviare e ricevere traffico nel cluster. In ciascuna configurazione Helm strongSwan, utilizza localSubnetNAT per identificare in modo univoco le risorse del cluster a cui può accedere l'applicazione in loco remota. Poiché vengono stabilite più VPN dalla rete remota on-premises al cluster, è necessario aggiungere una logica all'applicazione sulla rete on-premises in modo che possa selezionare quale VPN utilizzare quando accede ai servizi nel cluster. Tieni presente che i servizi nel cluster sono accessibili tramite molteplici sottoreti differenti, a seconda di quello che hai configurato per localSubnetNAT in ciascuna configurazione VPN strongSwan.
      • remoteSubnetNAT assicurati che un pod nel tuo cluster utilizzi la stessa connessione VPN per restituire il traffico alla rete remota. In ogni file di distribuzione strongSwan, associa la sottorete in loco remota a una sottorete univoca utilizzando l'impostazione remoteSubnetNAT. Il traffico che viene ricevuto da un pod nel cluster da una remoteSubnetNAT specifica per la VPN viene restituito alla stessa remoteSubnetNAT specifica per la VPN e quindi su quella stessa connessione VPN.
    • Se i pod nel cluster devono accedere ai servizi sulla rete in loco remota e le applicazioni nella rete in loco remota devono accedere ai servizi nel cluster, configurare le impostazioni localSubnetNAT e remoteSubnetNAT elencate nel secondo punto elenco. Nota che se un pod nel cluster avvia una richiesta alla rete in loco remota, devi aggiungere la logica al pod in modo che possa selezionare quale connessione VPN utilizzare per accedere ai servizi sulla rete in loco remota.
  3. Configura il software dell'endpoint VPN remoto per stabilire una connessione VPN separata al programma di bilanciamento del carico in ciascuna zona.

Configurazione del grafico Helm strongSwan

Prima di installare il grafico Helm strongSwan, devi decidere la configurazione di strongSwan.

Prima di iniziare

Passo 1: ottieni il grafico Helm strongSwan

Installa Helm e ottieni il grafico Helm strongSwan per visualizzare le possibili configurazioni.

  1. Segui le istruzioni per installare la versione 3 del client Helm sulla tua macchina locale.

  2. Salva le impostazioni di configurazione predefinite per il grafico Helm strongSwan in un file YAML locale.

    helm show values iks-charts/strongswan > config.yaml
    
  3. Apri il file config.yaml.

Passo 2: configura le impostazioni IPSec di base

Per controllare lo stabilimento della connessione VPN, modifica le seguenti impostazioni IPSec di base.

Per ulteriori informazioni su ciascuna impostazione, leggi la documentazione fornita nel file config.yaml per il grafico Helm.

  1. Se il tuo endpoint del tunnel VPN in loco non supporta ikev2 come protocollo per inizializzare la connessione, modifica il valore di ipsec.keyexchange in ikev1.
  2. Imposta ipsec.esp su un elenco degli algoritmi di autenticazione e crittografia ESP utilizzati dal tuo endpoint del tunnel VPN in loco per la connessione.
    • Se ipsec.keyexchange è impostata su ikev1, devi specificare questa impostazione.
    • Se ipsec.keyexchange è impostata su ikev2, questa impostazione è facoltativa.
    • Se lasci vuota questa impostazione, per la connessione vengono utilizzati gli algoritmi strongSwan aes128-sha1,3des-sha1 predefiniti.
  3. Imposta ipsec.ike su un elenco degli algoritmi di autenticazione e crittografia IKE/ISAKMP SA utilizzati dal tuo endpoint del tunnel VPN in loco per la connessione. Gli algoritmi devono essere specifici nel formato encryption-integrity[-prf]-dhgroup.
    • Se ipsec.keyexchange è impostata su ikev1, devi specificare questa impostazione.
    • Se ipsec.keyexchange è impostata su ikev2, questa impostazione è facoltativa.
    • Se lasci vuota questa impostazione, per la connessione vengono utilizzati gli algoritmi strongSwan aes128-sha1-modp2048,3des-sha1-modp1536 predefiniti.
  4. Modifica il valore di local.id in qualsiasi stringa che vuoi usare per identificare il lato cluster Kubernetes locale utilizzato dal tuo endpoint del tunnel VPN. Il valore predefinito è ibm-cloud. Alcune implementazioni VPN richiedono che tu utilizzi l'indirizzo IP pubblico per l'endpoint locale.
  5. Modifica il valore di remote.id in qualsiasi stringa che vuoi usare per identificare il lato in loco remoto utilizzato dal tuo endpoint del tunnel VPN. Il valore predefinito è on-prem. Alcune implementazioni VPN richiedono che tu utilizzi l'indirizzo IP pubblico per l'endpoint remoto.
  6. Modifica il valore di preshared.secret nel segreto precondiviso utilizzato dal tuo gateway dell'endpoint del tunnel VPN in loco per la connessione. Questo valore è memorizzato in ipsec.secrets.
  7. Facoltativo: imposta remote.privateIPtoPing su qualsiasi indirizzo IP privato nella sottorete remota di cui eseguire il ping come parte del test di convalida della connettività Helm.

Passo 3: seleziona la connessione VPN in entrata o in uscita

Quando configuri una connessione VPN strongSwan, scegli se la connessione VPN è in entrata al cluster o in uscita dal cluster.

In entrata
L'endpoint VPN in loco dalla rete remota avvia la connessione VPN e il cluster è in ascolto per la connessione.
In uscita
Il cluster avvia la connessione VPN e l'endpoint VPN in loco dalla rete remota è in ascolto per la connessione.

Per stabilire una connessione VPN in entrata, modificare le seguenti impostazioni.

  1. Verifica che ipsec.auto sia impostata su add.
  2. Facoltativo: imposta loadBalancerIP su un indirizzo IP pubblico portatile per il servizio VPN strongSwan. La specifica di un indirizzo IP è utile quando hai bisogno di un indirizzo IP stabile, ad esempio quando devi designare quali indirizzi IP sono consentiti attraverso un firewall in loco. Il cluster deve avere almeno un indirizzo IP del programma di bilanciamento del carico pubblico. Puoi verificare se visualizzare i tuoi indirizzi IP pubblici disponibili o liberare un indirizzo IP utilizzato.
    • Se lasci vuota questa impostazione, viene utilizzato uno degli indirizzi IP pubblici portatili disponibili.
    • Devi anche configurare l'indirizzo IP pubblico che selezioni per l'endpoint VPN, o l'indirizzo IP pubblico ad esso assegnato, sull'endpoint VPN in loco.

Per stabilire una connessione VPN in uscita, modificare le seguenti impostazioni.

  1. Modifica ipsec.auto in start.
  2. Imposta remote.gateway sull'indirizzo IP pubblico per l'endpoint VPN in loco nella rete remota.
  3. Scegli una delle seguenti opzioni per l'indirizzo IP per l'endpoint VPN del cluster:
    • Indirizzo IP pubblico del gateway privato del cluster: Se i nodi worker sono collegati solo a una VLAN privata, la richiesta VPN in uscita viene instradata attraverso il gateway privato per raggiungere Internet. L'indirizzo IP pubblico del gateway privato viene utilizzato per la connessione VPN.

    • Indirizzo IP pubblico del nodo di lavoro dove è in esecuzione il pod strongSwan: se il nodo di lavoro dove è in esecuzione il pod strongSwan è connesso a una VLAN pubblica, l'indirizzo IP pubblico del nodo di lavoro viene utilizzato per la connessione VPN.

      • Se il pod strongSwan viene eliminato e ripianificato su un nodo di lavoro differente nel cluster, l'indirizzo IP pubblico della VPN cambia. L'endpoint VPN in loco della rete remota deve consentire lo stabilimento della connessione VPN dall'indirizzo IP pubblico di uno qualsiasi dei nodi di lavoro del cluster.
      • Se l'endpoint VPN remoto non è in grado di gestire le connessioni VPN da più indirizzi IP pubblici, limitare i nodi a cui il pod VPN strongSwan viene distribuito. Imposta nodeSelector sugli indirizzi IP degli specifici nodi di lavoro o un'etichetta di nodo di lavoro. Ad esempio, il valore kubernetes.io/hostname: 10.232.xx.xx consente la distribuzione del pod VPN solo su tale nodo di lavoro. Il valore strongswan: vpn limita il pod VPN all'esecuzione su qualsiasi nodo di lavoro con quell'etichetta. Puoi utilizzare qualsiasi etichetta di nodo di lavoro. Per consentire l'utilizzo di diversi nodi worker con diverse distribuzioni di diagrammi di helm, utilizzare strongswan: <release_name>. Per l'alta disponibilità, seleziona almeno due nodi di lavoro.
    • Indirizzo IP pubblico del servizio strongSwan: per stabilire la connessione utilizzando l'indirizzo IP del servizio VPN strongSwan, imposta connectUsingLoadBalancerIP su true. L'indirizzo IP del servizio strongSwan è un indirizzo IP pubblico portatile che puoi specificare nell'impostazione loadBalancerIP oppure un indirizzo IP pubblico portatile disponibile che viene assegnato automaticamente al servizio.

      • Se scegli di selezionare un indirizzo IP utilizzando l'impostazione loadBalancerIP, il cluster deve avere almeno un indirizzo IP del programma di bilanciamento del carico pubblico disponibile. Puoi verificare se visualizzare i tuoi indirizzi IP pubblici disponibili o liberare un indirizzo IP utilizzato.
      • tutti i nodi worker del cluster devono trovarsi sulla stessa VLAN pubblica. In caso contrario, devi utilizzare l'impostazione nodeSelector per assicurarti che il pod VPN venga distribuito in un nodo di lavoro sulla stessa VLAN pubblica di loadBalancerIP.
      • Se connectUsingLoadBalancerIP è impostata su true e ipsec.keyexchange è impostata su ikev1, devi impostare enableServiceSourceIP su true.

Passo 4: accesso alle risorse del cluster sulla connessione VPN

Determina le risorse cluster che devono essere accessibili dalla rete remota sulla connessione VPN.

  1. Aggiungi i CIDR di una o più sottoreti del cluster all'impostazione local.subnet. Devi configurare i CIDR della sottorete locale sull'endpoint VPN in loco. Questo elenco può includere le seguenti sottoreti.

    • CIDR della sottorete del pod Kubernetes: 172.30.0.0/16. Le comunicazioni bidirezionali sono abilitate tra tutti i pod del cluster e uno qualsiasi degli host nelle sottoreti di rete remota che elenchi nell'impostazione remote.subnet. Se si deve impedire agli host remote.subnet di accedere ai pod del cluster per motivi di sicurezza, non aggiungere la subnet del pod Kubernetes all'impostazione local.subnet.
    • CIDR della sottorete del servizio Kubernetes: 172.21.0.0/16. Gli indirizzi IP del servizio forniscono un modo per esporre più pod dell'applicazione distribuiti su diversi nodi di lavoro dietro un singolo IP.
    • Se le tue applicazioni vengono esposte da un servizio NodePort sulla rete privata o un ALB Ingress privato, aggiungi il CIDR di sottorete privata del nodo di lavoro. Recuperate i primi tre ottetti dell'indirizzo IP privato del vostro lavoratore eseguendo ibmcloud ks worker <cluster_name>. Ad esempio, se è 10.176.48.xx, prendi nota di 10.176.48. Quindi, ottenere il CIDR della sottorete privata del lavoratore eseguendo il seguente comando, sostituendo <xxx.yyy.zz> con l'ottetto recuperato in precedenza: ibmcloud sl subnet list | grep <xxx.yyy.zzz>. Nota: se un nodo di lavoro viene aggiunto a una nuova sottorete privata, devi aggiungere il nuovo CIDR della sottorete privata sia all'impostazione local.subnet che all'endpoint VPN in loco. Bisogna quindi riavviare la connessione VPN.
    • Se hai delle applicazioni esposte dai servizi LoadBalancer sulla rete privata, aggiungi i CIDR della sottorete gestita dall'utente privata del cluster. Per trovare questi valori, eseguire ibmcloud ks cluster get --cluster <cluster_name> --show-resources. Nella sezione VLAN, ricerca i CIDR che hanno un valore Pubblico di false. Nota: se ipsec.keyexchange è impostata su ikev1, puoi specificare solo una sottorete. Puoi tuttavia utilizzare l'impostazione localSubnetNAT per combinare più sottoreti del cluster in una singola sottorete.
  2. Facoltativo: riassocia le sottoreti del cluster utilizzando l'impostazione localSubnetNAT. NAT (Network Address Translation) per le sottoreti fornisce una soluzione temporanea per i conflitti di sottorete tra la rete del cluster e la rete remota in loco. Puoi utilizzare NAT per riassociare le sottoreti IP locali private del cluster, la sottorete del pod (172.30.0.0/16) o la sottorete del servizio pod (172.21.0.0/16) a una sottorete privata diversa. Il tunnel VPN vede le sottoreti IP riassociate invece delle sottoreti originali. La riassociazione avviene prima che i pacchetti vengano inviati attraverso il tunnel VPN e dopo che i pacchetti arrivano dal tunnel VPN. Puoi esporre contemporaneamente entrambe le sottoreti riassociate e non riassociate sulla VPN. Per abilitare NAT, puoi aggiungere un'intera sottorete o singoli indirizzi IP.

    • Se si aggiunge un'intera sottorete nel formato 10.171.42.0/24=10.10.10.0/24, la rimappatura è 1-to-1: tutti gli indirizzi IP della sottorete interna sono mappati sulla sottorete esterna e viceversa.
    • Se aggiungi singoli indirizzi IP nel formato 10.171.42.17/32=10.10.10.2/32,10.171.42.29/32=10.10.10.3/32, solo quegli indirizzi IP interni vengono associati agli indirizzi IP esterni specificati.
  3. Opzionale per la versione 2.2.0 e successive strongSwan Helm grafici: nascondere tutti gli indirizzi IP del cluster dietro un singolo indirizzo IP impostando enableSingleSourceIP su true. Questa opzione fornisce una delle configurazioni più sicure per la connessione VPN perché non è consentita alcuna connessione dalla rete remota che vada nuovamente nel cluster.

    • Questa impostazione richiede che tutto il flusso di dati sulla connessione VPN sia in uscita indipendentemente dal fatto che la connessione VPN sia stabilita dal cluster o dalla rete remota.
    • Se installi strongSwan in un cluster a zona singola, devi impostare local.subnet su solo un singolo indirizzo IP come una sottorete /32. Se installi strongSwan in un cluster multizona, puoi impostare local.subnet sulla variabile %zoneSubnet e utilizzare local.zoneSubnet per specificare un indirizzo IP come una sottorete /32 per ciascuna zona del cluster.
  4. Facoltativo per i grafici Helm strongSwan versione 2.2.0 e successive: abilita il servizio strongSwan per instradare le richieste in entrata dalla rete remota al servizio che esiste esternamente al cluster utilizzando impostazione localNonClusterSubnet.

    • Il servizio non cluster deve esistere sulla stessa rete privata o su una rete privata che sia raggiungibile dai nodi di lavoro.
    • Il nodo worker non cluster non può avviare il traffico verso la rete remota attraverso la connessione VPN, ma il nodo non cluster può essere il destinatario delle richieste in arrivo dalla rete remota.
    • Devi elencare i CIDR delle sottoreti non cluster nell'impostazione local.subnet.

Passo 5: accesso alle risorse di rete remota sulla connessione VPN

Determina quali risorse di rete remota devono essere accessibili dal cluster sulla connessione VPN.

  1. Aggiungi i CIDR di una o più sottoreti private in loco all'impostazione remote.subnet. Nota: se ipsec.keyexchange è impostata su ikev1, puoi specificare solo una sottorete.
  2. Facoltativo per i grafici Helm strongSwan versione 2.2.0 e successive: riassocia le sottoreti di rete remota utilizzando l'impostazione remoteSubnetNAT. NAT (Network Address Translation) per le sottoreti fornisce una soluzione temporanea per i conflitti di sottorete tra la rete del cluster e la rete remota in loco. Puoi utilizzare NAT per riassociare le sottoreti IP della rete remota a una sottorete privata differente. La riassociazione avviene prima che i pacchetti vengano inviati attraverso il tunnel VPN. I pod nel cluster vedono le sottoreti IP riassociate invece delle sottoreti originali. Prima che i pod ritrasmettano i dati attraverso il tunnel VPN, la sottorete IP riassociata viene riportata alla sottorete effettiva utilizzata dalla rete remota. Puoi esporre contemporaneamente entrambe le sottoreti riassociate e non riassociate sulla VPN.

Passo 6 (facoltativo): abilita il monitoraggio con l'integrazione del webhook Slack

Per monitorare lo stato della VPN strongSwan, puoi configurare un webhook per pubblicare automaticamente messaggi di connettività VPN in un canale Slack.

  1. Accedi al tuo spazio di lavoro Slack.

  2. Andare alla pagina dell'app WebHooks.

  3. Fai clic su Request to Install. Se questa applicazione non è elencata nella tua configurazione Slack, contatta il proprietario del tuo spazio di lavoro Slack.

  4. Una volta approvata la tua richiesta di installazione, fai clic su Add Configuration.

  5. Scegli un canale Slack o crea un nuovo canale in cui inviare i messaggi VPN.

  6. Copia l'URL webhook che viene generato. Il formato dell'URL è simile al seguente:

    https://hooks.slack.com/services/A1AA11A1A/AAA1AAA1A/a1aaaaAAAaAaAAAaaaaaAaAA
    
  7. Per verificare che il webhook Slack sia installato, invia un messaggio di prova al tuo URL webhook eseguendo questo comando:

    curl -X POST -H 'Content-type: application/json' -d '{"text":"VPN test message"}' <webhook_URL>
    
  8. Vai al canale Slack che hai scelto per verificare che il messaggio di prova abbia esito positivo.

  9. Nel file config.yaml relativo al grafico Helm, configura il webhook per monitorare la tua connessione VPN.

    1. Modifica monitoring.enable in true.
    2. Aggiungi gli indirizzi IP privati o gli endpoint HTTP nella sottorete remota che vuoi che siano sempre raggiungibili tramite la connessione VPN a monitoring.privateIPs o monitoring.httpEndpoints. Ad esempio, potresti aggiungere l'IP dall'impostazione remote.privateIPtoPing a monitoring.privateIPs.
    3. Aggiungi l'URL webhook a monitoring.slackWebhook.
    4. Modifica le altre impostazioni monitoring facoltative in base alle necessità.

Passo 7: distribuisci il grafico Helm

Distribuisci il grafico Helm strongSwan nel tuo cluster con le configurazioni che hai scelto in precedenza.

  1. Se devi configurare delle impostazioni più avanzate, attieniti alla documentazione fornita per ciascuna impostazione nel grafico Helm.

  2. Salva il file config.yaml aggiornato.

  3. Installa il grafico Helm nel tuo cluster con il file config.yaml aggiornato.

    Se hai più distribuzioni VPN in un singolo cluster, puoi evitare conflitti di denominazione e differenziare le distribuzioni scegliendo nomi di release più descrittivi rispetto a vpn. Per evitare il troncamento del nome della release, limita il nome a 35 caratteri o meno.

    helm install vpn iks-charts/strongswan -f config.yaml
    
  4. Controlla lo stato di distribuzione del grafico. Quando il grafico è pronto, il campo STATUS vicino all'output ha un valore di DEPLOYED.

    helm status vpn
    
  5. Dopo che il grafico è stato distribuito, verifica che siano state utilizzate le impostazioni aggiornate nel file config.yaml.

    helm get values vpn
    

Sono supportate solo le versioni del grafico strongSwan Helm rilasciate negli ultimi 6 mesi. Assicurati di aggiornare costantemente il tuo grafico strongSwan Helm per le funzioni e le correzioni di sicurezza più recenti.

Test e verifica della connettività VPN strongSwan

Dopo aver distribuito il tuo grafico Helm, verifica la connettività VPN.

  1. Se la VPN nel gateway in loco non è attiva, avviala.

  2. Imposta la variabile di ambiente STRONGSWAN_POD.

    export STRONGSWAN_POD=$(kubectl get pod -l app=strongswan,release=vpn -o jsonpath='{ .items[0].metadata.name }')
    
  3. Controlla lo stato della VPN. Uno stato di ESTABLISHED significa che la connessione VPN ha avuto esito positivo.

    kubectl exec $STRONGSWAN_POD -- sudo ipsec status
    

    Output di esempio

    Security Associations (1 up, 0 connecting):
    k8s-conn[1]: ESTABLISHED 17 minutes ago, 172.30.xxx.xxx[ibm-cloud]...192.xxx.xxx.xxx[on-premises]
    k8s-conn{2}: INSTALLED, TUNNEL, reqid 12, ESP in UDP SPIs: c78cb6b1_i c5d0d1c3_o
    k8s-conn{2}: 172.21.0.0/16 172.30.0.0/16 === 10.91.152.xxx/26
    
    • Quando tenti di stabilire la connettività VPN con il grafico Helm strongSwan per la prima volta, è probabile che lo stato della VPN non sia ESTABLISHED. Potrebbe essere necessario controllare le impostazioni dell'endpoint VPN on-premises e modificare il file di configurazione più volte prima che la connessione abbia successo.

      1. Esegui helm uninstall <release_name> -n <namespace>
      2. Correggi i valori errati nel file di configurazione.
      3. Esegui helm install vpn iks-charts/strongswan -f config.yaml

      Puoi anche eseguire più controlli nel passo successivo.

    • Se il pod VPN è in uno stato ERROR o continua ad arrestarsi e a riavviarsi, potrebbe essere dovuto alla convalida dei parametri delle impostazioni ipsec.conf nella mappa di configurazione del grafico.

      1. Controlla eventuali errori di convalida nei log del pod strongSwan eseguendo kubectl logs $STRONGSWAN_POD.
      2. Se esistono errori di validazione, eseguire helm uninstall <release_name> -n <namespace>
      3. Correggi i valori errati nel file di configurazione.
      4. Esegui helm install vpn iks-charts/strongswan -f config.yaml
  4. È possibile verificare ulteriormente la connettività VPN eseguendo i cinque test di Helm che si trovano nella definizione del grafico strongSwan.

    helm test vpn
    
    • Se tutti i test vengono superati, la connessione VPN strongSwan è stata configurata con successo.
    • Se un test non riesce, vai al passo successivo.
  5. Visualizza l'output di un test non riuscito nei log del pod di test.

    kubectl logs <test_program>
    

    Alcuni test hanno requisiti che sono impostazioni opzionali nella configurazione della VPN. Se alcuni test falliscono, i fallimenti potrebbero essere accettabili a seconda che siano state specificate o meno queste impostazioni opzionali. Fai riferimento alla seguente tabella per informazioni su ciascun test e sul perché potrebbe non riuscire.

    vpn-strongswan-check-config
    Convalida la sintassi del file ipsec.conf generato dal file config.yaml. Questo test potrebbe fallire a causa di valori errati nel file config.yaml.
    vpn-strongswan-check-state
    Controlla che la connessione VPN abbia uno stato di ESTABLISHED. Questo test potrebbe fallire per i seguenti motivi.
    • Differenze tra i valori del file config.yaml e le impostazioni dell'endpoint VPN on-premises.
    • Se il cluster è in modalità "ascolto" (ipsec.auto è impostato su add), la connessione non viene stabilita sul lato locale.
    vpn-strongswan-ping-remote-gw
    Esegue il ping dell'indirizzo IP pubblico remote.gateway configurato nel file config.yaml. Se la connessione VPN ha lo stato ESTABLISHED, è possibile ignorare il risultato di questo test. Se la connessione VPN non ha lo stato ESTABLISHED, questo test potrebbe fallire per i seguenti motivi.
    • Non hai specificato un indirizzo IP del gateway VPN in loco. Se ipsec.auto è impostato su start, è necessario l'indirizzo IP remote.gateway.
    • I pacchetti ICMP (ping) vengono bloccati da un firewall.
    vpn-strongswan-ping-remote-ip-1
    Esegue il ping dell'indirizzo IP privato remote.privateIPtoPing del gateway VPN on-premises dal pod VPN nel cluster. Questo test potrebbe non riuscire per i seguenti motivi. \n - Non è stato specificato un indirizzo IP remote.privateIPtoPing. Se intenzionalmente non hai specificato un indirizzo IP, questo errore è accettabile. \n - Non hai specificato il CIDR della sottorete del pod del cluster, 172.30.0.0/16, nell'elenco local.subnet.
    vpn-strongswan-ping-remote-ip-2
    Esegue il ping dell'indirizzo IP privato remote.privateIPtoPing del gateway VPN on-premises dal nodo worker del cluster. Questo test potrebbe non riuscire per i seguenti motivi. \n - Non è stato specificato un indirizzo IP remote.privateIPtoPing. Se intenzionalmente non hai specificato un indirizzo IP, questo errore è accettabile. \n - Non hai specificato il CIDR della sottorete privata del nodo di lavoro del cluster nell'elenco local.subnet. |
  6. Elimina il grafico Helm corrente.

    helm uninstall vpn -n <namespace>
    
  7. Apri il file config.yaml e correggi i valori errati.

  8. Salva il file config.yaml aggiornato.

  9. Installa il grafico Helm nel tuo cluster con il file config.yaml aggiornato. Le proprietà aggiornate sono memorizzate in una mappa di configurazione per il tuo grafico.

    helm install vpn iks-charts/strongswan -f config.yaml
    
  10. Controlla lo stato di distribuzione del grafico. Quando il grafico è pronto, il campo STATUS nell'output ha un valore di DEPLOYED.

helm status vpn
  1. Dopo che il grafico è stato distribuito, verifica che siano state utilizzate le impostazioni aggiornate nel file config.yaml.
helm get values vpn
  1. Elimina i pod di test correnti.
kubectl get pods -a -l app=strongswan-test
kubectl delete pods -l app=strongswan-test
  1. Esegui di nuovo i test.
helm test vpn

Limitazione del traffico VPN strongSwan per spazio dei nomi o nodo di lavoro

Se hai un cluster a singolo tenant o hai un cluster a più tenant in cui le risorse del cluster sono condivise tra i tenant, puoi limitare il traffico VPN per ogni distribuzione di strongSwan ai pod presenti in determinati spazi dei nomi. Se hai un cluster a più tenant in cui le risorse del cluster sono dedicate ai tenant, puoi limitare il traffico VPN per ogni distribuzione strongSwan ai nodi di lavoro dedicati a ciascun tenant.

Limitazione del traffico VPN strongSwan per spazio dei nomi

Se hai un cluster a singolo tenant o un cluster a più tenant, puoi limitare il traffico VPN ai pod che si trovano solo in determinati spazi dei nomi.

Ad esempio, supponiamo che desideri che i pod presenti solo in uno spazio dei nomi specifico, my-secure-namespace, inviino e ricevano i dati tramite la VPN. Non si vuole che i pod in altri spazi dei nomi, come kube-system, ibm-system, o default, accedano alla rete on-premises. Per limitare il traffico VPN solo a my-secure-namespace, puoi creare politiche di rete globali di Calico.

Prima di utilizzare questa soluzione, esamina le considerazioni e le limitazioni riportate di seguito.

  • Non è necessario distribuire il grafico strongSwan Helm nello spazio dei nomi specificato. Il pod VPN strongSwan e la serie di daemon di instradamento essere distribuiti in kube-system o in qualsiasi altro spazio dei nomi. Se la VPN strongSwan non viene distribuita nello spazio dei nomi specificato, il test Helm vpn-strongswan-ping-remote-ip-1 avrà esito negativo. Questo errore è previsto ed accettabile. Il test esegue il ping dell'indirizzo IP privato remote.privateIPtoPing del gateway VPN in loco da un pod che non si trova nello spazio dei nomi che ha l'accesso diretto alla sottorete remota. Tuttavia, il pod VPN è ancora in grado di inoltrare il traffico ai pod negli spazi dei nomi che hanno instradamenti alla sottorete remota e il traffico può ancora scorrere correttamente. Lo stato della VPN è ancora ESTABLISHED e i pod nello spazio dei nomi specificato possono connettersi tramite la VPN.

  • Le politiche di rete globali Calico descritte nei passaggi seguenti non impediscono ai pod Kubernetes che utilizzano la rete host di inviare e ricevere dati attraverso la VPN. Quando un pod è configurato con la rete host, l'applicazione in esecuzione nel pod può restare in ascolto sulle interfacce di rete del nodo di lavoro su cui si trova. Questi pod di rete host possono esistere in qualsiasi spazio dei nomi. Per determinare quali pod hanno una rete host, eseguire kubectl get pods --all-namespaces -o wide e cercare tutti i pod che non hanno un indirizzo IP del pod 172.30.0.0/16. Se vuoi impedire ai pod di rete host di inviare e ricevere dati tramite la VPN, puoi impostare le seguenti opzioni nel tuo file di distribuzione values.yaml: local.subnet: 172.30.0.0/16 e enablePodSNAT: false. Queste impostazioni di configurazione espongono tutti i pod Kubernetes attraverso la connessione VPN alla rete remota. Tuttavia, solo i pod che si trovano nello spazio dei nomi sicuro specificato sono raggiungibili tramite la VPN.

Prima di iniziare

Per limitare il traffico VPN a un determinato spazio dei nomi,

  1. Crea una politica di rete globale Calico denominata allow-non-vpn-outbound.yaml. Questa politica consente a tutti gli spazi dei nomi di continuare a inviare il traffico in uscita a tutte le destinazioni, ad eccezione della sottorete remota a cui accede la VPN strongSwan. Sostituire <remote.subnet> con l'indirizzo remote.subnet specificato nel file di configurazione Helm values.yaml. Per specificare più subnet remote, consultare la documentazione Calico.

    apiVersion: projectcalico.org/v3
    kind: GlobalNetworkPolicy
    metadata:
      name: allow-non-vpn-outbound
    spec:
      selector: has(projectcalico.org/namespace)
      egress:
      - action: Allow
        destination:
          notNets:
          - <remote.subnet>
      order: 900
      types:
      - Egress
    
  2. Applica la politica.

    calicoctl apply -f allow-non-vpn-outbound.yaml --config=filepath/calicoctl.cfg
    
  3. Crea un'altra politica di rete globale Calico denominata allow-vpn-from-namespace.yaml. Questa politica consente solo a uno spazio dei nomi specificato di inviare il traffico in uscita alla sottorete remota a cui accede la VPN strongSwan. Sostituite <namespace> con lo spazio dei nomi che può accedere alla VPN e <remote.subnet> con il remote.subnet specificato nel file di configurazione Helm values.yaml. Per specificare più namespace o subnet remote, consultare la documentazione Calico.

    apiVersion: projectcalico.org/v3
    kind: GlobalNetworkPolicy
    metadata:
      name: allow-vpn-from-namespace
    spec:
      selector: projectcalico.org/namespace == "<namespace>"
      egress:
      - action: Allow
        destination:
          nets:
          - <remote.subnet>
    order: 900
    types:
      - Egress
    
  4. Applica la politica.

    calicoctl apply -f allow-vpn-from-namespace.yaml --config=filepath/calicoctl.cfg
    
  5. Verifica che le politiche di rete globali siano state create nel tuo cluster.

    calicoctl get GlobalNetworkPolicy -o wide --config=filepath/calicoctl.cfg
    

Limitazione del traffico VPN strongSwan per nodo di lavoro

Se hai più distribuzioni VPN strongSwan in un cluster a più tenant, puoi limitare il traffico VPN per ogni distribuzione a specifici nodi di lavoro dedicati a ciascun tenant.

Quando distribuisci un grafico Helm strongSwan, viene creata una distribuzione VPN strongSwan. I pod VPN strongSwan vengono distribuiti su qualsiasi nodo di lavoro senza taint. Inoltre, viene creata una serie di daemon Kubernetes. Questa serie di daemon configura automaticamente gli instradamenti su tutti i nodi di lavoro senza taint nel cluster a ognuna delle sottoreti remote. Il pod VPN strongSwan utilizza gli instradamenti sui nodi di lavoro per inoltrare le richieste alla sottorete remota nella rete in loco.

Gli instradamenti non vengono configurati sui nodi con taint a meno che non specifichi il taint nell'impostazione tolerations nel file value.yaml. Applicando il taint ai nodi di lavoro, puoi impedire che gli instradamenti VPN vengano configurati su questi nodi di lavoro. Quindi, puoi specificare il taint nell'impostazione tolerations solo per la distribuzione VPN che vuoi consentire sul nodo di lavoro con taint. In questo modo, i pod VPN strongSwan per la distribuzione del grafico Helm di un tenant utilizzano solo gli instradamenti sui nodi di lavoro di quel tenant per instradare il traffico attraverso la connessione VPN alla sottorete remota.

Prima di utilizzare questa soluzione, esamina le considerazioni e le limitazioni riportate di seguito.

  • Per impostazione predefinita, Kubernetes posiziona i pod dell'applicazione su qualsiasi nodo di lavoro senza taint disponibile. Per assicurarti che questa soluzione funzioni correttamente, ciascun tenant deve prima garantire di distribuire i propri pod dell'applicazione solo ai nodi di lavoro con taint per il tenant corretto. Inoltre, ciascun nodo di lavoro con taint deve avere anche una tolleranza per consentire ai pod dell'applicazione di essere posizionati sul nodo. Per ulteriori informazioni su taint e tolleranze, consultare la documentazione Kubernetes.
  • Le risorse del cluster potrebbero non essere utilizzate in modo ottimale perché nessuno dei tenant può posizionare i pod dell'applicazione sui nodi senza taint condivisi.

I seguenti passi per limitare il traffico VPN strongSwan per nodo di lavoro utilizzano questo scenario di esempio: supponiamo che tu abbia un cluster IBM Cloud Kubernetes Service a più tenant con sei nodi di lavoro. Il cluster supporta il tenant A e il tenant B. Corruzioni i nodi di lavoro nei modi seguenti.

  • A due nodi di lavoro viene applicato il taint in modo che solo i pod del tenant A siano pianificati sui nodi di lavoro.
  • A due nodi di lavoro viene applicato il taint in modo che solo i pod del tenant B siano pianificati sui nodi di lavoro.
  • A due nodi di lavoro non viene applicato il taint perché sono richiesti almeno 2 nodi di lavoro per i pod VPN strongSwan e l'IP del programma di bilanciamento del carico sui cui eseguirli.

Per limitare il traffico VPN ai nodi contaminati per ogni tenant.

  1. Per limitare il traffico VPN ai soli lavoratori dedicati al tenant A in questo esempio, si specifica quanto segue toleration nel file values.yaml per la tabella del tenant A strongSwan Helm.

    tolerations:
        - key: dedicated
    operator: "Equal"
    value: "tenantA"
    effect: "NoSchedule"
    

    Questa tolleranza consente al demone di route impostato di essere eseguito sui due nodi worker che hanno il taint dedicated="tenantA" e sui due nodi worker non contaminati. I pod VPN strongSwan per questa distribuzione vengono eseguiti sui due nodi di lavoro senza taint.

  2. Per limitare il traffico VPN ai soli lavoratori dedicati al tenant B in questo esempio, si specifica il seguente toleration nel file values.yaml per il diagramma del tenant B strongSwan Helm.

    tolerations:
        - key: dedicated
    operator: "Equal"
    value: "tenantB"
    effect: "NoSchedule"
    

    Questa tolleranza consente al demone di route impostato di essere eseguito sui due nodi worker che hanno il taint dedicated="tenantB" e sui due nodi worker non contaminati. I pod VPN strongSwan per questa distribuzione vengono eseguiti anche sui due nodi di lavoro senza taint.

Upgrade o disabilitazione del grafico Helm strongSwan

Assicurati di aggiornare costantemente il tuo grafico Helm di strongSwan per le funzioni e le correzioni di sicurezza più recenti.

Esamina le versioni supportate del grafico strongSwan Helm. Generalmente, una versione del grafico diventa obsoleta 6 mesi dopo la data di rilascio.

  • Supportato: 2.7.9, 2.7.8, 2.7.7, 2.7.6, 2.7.5, 2.7.4, 2.7.3, 2.7.2
  • Obsoleto: 2.7.1, 2.7.0, 2.6.9, 2.6.8, 2.6.7
  • Non supportato: 2.6.6 e versioni precedenti

Per le date di release e i log delle modifiche per ogni versione del grafico Helm strongSwan, esegui helm show readme iks-charts/strongswan e cerca la sezione Version History.

Per eseguire l'upgrade del tuo grafico Helm strongSwan all'ultima versione, utilizza il comando helm upgrade.

helm upgrade -f config.yaml <release_name> iks-charts/strongswan

Puoi disabilitare la connessione VPN eliminando il grafico Helm.

helm uninstall <release_name> -n <namespace>

Utilizzo di una VRA (Virtual Router Appliance)

La VRA () fornisce il sistema operativo Vyatta 5600 più recente per i server bare metal x86. Puoi utilizzare una VRA come un gateway VPN per connetterti in modo sicuro ad una rete in loco.

Tutto il traffico di rete pubblica e privata che entra o esce dalle VLAN del cluster viene instradato tramite una VRA. Puoi utilizzare la VRA come un endpoint VPN per creare un tunnel IPSec crittografato tra i server nell'infrastruttura IBM Cloud e le risorse in loco. Ad esempio, il seguente diagramma mostra in che modo un'applicazione su un nodo di lavoro solamente privato in IBM Cloud Kubernetes Service può comunicare con un server in loco tramite una connessione VPN VRA:

Esponi un'applicazione in IBM Cloud Kubernetes Service utilizzando un programma di bilanciamento del carico.
Esporre un'applicazione in IBM Cloud Kubernetes Service utilizzando un bilanciatore di carico

  1. Un'applicazione nel tuo cluster, myapp2, riceve una richiesta da un servizio Ingress o LoadBalancer e deve connettersi in modo sicuro alla tua rete in loco.

  2. Poiché myapp2 si trova su un nodo di lavoro che si trova solo su una VLAN privata, la VRA funge da connessione protetta tra i nodi di lavoro e la rete in loco. La VRA usa l'indirizzo IP di destinazione per determinare quali pacchetti di rete inviare alla rete in loco.

  3. La richiesta viene crittografata e inviata sul tunnel VPN nel data center in loco.

  4. La richiesta in entrata passa attraverso il firewall in loco e viene consegnata all'endpoint del tunnel VPN (router) in cui viene decrittografata.

  5. L'endpoint del tunnel VPN (router) inoltra la richiesta al server in loco o al mainframe, a seconda dell'indirizzo IP di destinazione specificato nel passo 2. I dati necessari vengono inviati di nuovo tramite la connessione VPN a myapp2 attraverso lo stesso processo.

Per impostare un sito Virtual Router Appliance,

  1. Ordina una VRA.

  2. Configura la VLAN privata nella VRA.

  3. Per abilitare una connessione VPN utilizzando la VRA, configura VRRP nella VRA.

Se hai un'applicazione router esistente e aggiungi quindi un cluster, le nuove sottoreti portatili ordinate per il cluster non vengono configurate sull'applicazione router. Per utilizzare i servizi di rete, è necessario abilitare il routing tra le sottoreti della stessa VLAN, attivando il VLAN spanning o il VRF.