Vai al contenuto

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)

  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-services
Non attivo
10.217.3.12 10.221.0.0/16 10.217.21.0/24
203 office-lamb
Non attivo
10.217.3.13 10.222.0.0/16 10.217.22.0/24
204 office-simplebooking
Non 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"

  1. Ogni region è un ambiente Kubernetes distribuito su un Compute Cluster all'interno di un sito geografico.

  2. L'ambiente Kubernetes di ogni region è concepito per poter ospitare fino a 20 clusters, composti cumulativamente da un massimo di 180 nodi.

  3. 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 della region.

  4. Le region sono omogenee dal punto di vista delle configurazioni di computing, networking e storage, rispondono cioè alla medesima topologia.

  5. Le subnet pubbliche di una region (1) fanno parte del perimetro frontend/16 del segmento del sito geografico cui la region appartiene.

    1. Sono considerate pubbliche, cioè routabili dal network più ampio:

      • kubernetes.cmp
      • kubernetes.balancers

      Non è considera pubblica:

      • kubernetes.pods
        (il routing avviene su un overlay network che poggia su kubernetes.cmp.nodes)
  6. Il firewall perimetrale del sito geografico ha un piede nella VLAN kubernetes.cmp e agisce come default gateway della sua subnet. Esso provvede anche al routing dei pacchetti verso kubernetes.balancers, ottenendo le rotte opportune attraverso il peering con i routers facenti parte di kubernetes.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/24 del perimetro frontend/16 del sito
  • 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.250
office-k8s-bgp-router-1
10.217.3.251
office-k8s-bgp-router-2
10.217.3.252
office-k8s-bgp-router-3
playnet 10.57.3.250
playnet-k8s-bgp-router-1
10.57.3.251
playnet-k8s-bgp-router-2
10.57.3.252
playnet-k8s-bgp-router-3
siziano 10.7.3.250
siziano-k8s-bgp-router-1
10.7.3.251
siziano-k8s-bgp-router-2
10.7.3.252
siziano-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