Best practice di Kubernetes. Mappatura dei servizi esterni

Le migliori pratiche di Kubernetes. Creazione di piccoli contenitori
Le migliori pratiche di Kubernetes. Organizzazione di Kubernetes con gli spazi dei nomi
Le migliori pratiche di Kubernetes. Verifica della vitalità di Kubernetes tramite test di Readiness e Liveness
Le migliori pratiche di Kubernetes. Configurazione delle richieste e dei limiti delle risorse
Best practice di Kubernetes. Corretta disattivazione del Terminate

Se sei come la maggior parte delle persone, probabilmente utilizzi risorse che funzionano al di fuori del tuo cluster. Potresti utilizzare l'API Taleo per inviare messaggi di testo o analizzare immagini tramite l'API Google Cloud Vision.

Se utilizzi lo stesso endpoint — il punto di ricezione delle richieste sul server in tutti i tuoi ambienti e non prevedi di migrare i tuoi server in Kubernetes, è perfettamente normale avere l'endpoint del servizio direttamente nel tuo codice. Tuttavia, ci sono molti altri scenari possibili. In questa serie ‘Kubernetes Best Practices’ scoprirai come utilizzare i meccanismi integrati di Kubernetes per la scoperta dei servizi sia all'interno che all'esterno del cluster.

Un esempio di un servizio esterno comunemente utilizzato è un database che opera al di fuori del cluster Kubernetes. A differenza di database cloud come Google Cloud Data Store o Google Cloud Spanner, che utilizzano un unico endpoint per tutti i tipi di accesso, la maggior parte dei database ha endpoint separati per diverse circostanze.
Le migliori pratiche per l'uso di database tradizionali come MySQL e MongoDB prevedono generalmente che ci si connetta a diversi componenti a seconda dell'ambiente. Potresti avere una macchina più grande per i dati di produzione e una più piccola per l'ambiente di test. Ognuna di esse avrà il proprio indirizzo IP o nome di dominio, ma sicuramente non vorrai modificare il tuo codice passando da un ambiente all'altro. Pertanto, invece di hardcodare questi indirizzi, puoi utilizzare la scoperta dei servizi esterni integrata in Kubernetes basata su DNS, proprio come per i servizi nativi di Kubernetes.

Best practice di Kubernetes. Mappatura dei servizi esterni

Immagina di eseguire un database MongoDB su Google Compute Engine. Resterai bloccato in questo mondo ibrido fino a quando non riuscirai a migrarlo nel cluster.

Fortunatamente, puoi utilizzare i servizi statici di Kubernetes per semplificarti un po' la vita. In questo esempio, ho creato un server MongoDB utilizzando Google Cloud Launcher. Poiché è stato creato sulla stessa rete (o VPC del cluster Kubernetes), l'accesso a esso avviene tramite un indirizzo IP interno ad alte prestazioni.

Best practice di Kubernetes. Mappatura dei servizi esterni

In Google Cloud questa è l'impostazione predefinita, quindi non devi configurare nulla. Ora che hai l'indirizzo IP, il primo passo è creare un servizio. Si può notare che per questo servizio non ci sono selettori dei pod. In altre parole, abbiamo creato un servizio che non saprà dove inviare il traffico. Questo permetterà di creare manualmente un oggetto endpoint che riceverà il traffico da questo servizio.

Best practice di Kubernetes. Mappatura dei servizi esterni

Il seguente esempio di codice mostra che gli endpoint definiscono l'indirizzo IP per il database, utilizzando lo stesso nome mongo che il servizio.

Best practice di Kubernetes. Mappatura dei servizi esterni

Kubernetes utilizzerà tutti gli indirizzi IP per trovare gli endpoint, proprio come se fossero normali pod Kubernetes, quindi ora puoi accedere al database utilizzando una semplice stringa di connessione a mongodb://mongo. In questo modo non è affatto necessario utilizzare indirizzi IP nel tuo codice.

Se in futuro gli indirizzi IP cambiano, puoi semplicemente aggiornare gli endpoint con il nuovo indirizzo IP, e le tue applicazioni non dovranno essere modificate in alcun modo ulteriore.

Se utilizzi un database ospitato presso un fornitore esterno, probabilmente i proprietari dell'host ti hanno fornito un identificatore uniforme delle risorse URI per connetterti. Quindi, se ti è stato dato un indirizzo IP, puoi semplicemente utilizzare il metodo precedente. Questo esempio mostra che ho due database MongoDB ospitati su mLab.

Best practice di Kubernetes. Mappatura dei servizi esterni

Uno di essi è il database degli sviluppatori, mentre l'altro è il DB di produzione. Le stringhe di connessione per questi database sono le seguenti: mLab ti fornisce un URI dinamico e una porta dinamica. Come puoi vedere, sono diverse.

Best practice di Kubernetes. Mappatura dei servizi esterni

Per astraerti da questo, usiamo Kubernetes e ci connettiamo al database degli sviluppatori. Puoi creare un nome di servizio esterno in Kubernetes, fornendoti un servizio statico che reindirizzerà il traffico verso un servizio esterno.

Best practice di Kubernetes. Mappatura dei servizi esterni

Questo servizio eseguirà un semplice reindirizzamento CNAME a livello di core, il che avrà un impatto minimo sulle prestazioni. In questo modo puoi utilizzare una stringa di connessione più semplice.

Best practice di Kubernetes. Mappatura dei servizi esterni

Tuttavia, poiché il nome esterno utilizza un reindirizzamento CNAME, non è possibile effettuare una riconfigurazione delle porte. Pertanto, questa soluzione è applicabile solo per porte statiche e non può essere utilizzata con porte dinamiche. Il piano gratuito mLab Free Tier, infatti, fornisce per impostazione predefinita un numero di porta dinamico, e non è possibile modificarlo. Ciò significa che avrai bisogno di diverse stringhe di connessione per dev e prod. Purtroppo, questo richiederà di codificare rigidamente il numero della porta. Come possiamo quindi far funzionare la riconfigurazione delle porte?

Il primo passo è ottenere l'indirizzo IP dall'URI. Eseguendo il comando nslookup, pingando il nome host o l'URI, è possibile ottenere l'indirizzo IP del database. Se il servizio restituisce più indirizzi IP, tutti questi indirizzi possono essere utilizzati negli endpoint dell'oggetto.

Best practice di Kubernetes. Mappatura dei servizi esterni

È importante ricordare che gli indirizzi IP dell'URI possono cambiare senza preavviso, quindi è piuttosto rischioso utilizzarli in prod. Con un indirizzo IP del genere, puoi connetterti a un database remoto senza specificare la porta. In questo modo, il servizio Kubernetes esegue in modo trasparente la riconfigurazione delle porte.

Best practice di Kubernetes. Mappatura dei servizi esterni

Il mapping, o associazione di risorse esterne con interne, ti consente di utilizzare flessibilmente questi servizi all'interno del cluster in futuro, riducendo al minimo gli sforzi di refactoring. Facilita anche la gestione e offre una comprensione di quali servizi esterni la tua azienda sta utilizzando.

Continuazione in arrivo molto presto…

Riproduci video

Un po' di pubblicità 🙂

Grazie per essere con noi. Ti piacciono i nostri articoli? Vuoi vedere più contenuti interessanti? Supportaci effettuando un ordine o raccomandandoci ai tuoi conoscenti, VPS cloud per sviluppatori a partire da $4,99, un'alternativa unica ai server entry-level, che abbiamo creato per te: Tutta la verità su VPS (KVM) E5-2697 v3 (6 Core) 10GB DDR4 480GB SSD 1Gbps a partire da $19. Come dividere il server correttamente? (disponibili opzioni con RAID1 e RAID10, fino a 24 core e fino a 40GB DDR4).

Dell R730xd a metà prezzo nel data center Equinix Tier IV ad Amsterdam? Solo da noi 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB a partire da $199 nei Paesi Bassi! Dell R420 — 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — a partire da $99! Scopri di più su Come costruire un'infrastruttura di classe enterprise con server Dell R730xd E5-2650 v4 dal costo di 9000 euro a prezzi stracciati?

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster