Cluster Kubernetes multi-regione resilienti e protetti con IBM Cloud Internet Services

Questa esercitazione può comportare degli addebiti. Utilizza lo stimatore costi per generare una stima dei costi basata sul tuo utilizzo previsto.

Quando un'applicazione è progettata pensando alla resilienza, è meno probabile che gli utenti riscontrino dei tempi di inattività. Quando implementi una soluzione con Kubernetes Service, usufruisci delle capacità integrate come il bilanciamento del carico e l'isolamento, la resilienza aumentata contro potenziali malfunzionamenti con host, reti o applicazioni. Creando molti cluster e se si verifica un'interruzione in un cluster, gli utenti possono comunque accedere a un'applicazione distribuita in un altro cluster. Con molti cluster in luoghi diversi, gli utenti possono anche accedere al cluster più vicino e ridurre la latenza di rete. Per una maggiore resilienza, è possibile selezionare anche i cluster multizona, ovvero i nodi sono distribuiti in più zone all'interno di una stessa sede.

Questa esercitazione evidenzia come Cloud Internet Services (CIS), una piattaforma uniforme per configurare e gestire il Domain Name System (DNS), il Global Load Balancing (GLB), il Web Application Firewall (WAF) e la protezione contro i Distributed Denial of Service ( DDoS ) per le applicazioni Internet, possa essere integrato con i cluster Kubernetes per supportare questo scenario e fornire una soluzione sicura e resiliente in molte sedi.

Obiettivi

  • Distribuire un'applicazione su molti cluster Kubernetes in luoghi diversi.
  • Distribuire il traffico su più cluster con un Global Load Balancer.
  • Instradare gli utenti al cluster più vicino.
  • Proteggere la tua applicazione dalle minacce alla sicurezza.
  • Aumentare le prestazioni dell'applicazione con la memorizzazione nella cache.

dell'architettura del

  1. Lo sviluppatore crea un'immagine Docker per l'applicazione.
  2. L'immagine viene spinta su Container Registry.
  3. L'applicazione viene distribuita ai cluster Kubernetes a Dallas e Londra.
  4. Gli utenti finali accedono all'applicazione.
  5. IBM Cloud Internet Services è configurato per intercettare le richieste all'applicazione e per distribuire il carico tra i cluster. Sono inoltre abilitati la Protezione DDoS e WAF (Web Application Firewall) per proteggere l'applicazione dalle comuni minacce. Facoltativamente, le risorse come immagini e file CSS vengono memorizzate nella cache.

Prima di iniziare

Questa esercitazione richiede:

  • la CLI IBM Cloud,
    • il plugin IBM Cloud Kubernetes Service (kubernetes-service),
  • kubectl per interagire con i cluster Kubernetes,

Le istruzioni per scaricare e installare questi strumenti per il vostro ambiente operativo sono contenute nella guida Getting started with solution tutorials.

Inoltre, assicurati di:

  • essere il proprietario di un dominio personalizzato in modo da poter configurare il DNS affinché questo dominio punti ai server dei nomi IBM Cloud Internet Services.
  • e comprendere le basi di Kubernetes.

Distribuisci un'applicazione in una singola ubicazione

Questa esercitazione distribuisce un'applicazione Kubernetes su cluster situati in diverse località. Inizierai con un'ubicazione, Dallas, e ripeterai quindi questa procedura per Londra.

Crea un cluster Kubernetes

Per questa esercitazione è sufficiente un cluster minimo con una (1) zona e un (1) nodo worker.

Durante la creazione del seguente cluster Kubernetes:

  1. Imposta Cluster name su my-us-cluster.

  2. Ubica in North America e Dallas

  3. Aprire il cluster Kubernetes e fare clic su Crea cluster.

  4. Crea un cluster a tua scelta di Infrastruttura.

    • La seguente procedura è se selezioni VPC per Kubernetes sull'infrastruttura VPC. Devi creare un VPC e una o più sottoreti prima di creare il cluster Kubernetes. Per ulteriori dettagli, fai riferimento alla documentazione Creazione di cluster VPC.

      1. Fai clic su Crea VPC.
      2. Nella sezione Ubicazione, selezionare un' Area geografica e una Regione, ad esempio North America e Dallas.
      3. Immetti un Nome del tuo VPC, seleziona un Gruppo di risorse e, facoltativamente, aggiungi Tag per organizzare le tue risorse.
      4. Deselezionare Consenti SSH e Consenti ping dal gruppo di sicurezza predefinito.
      5. Deselezionare Crea sottorete in ogni zona.
      6. Fai clic su Create.
      7. In Zone e sottoreti di lavoro, deseleziona le due zone per cui la sottorete non è stata creata.
      8. Impostare Nodi worker per zona su 1 e fare clic su Cambia sapore per esplorare e passare al sapore dei nodi worker desiderato.
      9. In Ingress, abilita Ingress secrets management e seleziona la tua istanza Secrets Manager esistente.
      10. Immetti un Nome cluster e seleziona lo stesso Gruppo di risorse che hai utilizzato per il VPC.
      11. La registrazione o il monitoraggio non sono richiesti in questa esercitazione, disabilitare tali opzioni e fare clic su Crea.
      12. Mentre attendi che il cluster diventi attivo, collega un gateway pubblico al VPC. Passa a Virtual private cloud.
      13. Fai clic sul nome del VPC utilizzato dal cluster e scorri verso il basso fino alla sezione delle sottoreti.
      14. Fai clic sul nome della sottorete creata in precedenza e nella sezione Public Gateway, fai clic su Scollegato per modificare lo stato in Collegato.
    • La seguente procedura è se selezioni Classic per Kubernetes sull'infrastruttura Classic. Fai riferimento alla documentazione Creazione di un cluster classico standard per ulteriori dettagli.

      1. Nella sezione Ubicazione, selezionare Area geografica, Disponibilitàmultizona e Metro ad esempio North America e Dallas.
      2. In VLAN e zone di lavoro, deseleziona tutte le zone tranne una.
      3. Impostare Nodi worker per zona su 1 e fare clic su Cambia sapore per esplorare e passare al sapore dei nodi worker desiderato.
      4. Sotto Endpoint servizio master, selezionare Entrambi gli endpoint privati e pubblici.
      5. In Ingress, abilita Ingress secrets management e seleziona la tua istanza Secrets Manager esistente.
      6. Immettere un Nome cluster e selezionare il Gruppo di risorse in cui creare queste risorse.
      7. La registrazione o il monitoraggio non sono richiesti in questa esercitazione, disabilitare tali opzioni e fare clic su Crea.

Mentre il cluster si sta preparando, tu preparerai l'applicazione.

Distribuisci l'applicazione al cluster Kubernetes

Il cluster dovrebbe essere pronto. Puoi controllarne lo stato nella console Kubernetes Service.

  1. Ottieni l'accesso al tuo cluster come descritto nella scheda Access del tuo cluster. Qualcosa come:

    MYCLUSTER=my-us-cluster
    ibmcloud ks cluster config --cluster $MYCLUSTER
    
  2. Creare la distribuzione utilizzando un'immagine preintegrata dell'applicazione. Il codice sorgente dell'applicazione è disponibile in questo repositoryGitHub.

    kubectl create deploy hello-world-deployment --image=icr.io/solution-tutorials/tutorial-scalable-webapp-kubernetes
    

    Output di esempio: deployment "hello-world-deployment" created.

  3. Rendi l'applicazione accessibile all'interno del cluster creando un servizio:

    kubectl expose deployment/hello-world-deployment --type=ClusterIP --port=80 --name=hello-world-service --target-port=3000
    

    Restituisce un messaggio come service "hello-world-service" exposed. Per visualizzare i servizi:

    kubectl get services
    
  4. Esegui l'applicazione nel cluster con due repliche:

    kubectl scale deployment hello-world-deployment --replicas=2
    
  5. Puoi controllare lo stato della distribuzione con il seguente comando:

    kubectl get pods
    

Ottieni il sottodominio Ingress assegnato al cluster

Quando viene creato un cluster Kubernetes, gli viene assegnato un sottodominio di ingresso (ad esempio, my-us-cluster.us-south.containers.appdomain.cloud ) e un indirizzo IP pubblico di Application Load Balancer.

  1. Richiama il dominio secondario Ingress del cluster:
    ibmcloud ks cluster get --cluster $MYCLUSTER
    
    Cerca il valore Ingress Subdomain.
  2. Prendi nota di queste informazioni per un passo successivo.

Questa esercitazione utilizza il dominio secondario Ingress per configurare il Global Load Balancer. Puoi anche sostituire il dominio secondario Ingress con l'Application Load Balancer pubblico, l'ALB del cluster. Un <IngressSubdomain> è simile a my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud

Configura Ingress per il tuo dominio secondario DNS

Sarà necessario avere il tuo nome dominio DNS e verrà creato un dominio secondario del programma di bilanciamento del carico globale nella seguente attività: <glb_name>.<your_domain_name>. Qualcosa come hello-world-service.example.com <glb_name> = hello-world-service e <your_domain_name> = example.com

  1. Crea il file glb-ingress.yaml e sostituisci i segnaposto con i rispettivi valori:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
     name: <glb-name>
     annotations:
       spec.ingressClassName: "public-iks-k8s-nginx"
    spec:
     rules:
     - host: <glb-name>.<your_domain_name>
       http:
         paths:
         - path: /
           pathType: Prefix
           backend:
             service:
               name: hello-world-service
               port:
                 number: 80
    
  2. Aggiungi l'istanza di ingresso:
    kubectl apply -f glb-ingress.yaml
    
    Possono essere necessari alcuni minuti prima che l'ingresso diventi disponibile come indicato da un valore nella colonna ADDRESS nel comando:
    kubectl get ingress
    
  3. Ora verifica configurando l'intestazione http Host curl con il tuo nome dominio secondario DNS per sovrascrivere il valore predefinito di <IngressSubdomain>:
    curl --header 'Host: <glb_name>.<your_domain_name>' <IngressSubdomain>/hostname
    
    Il comando curl è simile al seguente: curl --header 'Host: hello-world-service.ibmom.com' my-us-cluster-e7f2ca73139645ddf61a8702003a483a-0000.us-south.containers.appdomain.cloud/hostname

E quindi, in un'altra ubicazione

Ripetere i passi precedenti per l'ubicazione di Londra con le seguenti sostituzioni:

Configura il bilanciamento del carico multi-ubicazione

La tua applicazione è ora in esecuzione in due cluster ma manca un componente per consentire agli utenti di accedere ai cluster in modo trasparente da un singolo punto di accesso.

In questa sezione, configurerai IBM Cloud Internet Services (CIS) per distribuire il carico tra due cluster. CIS è un servizio di shopping one-stop che fornisce Global Load Balancer (GLB), Caching, Web Application Firewall (WAF) e regola della pagina per proteggere le tue applicazioni garantendo l'affidabilità e le prestazioni delle tue applicazioni cloud.

Per configurare un Global Load Balancer, dovrai:

  • puntare un dominio personalizzato ai server dei nomi CIS,
  • per recuperare il dominio secondario Ingress dei cluster Kubernetes,
  • configurare i controlli dell'integrità per convalidare la disponibilità della tua applicazione
  • e definire i pool di origine che puntano ai cluster.

Registra un dominio personalizzato con IBM Cloud Internet Services

Il primo passo consiste nel creare un'istanza di CIS e puntare il tuo dominio personalizzato ai server dei nomi CIS.

  1. Se non si possiede un dominio, è possibile acquistarne uno da un registrar.

  2. Passa a IBM Cloud Internet Services nel catalogo IBM Cloud.

  3. Seleziona un piano, imposta il gruppo di risorse e il nome del servizio e fai clic su Crea per creare un'istanza del servizio.

  4. Quando viene eseguito il provisioning dell'istanza del servizio, fai clic su Aggiungi dominio.

  5. Immettere il proprio nome dominio e fare clic su Avanti.

  6. L'impostazione dei record DNS è un passaggio facoltativo e può essere saltato per questa esercitazione. fare clic su Avanti.

  7. Quando vengono assegnati i server dei nomi, configura il tuo registrar o il provider del nome del dominio in modo che utilizzi i server dei nomi elencati.

  8. A questo punto puoi fare clic su Annulla per tornare alla pagina principale, dopo aver configurato il tuo registrar o il provider DNS, potrebbero essere necessarie fino a 24 ore per rendere effettive le modifiche.

    Quando lo stato del dominio nella pagina Panoramica passa da In attesa ad Attivo, si può usare il comando dig <your_domain_name> ns per verificare che i nuovi server dei nomi siano diventati effettivi.

Configura il controllo dell'integrità per il Global Load Balancer

I controlli sullo stato di salute monitorano le risposte alle richieste di HTTP / HTTPS da parte dei pool di origine a un intervallo stabilito. Vengono utilizzate con i pool di origine per determinare se i pool sono ancora correttamente in esecuzione.

  1. Nel dashboard IBM Cloud Internet Services, usa il menu di navigazione per selezionare Reliability > Global Load Balancers.

  2. Selezionare la scheda Verifiche di integrità e fare clic su Crea.

    1. Imposta Name su hello - world - service
    2. Imposta Monitor Type su HTTP.
    3. Impostare Porta su 80.
    4. Impostare il percorso su /.
    5. Nella sezione Configurare le intestazioni della richiesta (opzionale) aggiungere Nome intestazione: Host e Valore: <glb_name>.<your_domain_name>
    6. Fai clic su Crea.

    Quando crei le tue applicazioni, puoi definire un endpoint di controllo dell'integrità dedicato, come ad esempio /heathz, dove notificherai lo stato dell'applicazione.

Definisci i pool di origine

Un pool è un gruppo di server di origine a cui viene instradato il traffico in modo intelligente quando collegato a un GLB. Con i cluster nel Regno Unito e negli Stati Uniti, puoi definire dei pool basati sull'ubicazione e configurare CIS per reindirizzare gli utenti ai cluster più vicini in base all'ubicazione geografica delle richieste dell'utente.

Un pool per il cluster a Dallas

  1. Selezionare la scheda Pool di origine e fare clic su Crea.
  2. Impostare il nome su US.
  3. Impostare il nome dell'origine su us-cluster.
  4. Imposta Origin Address sul servizio kubernetes <IngressSubdomain> stampato da ibmcloud ks cluster get --cluster $MYCLUSTER per il cluster US.
  5. Impostare il controllo salute su quello creato nella sezione precedente.
  6. Impostare la regione di controllo sanitario su Western North America.
  7. Fare clic su Salva.

Un pool per il cluster a Londra

  1. Selezionare la scheda Pool di origine e fare clic su Crea.
  2. Impostare il nome su UK.
  3. Impostare il nome dell'origine su uk-cluster.
  4. Imposta Origin Address sul servizio kubernetes <IngressSubdomain> stampato da ibmcloud ks cluster get --cluster $MYCLUSTER per il cluster UK.
  5. Impostare il controllo salute su quello creato nella sezione precedente.
  6. Impostare la regione di controllo sanitario su Western Europe.
  7. Fare clic su Salva.

Crea il Global Load Balancer

Con i pool di origine definiti, puoi completare la configurazione del programma di bilanciamento del carico.

  1. Seleziona la scheda Load Balancers e fai clic su Create.

  2. Inserire un nome, <glb_name>, in Nome del Global Load Balancer. Questo nome farà anche parte dell'applicazione universale URL (http://<glb_name>.<your_domain_name>), indipendentemente dalla posizione.

  3. In Geo routes, fai clic su Add route.

    1. Seleziona Default dall'elenco a discesa Region.
    2. Selezionare il pool US.
    3. Fai clic su Aggiungi.

    Ripetere il processo per creare quanto segue:

    Elenco di percorsi Geo da creare
    Regione Pool di origine
    Valore predefinito Stati Uniti
    Western Europe UK
    Eastern Europe UK
    Northeast Asia UK
    Southeast Asia UK
    Western North America Stati Uniti
    Eastern North America Stati Uniti

    Con questa configurazione, gli utenti in Europa e in Asia saranno reindirizzati al cluster a Londra, gli utenti negli Stati Uniti al cluster a Dallas. Quando una richiesta non corrisponde a nessuna delle rotte definite, viene reindirizzata ai pool della regione Default.

  4. Fai clic su Create

A questo punto, si è configurato con successo un Global Load Balancer con cluster Kubernetes in molte sedi. È possibile accedere al sito GLB URL http://<glb_name>.<your_domain_name>/hostname per visualizzare la propria domanda. In base alla posizione, si viene reindirizzati al cluster più vicino o a un cluster del pool predefinito se CIS non è stato in grado di mappare l'indirizzo IP a una posizione specifica.

Proteggi l'applicazione

Attiva WAF (Web Application Firewall)

Il WAF (Web Application Firewall) protegge la tua applicazione web da attacchi ISO livello 7. Di norma, viene combinato con set di regole raggruppati, che hanno come obiettivo il proteggere da vulnerabilità nell'applicazione escludendo mediante filtro il traffico malintenzionato.

  1. Nel dashboard IBM Cloud Internet Services, passa a Security, quindi su WAF.
  2. Assicurati che l'impostazione per WAF sia On.
  3. Fai clic su OWASP Rule Set. Da questa pagina, puoi esaminare il set di regole di base OWASP (OWASP Core Rule Set) e abilitare o disabilitare singolarmente le regole. Quando una regola è abilitata, se una richiesta in arrivo attiva la regola, il punteggio globale delle minacce viene aumentato. L'impostazione Sensitivity deciderà se viene attivata un'azione (Action) per la richiesta.
    1. Non apportare alcuna modifica ai set di regole OWASP predefiniti.
    2. Imposta Sensitivity su Low.
    3. Imposta Action su Simulate per registrare tutti gli eventi.
  4. Fai clic su CIS Rule Set. Questa pagina mostra regole aggiuntive basate sugli stack di tecnologia comuni per l'hosting di siti web.

Per una connessione protetta con HTTPS, è possibile ottenere un certificato da Let's Encrypt o tramite IBM Cloud Secrets Manager.

Aumenta le prestazioni e proteggi da attacchi DoS (Denial of Service)

Un attacco di tipo distributed denial of service ( DDoS ) è un tentativo malevolo di interrompere il normale traffico di un server, di un servizio o di una rete, sommergendo il bersaglio o l'infrastruttura circostante con un'ondata di traffico internet. CIS è attrezzato per proteggere il vostro dominio da DDoS.

  1. Nel dashboard CIS, seleziona Reliability > Global Load Balancer.

  2. Individua il GLB che hai creato nella tabella Load Balancers.

  3. Abilita le funzioni di sicurezza (Security) e prestazioni (Performance) nella colonna Proxy.

    CIS Attiva / disattiva proxy
    CIS Attiva / disattiva proxy

Il tuo GLB è ora protetto. Un vantaggio immediato è che gli indirizzi IP di origine dei tuoi cluster verranno nascosti ai client. Se CIS rileva una minaccia per una richiesta in arrivo, potresti vedere una schermata come questa prima di essere reindirizzato alla tua applicazione:

Verifica - DDoS protection
Verifica - DDoS protection

Inoltre, puoi ora controllare quale contenuto viene memorizzato nella cache da CIS e per quanto tempo rimane nella cache. Vai a Performance > Caching per definire il livello di memorizzazione nella cache globale e la scadenza del browser. Puoi personalizzare le regole di sicurezza globale e di memorizzazione nella cache con le regole della pagina (Page Rules). Le regole della pagina (Page Rules) abilitano una configurazione dettagliata utilizzando percorsi di dominio specifici. Per fare un esempio con le regole della pagina (Page Rules), puoi decidere di memorizzare nella cache tutto il contenuto in /assets per 3 giorni (3 days):

Regole pagina
Regole pagina

Rimuovi le risorse

Rimuovi le risorse del cluster Kubernetes

  1. Rimuovi l'Ingress, puoi farlo immettendo il seguente comando:
    kubectl delete -f glb-ingress.yaml
    
  2. Rimuovi il servizio, puoi farlo immettendo il seguente comando:
    kubectl delete service hello-world-service
    
  3. Rimuovi la distribuzione, puoi farlo immettendo il seguente comando:
    kubectl delete deployment hello-world-deployment
    
  4. Elimina i cluster se li hai creati specificamente per questa esercitazione.

Rimuovi le risorse CIS

  1. Rimuovi il GLB.
  2. Rimuovi i pool di origine.
  3. Rimuovi i controlli dell'integrità.
  4. Aggiorna il DNS per il tuo dominio personalizzato.
  5. Cancellare l'istanza di CIS se è stata creata appositamente per questa esercitazione.

Contenuto correlato