---
# System prepended metadata

title: kubernetes-containerd

---

# **kubernetes-containerd**

# Commandes utiles et astuces
:file_folder: [ASTUCES.md](ASTUCES.md) - Recueil de commandes pratiques et astuces pour la gestion quotidienne du cluster

---

# Configuration des 3 VMs (1 master, 2 worker) et déploiement d'un cluster Kubernetes avec KubeAdm

> **Préparation de l'environnement K8s**

:file_folder: [DEPLOIEMENT.md](DEPLOIEMENT.MD) - Guide étape par étape pour configurer les VMs et déployer le cluster

---

# Services déployés

## **Calico**
:file_folder: [Documentation Calico](calico/README.md) - Solution CNI pour la gestion du réseau entre les pods

## **Local-path-provisioner**
:file_folder: [Documentation Local-path-provisioner](local-path-provisioner/README.md) - Solution de stockage persistant

## **MetalLB**
:file_folder: [Documentation MetalLB](metallb/README.md) - Équilibreur de charge pour environnement bare metal permettant l'attribution automatique d'adresses IP aux services LoadBalancer

## **Cert-Manager**
:file_folder: [Documentation Cert-Manager](cert-manager/README.md) - Gestionnaire de certificats automatisant l'émission et le renouvellement des certificats TLS

## **Ingress-Nginx-Controller**
:file_folder: [Documentation Ingress](ingress-nginx/README.md) - Contrôleur d'entrée pour exposer les services HTTP/HTTPS à l'extérieur du cluster

## **Kubernetes Dashboard**
:file_folder: [Documentation Dashboard](kubernetes-dashboard/README.md) - Interface web pour la gestion et la surveillance du cluster Kubernetes

## **Prometheus & Grafana**
:file_folder: [Documentation Monitoring](prometheus-syslab/README.md) - Stack de surveillance pour collecter et visualiser les métriques du cluster

## **RBAC Manager**
:file_folder: [Documentation RBAC](rbac-manager/README.md) - Outil simplifiant la gestion des rôles et des autorisations dans Kubernetes

## **Argo CD**
:file_folder: [Documentation Argo CD](argocd/README.md) - Outil GitOps pour la gestion des déploiements continus et la synchronisation avec les dépôts Git

## **Rancher**
:file_folder: [Documentation Rancher](rancher/README.md) - Plateforme de gestion multi-cluster pour gouverner et administrer les environnements Kubernetes

---

## Mise en place de quotas sur les  ressources
Après l'utilisation et le déploiement des différents services, nous pouvons appliquer dans chacun des fichiers ressources.yaml en l'absence d'un service commun des quotas lié à leurs fonctionnements.
### Ressource quota Kubernetes-Dashboard
![AnyDesk_5L18OfJdVA](https://hackmd.io/_uploads/SJWqPFmip.png)
### 

---

# Exposer nos services à l'aide de `MetalLB` et `Ingress-Nginx-Controller`

Pour accéder à nos différents services, nous avons créés des ressources `Ingress`

#### Créer l'ingress de Kubernetes-Dashboard à partir du fichier `ingress-dashboard.yaml`
**:open_file_folder: [`ingress-dashboard.yaml`](kubernetes-dashboard/ingress-dashboard.yaml)**
```
kubectl create -f kubernetes-dashboard/ingress-dashboard.yaml
```

![image](https://hackmd.io/_uploads/B1WPStmsT.png)

---

# Gestion des rôles et droits
## Tableau des rôles
Le RBAC (Role-Based Access Control) est crucial pour définir et gérer les permissions d'accès aux ressources Kubernetes. Voici un tableau illustrant la création d'un rôle spécifique :

![tableau role rbac](https://hackmd.io/_uploads/SJ5zukn9p.png)

> Lister les api-resources avec les verbs associés
```
 kubectl api-resources -o wide
```
![Api-resources_verbs](https://hackmd.io/_uploads/HyKRvx2cT.png)


## RBAC Natif
### Création des comptes
Lorsqu'on crée des comptes dans Kubernetes, il est essentiel de définir les rôles appropriés pour garantir un accès sécurisé et limité aux ressources.

>**:mens: : admin-kubernetes**

#### Création d'un `ServiceAccount`
Pour créer un service account nommé admin-kubeadm, utilisez la commande suivante :
```
kubectl create serviceaccount admin-kubeadm
```

#### Création d'un `ClusterRôle` admin-full pour le cluster kubernetes
Le **`ClusterRôle` `admin-full`** est défini avec des **verbes autorisés** et des **ressources spécifiques**. Utilisez la commande suivante pour créer ce rôle :
```
kubectl create clusterrole admin-full --verb=get,list,watch,create,update --resource=pods,pods/status,namespaces,deployments
```

| Rôle | Verbes Autorisés | Ressources Autorisées |
| -------- | -------- | -------- |
| admin-full	     | get, list, watch, create, update	     | pods, pods/status, namespaces, deployments |

#### Création d'un `ClusterRoleBinding` pour accoder l'Accès Global sur tout le cluster au `ServiceAccount`
Pour accorder des autorisations à l'échelle du cluster au service account admin-kubeadm, utilisez la commande suivante pour créer un cluster role binding :
```
kubectl create clusterrolebinding admin-binding --clusterrole=admin-full --serviceaccount=default:admin-kubeadm
```
Cela permet au compte de service **`admin-kubeadm`** d'agir sur toutes les ressources spécifiées dans le rôle admin-full à l'échelle du cluster.

## RBAC Manager
### Création d'un fichier **:open_file_folder: [`RBACDefinitions-users.yaml`](https://)**

### Définir la ressource RBACDefinition
```
apiVersion: rbacmanager.reactiveops.io/v1beta1
kind: RBACDefinition
metadata:
  name: rbac-definition-users
```

### Créer un `ClusterRôle` cluster-admins avec un `ClusterRôleBinding` sur ce `ClusterRôle`
#### Définir un `ClusterRôle` administrateur du cluster, possède les droits sur tous les namespaces
```
rbacBindings:
  # ClusterRole - Administrateur du cluster, possède les droits sur tous les namespaces
  - name: cluster-admins
    subjects:
      - kind: User
        name: user01@example.com
      - kind: User
        name: user02@example.com
```
#### Définir un `ClusterRôleBinding` qui donne l'accès au cluster-admin pour ces utilisateurs
```
    ## A Cluster Role Binding that give cluster-admin access to these users
    clusterRoleBindings:
      - clusterRole: cluster-admin
```
### Créer des `User` qui auront les permissions `view` et `edit` sur les namespaces `prometheus-syslab` et `kubernetes-dashboard`
```
  # Administrateurs des namespaces prometheus-syslab et kubernetes-dashboard
  - name: namespaced-admins
    subjects:
      - kind: User
        name: dave@example.com
    roleBindings:
      ## A Role Binding that gives Dave and Joe edit access in the prometheus-syslab namespace
      - clusterRole: edit, view
        namespace: prometheus-syslab
      ## A Role Binding that gives Dave and Joe view access in the kubernetes-dashboard namespace
      - clusterRole: edit, view
        namespace: kubernetes-dashboard
```
### Créer un `User` `admin-dashboard` qui sera Administrateur du namespace `kubernetes-dashboard` avec l'autorisation cluster-admin
```
  # Administrateur du namespaces kubernetes-dashboard
  - name: kubernetes-admin-user
    subjects:
      - kind: User
        name: admin-user
    roleBindings:
      ## A Role Binding that gives Dave and Joe edit access in the prometheus-syslab namespace
      - clusterRole: cluster-admin
        namespace: kubernetes-dashboard
```
### Créer des `User` `admin-dashboard` qui aura la permission `view` sur les ressources des namespaces `prometheus-syslab` `kubernetes-dashboard`
```
  # Utilisateurs des namespaces prometheus-syslab et kubernetes-dashboard
  - name: namespaced-users
    subjects:
      - kind: User
        name: dave@example.com
      - kind: User
        name: joe@example.com
    roleBindings:
      - clusterRole: view
        namespace: prometheus-syslab
      - clusterRole: view
        namespace: kubernetes-dashboard
```
#### ServiceAccount - bots
```
  - name: cluster-serviceAccounts
    ## A Service Account named ci-bot in the rbac-manager-syslab namespace
    subjects:
      - kind: ServiceAccount
        name: ci-bot
        namespace: rbac-manager-syslab

    ## Role Binding(s) that grant the ci-bot Service Account edit access in all namespaces with ci=edit labels
    # roleBindings:
    #   - clusterRole: edit
    #     namespaceSelector:
    #       matchLabels:
    #         ci: edit

    ## Role Binding(s) that grant the ci-bot Service Account admin access in all namespaces with app=web or app=queue labels

      # - clusterRole: admin
      #   namespaceSelector:
      #     matchExpressions:
      #       - key: app
      #         operator: In
      #         values:
      #           - web
      #           - queue
```