Kubernetes¶
Utilizziamo Kubernetes come strumento preferenziale di distribuzione degli applicativi in tutti i siti geografici.
IaC¶
Le definizioni dei clusters Kubernetes e delle loro applicazioni sono mantenute primariamente dai manifests presenti in qntweb/sb.k8s.infrastructure.manifests.
Questi possono rimandare a loro volta ad altri repositories.
Identità dei clusters: nome e Cilium ID¶
I clusters hanno un nome univoco, che inizia con {sito}-.
Ad ogni cluster viene assegnato un Cilium ID univoco. (1)
- È un requisito della feature "cluster mesh" di Cilium
Clusters¶
Ufficio¶
| Cilium ID | Nome | K8s API VIP | Pods CIDR | LoadBalancers CIDR |
|---|---|---|---|---|
| 201 | office-management |
10.217.3.11 |
10.220.0.0/16 |
10.217.20.0/24 |
| 202 | office-servicesNon attivo |
10.217.3.12 |
10.221.0.0/16 |
10.217.21.0/24 |
| 203 | office-lambNon attivo |
10.217.3.13 |
10.222.0.0/16 |
10.217.22.0/24 |
| 204 | office-simplebookingNon attivo |
10.217.3.14 |
10.223.0.0/16 |
10.217.23.0/24 |
Playnet¶
| Cilium ID | Nome | K8s API VIP | Pods CIDR | LoadBalancers CIDR |
|---|---|---|---|---|
| 51 | playnet-management |
10.57.3.11 |
10.70.0.0/16 |
10.57.20.0/24 |
| 52 | playnet-services |
10.57.3.12 |
10.71.0.0/16 |
10.57.21.0/24 |
| 53 | playnet-lamb |
10.57.3.13 |
10.72.0.0/16 |
10.57.22.0/24 |
| 54 | playnet-simplebooking |
10.57.3.14 |
10.73.0.0/16 |
10.57.23.0/24 |
Siziano¶
| Cilium ID | Nome | K8s API VIP | Pods CIDR | LoadBalancers CIDR |
|---|---|---|---|---|
| 1 | siziano-management |
10.7.3.11 |
10.20.0.0/16 |
10.7.20.0/24 |
| 2 | siziano-services |
10.7.3.12 |
10.21.0.0/16 |
10.7.21.0/24 |
| 3 | siziano-lamb |
10.7.3.13 |
10.22.0.0/16 |
10.7.22.0/24 |
| 4 | siziano-simplebooking |
10.7.3.14 |
10.23.0.0/16 |
10.7.23.0/24 |
Failure domains¶
Region¶
Nel design della nostra infrastruttura Kubernetes il concetto di Compute Cluster in vSphere corrisponde a quello di region.
Ogni sito geografico della nostra infrastruttura mette a disposizione un Compute Cluster come ambiente per la sua region Kubernetes.
| Sito | Compute Cluster | Region |
|---|---|---|
| Ufficio | OFF-CL | office |
| Playnet | PLY-CL | playnet |
| Siziano | SIZ-CL | siziano |
Zone¶
L'host fisico (ESXi), membro del Compute Cluster designato come region, rappresenta una zone della region.
Il singolo nodo ESXi è così considerato il failure domain nella distribuzione dei nodi Kubernetes.
| Compute Cluster | ESXi Host | Region | Zone |
|---|---|---|---|
| CL-QNT | qnt-esx01.qntdev.com | office |
zone-a |
| CL-QNT | qnt-esx02.qntdev.com | office |
zone-b |
| CL-QNT | qnt-esx03.qntdev.com | office |
zone-b |
| PLY-CL | ply-esxi-01.simplebooking.local | playnet |
zone-a |
| PLY-CL | ply-esxi-02.simplebooking.local | playnet |
zone-b |
| PLY-CL | ply-esxi-03.simplebooking.local | playnet |
zone-b |
| SIZ-CL | siz-esxi-01.simplebooking.local | siziano |
zone-a |
| SIZ-CL | siz-esxi-02.simplebooking.local | siziano |
zone-b |
| SIZ-CL | siz-esxi-03.simplebooking.local | siziano |
zone-b |
Requisiti di una "region"¶
-
Ogni
regionè un ambiente Kubernetes distribuito su un Compute Cluster all'interno di unsitogeografico. -
L'ambiente Kubernetes di ogni
regionè concepito per poter ospitare fino a 20 clusters, composti cumulativamente da un massimo di 180 nodi. -
Gli host ESXi appartenenti alla stessa
region(Compute Cluster) hanno accesso ad uno o più storage condivisi (SAN) che consentano il trasporto di volumi persistenti (PV K8s) da un nodo all'altro dellaregion. -
Le
regionsono omogenee dal punto di vista delle configurazioni di computing, networking e storage, rispondono cioè alla medesima topologia. -
Le subnet pubbliche di una
region(1) fanno parte del perimetrofrontend/16del segmento delsitogeografico cui laregionappartiene.-
Sono considerate pubbliche, cioè routabili dal network più ampio:
kubernetes.cmpkubernetes.balancers
Non è considera pubblica:
kubernetes.pods
(il routing avviene su un overlay network che poggia sukubernetes.cmp.nodes)
-
-
Il firewall perimetrale del
sitogeografico ha un piede nella VLANkubernetes.cmpe agisce come default gateway della sua subnet. Esso provvede anche al routing dei pacchetti versokubernetes.balancers, ottenendo le rotte opportune attraverso il peering con i routers facenti parte dikubernetes.cmp.bgp.
Topologia di una "region"¶
Per descrivere i componenti di computing e networking di una region utiliziamo la seguente nomenclatura.
kubernetes.cmp¶
Identifica:
- una VLAN cui è associata una subnet
/24, per convenzione la.3.0/24del perimetrofrontend/16delsito - l'insieme delle VM che poggiano sulla VLAN
| Region | VLAN ID | Nome Network in vSphere | Subnet |
|---|---|---|---|
| office | 2703 | 2703-KUBERNETES |
10.217.3.0/24 |
| playnet | 753 | 753-KUBERNETES |
10.57.3.0/24 |
| siziano | 703 | 703-KUBERNETES |
10.7.3.0/24 |
kubernetes.cmp.gw¶
Identifica tanto il primo IP della kubernetes.cmp, quanto l'oggetto di computing a cui è assegnato, ossia il firewall perimetrale del sito.
| Region | IP | Computer |
|---|---|---|
| office | 10.217.3.1 |
FW Perimetrale Palo Alto |
| playnet | 10.57.3.1 |
FW Perimetrale Palo Alto |
| siziano | 10.7.3.1 |
FW Perimetrale Palo Alto |
kubernetes.cmp.jump¶
Identifica tanto il secondo IP della kubernetes.cmp, quanto la VM Kubernetes Jump della region.
| Region | IP | VM |
|---|---|---|
| office | 10.217.3.2 |
office-k8s-jump |
| playnet | 10.57.3.2 |
playnet-k8s-jump |
| siziano | 10.7.3.2 |
siziano-k8s-jump |
kubernetes.cmp.auth¶
Identifica tanto il terzo IP della kubernetes.cmp, quanto la VM Kubernetes Auth della region.
| Region | IP | VM |
|---|---|---|
| office | 10.217.3.3 |
office-k8s-auth |
| playnet | 10.57.3.3 |
playnet-k8s-auth |
| siziano | 10.7.3.3 |
siziano-k8s-auth |
kubernetes.cmp.k8s-api¶
Identifica il range di indirizzi IP della kubernetes.cmp che va da .11/32 a .30/32.
Questi sono i Virtual IP (VIP) che saranno assegnati, uno per cluster, alle API Kubernetes dei clusters operanti nella region.
| Region | kubernetes.cmp.k8s-api |
|---|---|
| office | 10.217.3.{11-30} |
| playnet | 10.57.3.{11-30} |
| siziano | 10.7.3.{11-30} |
kubernetes.cmp.nodes¶
Identifica sia il range di indirizzi IP della kubernetes.cmp che va da .100/32 a .199/32, che le VM a cui tali indirizzi verranno assegnati, ossia i nodi Kubernetes.
| Region | kubernetes.cmp.nodes |
|---|---|
| office | 10.217.3.{100-199} |
| playnet | 10.57.3.{100-199} |
| siziano | 10.7.3.{100-199} |
kubernetes.cmp.bgp¶
Identifica i routers BGP della region (e gli indirizzi IP loro assegnati) che hanno il ruolo di trasportare verso il firewall perimetrale le rotte relative ai Load Balancers istanziati in kubernetes.
| Region | BGP 1 (IP/VM) | BGP 2 (IP/VM) | BGP 3 (IP/VM) |
|---|---|---|---|
| office | 10.217.3.250office-k8s-bgp-router-1 |
10.217.3.251office-k8s-bgp-router-2 |
10.217.3.252office-k8s-bgp-router-3 |
| playnet | 10.57.3.250playnet-k8s-bgp-router-1 |
10.57.3.251playnet-k8s-bgp-router-2 |
10.57.3.252playnet-k8s-bgp-router-3 |
| siziano | 10.7.3.250siziano-k8s-bgp-router-1 |
10.7.3.251siziano-k8s-bgp-router-2 |
10.7.3.252siziano-k8s-bgp-router-3 |
kubernetes.pods¶
Identifica l'insieme di /16 riservate ai Pods della region.
Ad ogni cluster kubernetes viene assegnata una delle /16.
| Region | kubernetes.pods |
|---|---|
| office | 10.{220-239}.0.0/16 |
| playnet | 10.{70-89}.0.0/16 |
| siziano | 10.{20-39}.0.0/16 |
Routabilità dei pods
Gli IP dei pods non sono routabli dal network esterno ad un cluster kubernetes. La loro routabilità all'interno del cluster avviene per mezzo di un overlay che i nodi instaurano fra loro.
Pertanto non vi sarebbero problemi qualora gli IP loro assegnati dovessero essere usati altrove nell'intranet.
Occorre prestare attenzione solo ai casi in cui si ritiene che un determinato servizio presente nell'intranet ed esterno al mondo kubernetes debba venir consumato dai servizi intra-kubernetes.
kubernetes.balancers¶
Identifica l'insieme di /24 riservate ai LoadBalancers della region. Per convenzione vanno dalla .20.0/24 alla .39.0/24 della subnet frontend/16 del sito.
| Region | kubernetes.balancers |
|---|---|
| office | 10.217.{20-39}.0/24 |
| playnet | 10.57.{20-39}.0/24 |
| siziano | 10.7.{20-39}.0/24 |