# Kubernetes

{% hint style="warning" %}
Actuellement, l'installation d'un cluster microk8s n'est géré que sur Ubuntu 20.04 ou 24.04.\
Les versions de microk8s supportées pour Ubuntu 20.04 et 22.04 sont respectivement la 1.28 et 1.30.
{% endhint %}

{% hint style="danger" %}
Muppy requière une interface privée pour installer microk8s. Les interfaces privées peuvent être fourni par votre cloud provider ou en utilisant tailscale
{% endhint %}

## Introduction

Un cluster single node est un cluster k8s qui ne contient qu'une seul noeud sur lequel tournent:

* le Control Plane
* Kubelet (worker)
* PostgreSQL (cf. options)

Après avoir enrôlé votre **Host** avec Muppy, celui-ci est prêt pour l'installation d'un cluster microk8s. Si vous n'avez pas d'interface privée, nous vous conseillons d'utiliser tailscale.

{% hint style="info" %}
Il y a trois options pour PostreSQL:

* Ne pas l'installer
* l'installer sur le Node
* l'installer sur un host distinct.
  {% endhint %}

## Stratégies de sécurité <a href="#strategies-de-securite" id="strategies-de-securite"></a>

2 stratégies de sécurité des Clusters Kubernetes sont gérées par Muppy actuellement:

* Private
* Public (Mode WAF ou Whitelist)

### Private

Dans ce mode, tout est publié sur l'IP Privée (Tailscale) et le firewall est configurée pour ne laisser passer que les flux administratifs.

Cette stratégie est bien adaptée aux serveurs de developpement ou contenant des informations sensibles. Mais ils sont complètement isolés.

Dans cette confguration, aucun service n'est configuré sur l'IP Public.

### Public

Dans ce mode, chaque Service peut être publié sur l'interface Public ou Private.

Pour cela, Muppy installe un Router TCP (Level 4) qui redirige le traffic TCP de l'IP Public vers l'IP Privée.

En complément, les Services publiés sur l'interface Public peuvent être filtrés en utilisant:

* **ipWhiteListing** ; l'accès est réservé à une liste d'address IP qui peut être mise à jour dynamiquement (CIDR Dynamic Range)
* **TocToc** ; l'accès est géré par Muppy TocToc qui permet de gérer les accès par email ou autres moyens.
* **HTTP Basic Auth** ; permet d'ajouter une protection rudimentaire par user et mot de passe <mark style="color:red;">**(A absolument éviter**</mark><mark style="color:red;">)</mark>.

*Ces 3 systèmes de filtrage sont adaptés aux sites réservés à un usage interne, mais ils sont inutiles pour un site Public.*

{% hint style="warning" %}
Pour maximiser la sécurité, les packages d'infrastructure déployés par Muppy, sont toujours déployés sur l'IP Private et filtrés par IP Whitelisting.
{% endhint %}

#### **Sites internet Public**

Pour les sites complètement Public, Muppy permet de filtrer toutes les requêtes avec **OWASP ModSecurity Core Rule Set.**

{% hint style="danger" %}
Si votre site Public est ouvert à une volume important, nous vous conseillons de déployer un niveau de filtrage / sécurité supplémentaire.
{% endhint %}

### Conclusion

Avant de lancer l'installation, vous devez avoir:

* Sélectionné une stratégie de sécurité: private ou public
* \[Option] Défini une liste d'IP Fixes autorisées à accéder aux services publiés par le cluster

## Prérequis

1. Le Host doit disposer d'au moins une interface Private.
2. Vous avez défini la stratégie de sécurité à appliquer au Cluster parmis les options suivantes:
   * IP Publique + Mesh VPN (Tailscale, Nebula, Wireguard,...)
   * IP Publique + IP Private
   * IP Private
3. Vous avez créer un CIDR Dynamic Range qui contient au minimum l'IP Public du Host. Ceci est obligtoire car Muppy va protéger les Dashboards en les publiant sur le réseau Private et en les "whitelistant" avec le contenu de ce CIDR Dynamic Range.\
   Vous devez ajouter l'IP public du Host pour laisser passer le traffic Tailscale.
4. Si le cluster est accessible publiquement, vous devez autoriser le traffic entrant sur le(s) port(s) 443 (et 80).\
   Pour cela, utilisez l'onglet UFW de l'objet Host de Muppy.

{% hint style="warning" %}
Pour l'instant seul l'option IP Publique + Tailscale rentre dans le cadre du support.
{% endhint %}

## Installation

Les étapes d'installation sont les suivantes:

* Provisionner un Host **avec Ubuntu 20.04** et enrollez le dans Muppy.
* Installer Tailscale
* Installer microk8s
* Installer PostgreSQL
* Installer les packages d'infrastructure

## Références

* <https://microk8s.io/docs/configure-host-interfaces>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.muppy.io/guides/kubernetes.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
