Il cluster Kubernetes per CloudVeneto presenta un'architettura in High Availability composta da:
- tre control-plane (cld-k8s-01, cld-k8s-02 e cld-k8s-03)
- un load-balancer (HAproxy + Keepalive)
- un numero dinamico di worker node creati dagli utenti di CloudVeneto attraverso un nostro meccanismo chiamato OpenStackNode (OSNode).
OpenStackNode
L'OpenStackNode è composto dai seguenti componenti lato server (control-plane):
- kube-osn-authn-webhook: layer di autenticazione
- supporta sia token Keystone che oidc (IAM)
- valida il token dal quale estrae le informazioni relative all'utente (nome, email, progetto, gruppo, ecc) e necessarie per il layer di autorizzazione
- gestisce una lista (configurabile) di IDP:
- kube-osn-authz-webhook: layer di autorizzazione a grana fine che implementa la multi-tenancy
- verifica l'owner della risorsa
- autorizza l'utente ad operare (get, update, delete) esclusivamente sulle sue risorse
- kube-osn-admission-webhook: webhook che inietta le informazioni relative all'utente in tutte le risorse da lui direttamente o indirettamente create (es: pod, deployment, ecc)
- kube-osn-operator: operator che gestisce il ciclo di vita dei worker node (VM) creati dall'utente
- ha una sua interfaccia openstacknodes.osnode.infn.it che definisce una nuova tipologia di risorsa: osn
- l'osn rappresenta un worker node implementato da una VM istanziata in una IaaS OpenStack come CloudVeneto
- ogni utente deve creare uno o più osn specifando il nome, flavor, key-pair, ecc.
Mentre lato client abbiamo due plugin per kubectl necessari per la fase di autenticazione e di configurazione del kubeconfig:
- kubectl-openstack:
- configura il kubeconfig
- genera un nuovo token Keystone nel caso non esista oppure sia spirato
- kubectl-aim:
- registra un nuovo client in iam
- configura il kubeconfig
- genera un nuovo token nel caso non esista oppure sia spirato