Skip to content

Latest commit

 

History

History
154 lines (96 loc) · 4.05 KB

readme.md

File metadata and controls

154 lines (96 loc) · 4.05 KB

Esempio di Istio

Un progetto di esempio per partire su Istio

Clonare questa repo sulla macchina di sviluppo dove si trova kubernetes oppure in locale


git clone https://github.com/totolook/istio-starter-pack.git
cd istio-starter-pack
sudo chmod +x build.sh

Prerequisiti

Per funzionare questo esempio si deve avere:

  • Maven - Dependency Management

Assicuratevi che istio abbia l'injection automatico sul namespace desiderato se no dovete applicare una label del vostro namespace:

kubectl label namespace <namespace> istio-injection=enabled

Installazione

Per partire si deve eseguire lo script per la compilazione e creazione del immagine di docker

./build.sh

Si può aggiungure già dei parametri sullo script

./build.sh <VERSIONE> [push] <REGISTRY URL>

Attenzione! Prima di proseguire verificate se avete cambiato il registry oppure la versione, dovete modificare successivamente il file apik8s.yml e modificare l'immagine di ogni api

 image: localhost:32000/api1:lastest
 image: localhost:32000/api2:lastest
 image: localhost:32000/api3:lastest

con

 image: <REGISTRY URL>/api1:<VERSIONE>
 image: <REGISTRY URL>/api2:<VERSIONE>
 image: <REGISTRY URL>/api3:<VERSIONE>

Adesso si passa al deploy dei microservizi attraverso kubectl

kubectl apply -f apik8s.yml

Aspettiamo che i microservizi che girano. Poi diamo impasto la configurazione del gateway e il virtualService per accettare le connessioni in ingresso.

kubectl apply -f apinet.yml

Adesso si deve raggiungere il servizio api1, ma prima vediamo la porta che ci ha dato l'ingress di istio:


kubectl get svc  istio-ingressgateway -n istio-system
NAME                   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)
istio-ingressgateway   NodePort   10.43.222.56   <none>        80:31380/TCP,443:31390/TCP,31400:31400/TCP

quindi per contattare il servizio api1, ricordiamo che sta sulla porta 80, dobbiamo andare sulla corrispondenza della porta in uscita. In questo caso è 31380, adesso facciamo un test se ci connettiamo.

curl  -v localhost:31380/


Migrazione su mTLS

Si può mettere anche in sicurezza i microservizi con una mutua TLS senza implementare direttamente sui microservizi.

Destination Rules

Dopo aver installato e configurato i vari microservizi si deve applicare le regole di destinazioni per dire ai microservizi che devono instaurare una mutua TLS su tutte i tre servizi, quindi dobbiamo applicare questo yaml.

kubectl apply -f apiDestinationRules.yml

Infatti stiamo dicendo ad istio di fare una mutua tls:

spec:
  host: api1.default.svc.cluster.local
  trafficPolicy:
    tls:
      mode: ISTIO_MUTUAL

Ricevere solo mTLS (Opzionale)

Dopo aver applicato le regole di destinazioni possiamo forzare un servizio che dovrà accettare solo le connessioni tramite mTLS.

kubectl apply -f apiPolicy.yml

Questo è il risultato:

mTLS

Risultato finale

Con questo esempio abbiamo fatto comunicare i tre microservizi e messi in sicurezza con la mutua tls senza modificare i microservizi

Altro

Costruito con

Authors

  • Antonio di Giovanni - Initial work - totolook