chore: update
This commit is contained in:
@@ -2,7 +2,7 @@ replicaCount: 2
|
||||
|
||||
image:
|
||||
repository: backend-mln
|
||||
tag: helm
|
||||
tag: latest
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
service:
|
||||
@@ -27,10 +27,6 @@ persistence:
|
||||
uploads:
|
||||
enabled: true
|
||||
size: 5Gi
|
||||
# Répliqué sur 2 nœuds (Longhorn) : survit à la perte d'un nœud. Voir
|
||||
# deploy/longhorn/storageclass.yml pour le prérequis d'installation.
|
||||
# N'a d'effet que pour storage_driver=local (les uploads S3 ne passent
|
||||
# jamais par ce PVC, voir ProvisionConfig.StorageDriver).
|
||||
storageClass: "longhorn-replicated"
|
||||
accessMode: ReadWriteOnce
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ apiUrl: ""
|
||||
|
||||
image:
|
||||
repository: frontend-mln
|
||||
tag: helm
|
||||
tag: latest
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
service:
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 1. Deny-by-default : sans règle explicite plus bas, AUCUN trafic entrant
|
||||
# ni sortant n'est autorisé pour les pods de ce namespace. C'est ce qui
|
||||
# empêche par défaut toute communication vers un autre namespace de démo
|
||||
# et vers l'API Kubernetes.
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: default-deny-all
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
@@ -0,0 +1,25 @@
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 4. DNS uniquement vers kube-system, port 53. C'est la SEULE ouverture vers
|
||||
# kube-system : aucun accès à autre chose dans ce namespace, et l'API
|
||||
# server (kubernetes.default.svc, namespace "default") n'est jamais
|
||||
# autorisé nulle part dans ce chart -> bloqué par le deny-by-default.
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-egress-dns
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: {{ .Values.kubeSystemNamespace }}
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
- protocol: TCP
|
||||
port: 53
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 3. Ingress externe autorisé : uniquement depuis le Traefik partagé
|
||||
# (aucune autre démo, aucun autre client, ne peut ouvrir de connexion
|
||||
# directe vers les pods de cette démo).
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-ingress-from-traefik
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
ingress:
|
||||
- from:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: {{ .Values.traefikNamespace }}
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 5. Internet public sortant (webhooks Telegram/NowPayments, GPS TomTom...),
|
||||
# en excluant les plages privées : ça couvre par construction l'IP de
|
||||
# l'API server et celles des autres namespaces, sans avoir besoin de la
|
||||
# connaître explicitement.
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-egress-internet
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 0.0.0.0/0
|
||||
except:
|
||||
{{ toYaml .Values.blockedEgressCIDRs | nindent 14 }}
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 2. Trafic intra-démo : frontend <-> backend <-> postgresql/redis, dans
|
||||
# CE namespace uniquement (le podSelector du namespaceSelector par défaut
|
||||
# de Kubernetes limite déjà à ce namespace : pas de namespaceSelector ici
|
||||
# équivaut à "même namespace").
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-intra-namespace
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
- from:
|
||||
- podSelector: {}
|
||||
egress:
|
||||
- to:
|
||||
- podSelector: {}
|
||||
@@ -1,106 +0,0 @@
|
||||
# -------------------------------------------------------------------
|
||||
# 1. Deny-by-default : sans règle explicite plus bas, AUCUN trafic entrant
|
||||
# ni sortant n'est autorisé pour les pods de ce namespace. C'est ce qui
|
||||
# empêche par défaut toute communication vers un autre namespace de démo
|
||||
# et vers l'API Kubernetes.
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: default-deny-all
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 2. Trafic intra-démo : frontend <-> backend <-> postgresql/redis, dans
|
||||
# CE namespace uniquement (le podSelector du namespaceSelector par défaut
|
||||
# de Kubernetes limite déjà à ce namespace : pas de namespaceSelector ici
|
||||
# équivaut à "même namespace").
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-intra-namespace
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
- Egress
|
||||
ingress:
|
||||
- from:
|
||||
- podSelector: {}
|
||||
egress:
|
||||
- to:
|
||||
- podSelector: {}
|
||||
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 3. Ingress externe autorisé : uniquement depuis le Traefik partagé
|
||||
# (aucune autre démo, aucun autre client, ne peut ouvrir de connexion
|
||||
# directe vers les pods de cette démo).
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-ingress-from-traefik
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Ingress
|
||||
ingress:
|
||||
- from:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: {{ .Values.traefikNamespace }}
|
||||
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 4. DNS uniquement vers kube-system, port 53. C'est la SEULE ouverture vers
|
||||
# kube-system : aucun accès à autre chose dans ce namespace, et l'API
|
||||
# server (kubernetes.default.svc, namespace "default") n'est jamais
|
||||
# autorisé nulle part dans ce chart -> bloqué par le deny-by-default.
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-egress-dns
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: {{ .Values.kubeSystemNamespace }}
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
- protocol: TCP
|
||||
port: 53
|
||||
|
||||
---
|
||||
# -------------------------------------------------------------------
|
||||
# 5. Internet public sortant (webhooks Telegram/NowPayments, GPS TomTom...),
|
||||
# en excluant les plages privées : ça couvre par construction l'IP de
|
||||
# l'API server et celles des autres namespaces, sans avoir besoin de la
|
||||
# connaître explicitement.
|
||||
# -------------------------------------------------------------------
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: allow-egress-internet
|
||||
spec:
|
||||
podSelector: {}
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 0.0.0.0/0
|
||||
except:
|
||||
{{- toYaml .Values.blockedEgressCIDRs | nindent 14 }}
|
||||
@@ -13,7 +13,6 @@ kubeSystemNamespace: kube-system
|
||||
# Namespace du Traefik partagé (voir deploy/chart-gestion/traefik) : seule
|
||||
# origine externe autorisée à ouvrir une connexion ingress vers cette démo.
|
||||
traefikNamespace: traefik
|
||||
|
||||
# Plages privées exclues de l'egress "internet" autorisé (RFC1918) : empêche
|
||||
# tout mouvement latéral vers d'autres pods/namespaces/nœuds/l'API server par
|
||||
# IP directe, tout en laissant sortir vers l'internet public (Telegram,
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
apiVersion: v2
|
||||
name: gestion-resource-quota
|
||||
description: Plafond agrégé de ressources par namespace de démo (ResourceQuota + LimitRange) — empêche un client de saturer le cluster au détriment des autres démos, même via l'autoscaling (HPA) du backend/frontend.
|
||||
type: application
|
||||
version: 0.1.0
|
||||
appVersion: "1.0.0"
|
||||
@@ -0,0 +1,36 @@
|
||||
apiVersion: v1
|
||||
kind: ResourceQuota
|
||||
metadata:
|
||||
name: demo-quota
|
||||
spec:
|
||||
hard:
|
||||
requests.cpu: {{ .Values.quota.requestsCpu | quote }}
|
||||
requests.memory: {{ .Values.quota.requestsMemory | quote }}
|
||||
limits.cpu: {{ .Values.quota.limitsCpu | quote }}
|
||||
limits.memory: {{ .Values.quota.limitsMemory | quote }}
|
||||
pods: {{ .Values.quota.maxPods | quote }}
|
||||
persistentvolumeclaims: {{ .Values.quota.maxPVCs | quote }}
|
||||
|
||||
---
|
||||
# Défauts requests/limits pour tout container qui ne les préciserait pas —
|
||||
# nécessaire pour que le ResourceQuota ci-dessus n'empêche pas la création
|
||||
# de pods qui omettraient ces champs.
|
||||
apiVersion: v1
|
||||
kind: LimitRange
|
||||
metadata:
|
||||
name: demo-limits
|
||||
spec:
|
||||
limits:
|
||||
- type: Container
|
||||
defaultRequest:
|
||||
cpu: {{ .Values.limitRange.defaultRequestCpu | quote }}
|
||||
memory: {{ .Values.limitRange.defaultRequestMemory | quote }}
|
||||
default:
|
||||
cpu: {{ .Values.limitRange.defaultLimitCpu | quote }}
|
||||
memory: {{ .Values.limitRange.defaultLimitMemory | quote }}
|
||||
min:
|
||||
cpu: {{ .Values.limitRange.minCpu | quote }}
|
||||
memory: {{ .Values.limitRange.minMemory | quote }}
|
||||
max:
|
||||
cpu: {{ .Values.limitRange.maxCpu | quote }}
|
||||
memory: {{ .Values.limitRange.maxMemory | quote }}
|
||||
@@ -0,0 +1,34 @@
|
||||
# Plafonds calculés à partir du pire cas d'une démo au complet, HPA au max
|
||||
# (voir deploy/chart-gestion/{postgresql,redis,backend,frontend,lbtelegram}
|
||||
# /values.yaml — postgres 1 replica, redis 1 replica, backend jusqu'à 5
|
||||
# replicas, frontend jusqu'à 4, lbtelegram 1 replica si activé) :
|
||||
# requests cpu : 250m + 100m + 5×100m + 4×50m + 100m = 1150m -> arrondi 2
|
||||
# requests mem : 256 + 128 + 5×128 + 4×64 + 128 = 1408Mi -> arrondi 2Gi
|
||||
# limits cpu : 1000m + 500m + 5×500m + 4×200m + 500m = 5300m -> arrondi 6
|
||||
# limits mem : 1024 + 512 + 5×256 + 4×128 + 256 = 3584Mi -> arrondi 5Gi
|
||||
# Marge volontaire au-dessus du calcul pour laisser de la place à des pods
|
||||
# ponctuels (exec admin, job de migration) sans bloquer le provisioning.
|
||||
quota:
|
||||
requestsCpu: "2"
|
||||
requestsMemory: "2Gi"
|
||||
limitsCpu: "6"
|
||||
limitsMemory: "5Gi"
|
||||
# Cap dur sur le nombre de pods/PVC du namespace — empêche un pod-spam ou
|
||||
# une boucle de CrashLoop mal configurée d'épuiser les IP/ressources du
|
||||
# nœud. 3 PVC utilisés aujourd'hui (postgres, redis, uploads) + marge.
|
||||
maxPods: "20"
|
||||
maxPVCs: "5"
|
||||
|
||||
# Défauts appliqués à tout container qui ne préciserait pas ses propres
|
||||
# requests/limits — sans ça, le ResourceQuota ci-dessus rendrait la création
|
||||
# de pod obligatoirement explicite (K8s rejette un pod sans requests/limits
|
||||
# dans un namespace où un ResourceQuota les couvre).
|
||||
limitRange:
|
||||
defaultRequestCpu: "100m"
|
||||
defaultRequestMemory: "128Mi"
|
||||
defaultLimitCpu: "500m"
|
||||
defaultLimitMemory: "256Mi"
|
||||
minCpu: "10m"
|
||||
minMemory: "16Mi"
|
||||
maxCpu: "2"
|
||||
maxMemory: "1Gi"
|
||||
Reference in New Issue
Block a user