K8s - Architecture

Il existe 3 topologies possibles pour le cluster K8s fourni par cegedim.cloud :

  • Standalone : les charges de travail sont déployées dans un seul centre de données sans plan de reprise après sinistre.

  • Standard : les charges de travail sont toujours déployées dans un seul centre de données, mais elles sont protégées contre un désastre du centre de données en utilisant un centre de données secondaire comme basculement.

  • Haute disponibilité : les charges de travail sont déployées dans deux centres de données et aucune interruption des services en cas de sinistre du centre de données ne peut être obtenue avec un déploiement multi-réplica correctement distribué.

Topologies

Topologie de calcul

cegedim.cloud fournit une topologie de calcul basée sur :

  • Région : une paire de centres de données

  • Area : isolation du réseau d'infrastructure entre les locataires

  • Zones de disponibilité : à l'intérieur d'une zone, infrastructure isolée pour le calcul et le stockage.

Topologies des clusters Kubernetes

Les clusters Kubernetes peuvent être déployés à l'aide de 2 topologies :

TopologiesCentre de données des mastersCentre de données des workersZones de disponibilité des workersZones de disponibilité du clusterProtection reprise après sinistreRecovery Time Objective (RTO)

Standard

1

1

2

2

4h

Haute Disponibilité

3

2

3

4

0 - 5 min

En fonction de vos exigences en termes de RTO et de coûts, vous pouvez choisir la topologie la mieux adaptée à vos besoins.

Disponibilité des topologies

TopologyEB-EMEAEB-HDSET-EMEAET-HDS

Standard

High Availability

Pour plus de détails sur la topologie de haute disponibilité, veuillez suivre cette page : Haute Disponibilité

Clés de topologie

cegedim.cloud utilise des clés topologiques standard :

CléComposant

topology.kubernetes.io/region

Région

topology.kubernetes.io/zone

Zone de disponibilité

kubernetes.io/hostname

FQDN du noeud

Depuis Kubernetes > 1.20, failure-domain.beta.kubernetes.io/zone est obsolète mais reste disponible en cas de préexistence. Seul topology.kubernetes.io/zone sera officiellement maintenu.

Composants et versions

Voici la liste des composants et des outils qui sont déployés dans un cluster standard livré :

ComposantsVersions

Rancher

2.7.6

Kubernetes

1.26

Ingress controllers NGINX

1.9.0

Prometheus

2.38.0

Grafana

9.1.5

Helm

3.11.3

CSI Ceph

3.9.0

Node OS

Ubuntu 20.04

CNI - canal (Calico+Flannel)

3.25

Docker

20.10.8

Architecture réseau

Voici un schéma avec tous les composants du réseau expliqués :

  • Deux pods de 2 namespaces appartenant au même projet Rancher peuvent communiquer entre eux.

  • Deux pods de 2 namespaces appartenant à deux projets Rancher différents ne peuvent pas communiquer entre eux à moins que l'utilisateur ne définisse une Network Policy dédiée à ce besoin.

  • Les pods d'un projet Rancher nommé System peuvent communiquer avec les pods d'autres projets Rancher.

  • Les pods ne peuvent envoyer des requêtes qu'aux serveurs du même VLAN, à moins qu'une règle d'ouverture de réseau spécifique ne soit configurée entre les deux VLANs.

  • Les pods ne peuvent pas envoyer de requêtes à Internet à moins qu'un proxy ne soit configuré à l'intérieur du pod ou qu'une règle d'ouverture de réseau spécifique ne soit configurée pour le VLAN concerné.

Flux entrants

  • Les requêtes vers le serveur api kube peuvent faire l'objet d'une proxy inverse par l'URL Rancher.

  • La charge de travail hébergée par les pods ne peut pas être directement accessible depuis l'extérieur du cluster K8S, mais via une couche d'entrée pour le protocole HTTP ou via un service NodePort pour le protocole TCP avec un équilibreur de charge respectif.

Ingress Controller : nginx

nginx est l'ingress controller déployé pour exposer vos workloads. Vous pouvez trouver la documentation pertinente sur le Github officiel à l'adresse :

Deux ingress controllers sont déployés :

  • Un exposé au réseau interne de Cegedim

    • ingress controller nginx

    • écoute sur chaque nœud de travail sur le port :80

    • il s'agit de la classe d'entrée par défaut (aucune classe d'entrée ne doit être spécifiée).

  • Un exposé à internet

    • nginx ingress controller - vous pouvez demander à avoir un ingress controller externe pour nginx.

    • écoute de chaque nœud de travail sur le port : 8081

    • cette ingress classe est : nginx-ext

      • en utilisant l'annotation : kubernetes.io/ingress.class:"nginx-ext"

Équilibrage de charge, DNS et certificats

Un cluster K8s est livré avec :

  • Un Elastic Secured Endpoint, géré par des appliances F5, exposant la charge de travail K8s au réseau interne de Cegedim (une fois que vous êtes connecté au LAN de Cegedim, soit physiquement, soit par VPN).

  • Une résolution DNS *.<votreclustername>.ccs.cegedim.cloud vers ce point d'accès.

  • Un certificat SSL *.<votreclustername>.ccs.cegedim.cloud configuré

Demande de configuration spécifique

Vous pouvez utiliser ITCare en cas de besoin d'une configuration spécifique :

  • Exposition de vos charges de travail à l'Internet ou à un lien privé

  • Utilisation d'un FQDN spécifique pour déployer votre charge de travail

  • Utilisation d'un certificat spécifique pour déployer votre charge de travail

  • Utilisation de Traefik comme fournisseur d'intrusion au lieu de nginx

  • Ajout d'autres fournisseurs d'entrée

  • Accès aux ressources en dehors du cluster

Hardening des clusters

Pour plus d'informations concernant le hardening de Kubernetes, nous vous invitons à consulter cette page : Hardening

Stockage persistant

Pour plus d'informations sur la solution de stockage persistant disponible pour cegedim.cloud de cegedim.cloud, veuillez suivre cette page : Stockage Persistant

Dernière mise à jour