This commit is contained in:
Thibault Raquet 2024-06-26 11:45:32 +00:00
parent 6d79eb1f39
commit 57f12e186b
108 changed files with 7167 additions and 86429 deletions

View file

@ -2,7 +2,7 @@ stages:
- deploy
variables:
KUBERNETES_VERSION: 1.28.3
KUBERNETES_VERSION: 1.29.2
.deploy:
stage: deploy
@ -14,34 +14,13 @@ variables:
- when: never
before_script:
- apk update && apk add gettext git
- export $(cat ${ENV} | xargs)
- kubectl config use-context ${KUBE_CONTEXT}
- export $(cat ${ENV} | xargs) > /dev/null
script:
- |
echo "Update namespaces"
for namespace in $(find namespaces -name *.yaml);
do envsubst < $namespace > $namespace.tmp;
mv $namespace.tmp $namespace;
done
- |
echo "Update pre-releases"
for pre in $(find pre-releases -name *.yaml);
do envsubst < $pre > $pre.tmp; mv $pre.tmp $pre;
done
- |
echo "Update releases"
for release in $(find releases -name *.yaml);
do envsubst < $release > $release.tmp; mv $release.tmp $release;
done
- |
echo "Update post-releases"
for post in $(find post-releases -name *.yaml);
do envsubst < $post > $post.tmp; mv $post.tmp $post;
done
- |
echo "Deploy secrets"
for secret in $(find secrets -name *.yaml);
do envsubst < $secret | kubectl apply -f -;
echo "Update infrastructure directory"
for manifest in $(find infrastructure -name *.yaml);
do envsubst < $manifest > $manifest.tmp;
mv $manifest.tmp $manifest;
done
- |
echo "Pushing updated manifests in ${DEPLOY_BRANCH} branch"
@ -72,12 +51,12 @@ deploy:production:
extends:
- .deploy
variables:
KUBE_CONTEXT: ldc-web/cluster-k8s:k8s-ldc-web
KUBE_CONTEXT: ldc-web/cluster-k8s:prod-k8s-ldc-web
DEPLOY_BRANCH: deploy/production
environment:
name: production
rules:
- if: $CI_COMMIT_REF_NAME == "main"
- if: $CI_COMMIT_REF_NAME == "master"
when: manual
allow_failure: true
- when: never

View file

@ -1,23 +1,23 @@
ci_access:
projects:
- id: ldc-web/cluster-k8s
access_as:
impersonate:
username: kubernetes-admin-DEV-TEST-K8S-LDC-WEB
- id: ldc-web/projets/agis
- id: ldc-web/projets/crm
- id: ldc-web/projets/coupe-de-france-de-la-volaille
- id: ldc-web/projets/domaine-de-lanvaux
- id: ldc-web/projets/doux
- id: ldc-web/projets/galina
- id: ldc-web/projets/gen-game-web-instances/reghalal-ramadan-2024
- id: ldc-web/projets/gen-game-web-instances/le-gaulois-tdf-2024
- id: ldc-web/projets/gen-game-web-instances/tregalette-chandleur-2024
- id: ldc-web/projets/id-halal
- id: ldc-web/projets/jeusselin
- id: ldc-web/projets/l-hours
- id: ldc-web/projets/la-toque-angevine
- id: ldc-web/projets/ldc-web
- id: ldc-web/projets/le-gaulois
- id: ldc-web/projets/le-gaulois-pro
- id: ldc-web/projets/lionor
- id: ldc-web/projets/loue
- id: ldc-web/projets/loue-magie-de-noel
- id: ldc-web/projets/mas-d-auge
- id: ldc-web/projets/matines
@ -32,6 +32,8 @@ ci_access:
- id: ldc-web/projets/regalette
- id: ldc-web/projets/reghalal
- id: ldc-web/projets/report
- id: ldc-web/projets/rgpd
- id: ldc-web/projets/sbv
- id: ldc-web/projets/share-secure-content
- id: ldc-web/projets/showroom/showroom-bo
- id: ldc-web/projets/store-ldc

View file

@ -33,6 +33,7 @@ ci_access:
- id: ldc-web/projets/reghalal
- id: ldc-web/projets/report
- id: ldc-web/projets/rgpd
- id: ldc-web/projets/sbv
- id: ldc-web/projets/share-secure-content
- id: ldc-web/projets/showroom/showroom-bo
- id: ldc-web/projets/store-ldc

View file

@ -0,0 +1,47 @@
ci_access:
projects:
- id: ldc-web/projets/agis
- id: ldc-web/projets/crm
- id: ldc-web/projets/coupe-de-france-de-la-volaille
- id: ldc-web/projets/domaine-de-lanvaux
- id: ldc-web/projets/doux
- id: ldc-web/projets/galina
- id: ldc-web/projets/gen-game-web-instances/reghalal-ramadan-2024
- id: ldc-web/projets/gen-game-web-instances/le-gaulois-tdf-2024
- id: ldc-web/projets/gen-game-web-instances/tregalette-chandleur-2024
- id: ldc-web/projets/id-halal
- id: ldc-web/projets/jeusselin
- id: ldc-web/projets/l-hours
- id: ldc-web/projets/la-toque-angevine
- id: ldc-web/projets/ldc-web
- id: ldc-web/projets/le-gaulois
- id: ldc-web/projets/le-gaulois-pro
- id: ldc-web/projets/lionor
- id: ldc-web/projets/loue
- id: ldc-web/projets/loue-magie-de-noel
- id: ldc-web/projets/mas-d-auge
- id: ldc-web/projets/matines
- id: ldc-web/projets/nature-and-respect
- id: ldc-web/projets/nature-eleveurs
- id: ldc-web/projets/op-insta-instances/le-gaulois
- id: ldc-web/projets/ovoteam
- id: ldc-web/projets/poule-et-toque
- id: ldc-web/projets/prims
- id: ldc-web/projets/qrcollector/qrcollector-back
- id: ldc-web/projets/qrcollector/qrcollector-front
- id: ldc-web/projets/regalette
- id: ldc-web/projets/reghalal
- id: ldc-web/projets/report
- id: ldc-web/projets/rgpd
- id: ldc-web/projets/sbv
- id: ldc-web/projets/share-secure-content
- id: ldc-web/projets/showroom/showroom-bo
- id: ldc-web/projets/store-ldc
- id: ldc-web/projets/support-web
- id: ldc-web/projets/tregalette
- id: ldc-web/projets/vdme
- id: ldc-web/projets/volena
observability:
logging:
level: debug

View file

@ -1,5 +1,21 @@
# Cluster K8s
# Fixed version
| Composants | PROD_Actuel | PROD_Futur | Version_latest (app) | Version_chart_helm |
|------------ |--------------|------------|----------------------|--------------------|
| Cert-manager | 1.11.0 | 1.15.0 | 1.15.0 | 1.15.0 |
| FluxCD | no flux | 2.3.0 | 2.3.0 | 2.13.0 |
| Git-agent | 16.9.3 | 16.9.3 | 17.1.0 | 2.30 |
| Git-runner | 16.9.1 | 16.9.1 | 17.0.1 | 0.62.1 |
| MariaDB | 10.10 | 1.13.2 | 1.13.2 | 18.2.4 |
| Prometheus | 0.60.1 | 0.74.0 | 0.74.0 | 60.2.0 |
| Traefik | 2.9.6 | 3.0.2 | 3.0.2 | 28.3.0 |
| Velero | 1.10.1 | 1.13.2 | 1.13.2 | 6.7.0 |
| Vault | no vault | 1.16.1 | 1.16.1 | 0.28.0 |
# How does it work ?
```mermaid

View file

@ -1,66 +0,0 @@
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: game-2048
labels:
app: game-2048
spec:
replicas: 2
selector:
matchLabels:
app: game-2048
template:
metadata:
labels:
app: game-2048
spec:
containers:
- image: alexwhen/docker-2048 # 2048 image
name: game-2048
ports:
- name: web
containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: game-2048
spec:
selector:
app: game-2048
ports:
- port: 80
targetPort: web
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: game-2048
spec:
entryPoints: # We listen to requests coming from ports 80 and 443
- web
- websecure
routes:
- match: Host(`2048.k8s.s-web.fr`)
kind: Rule
services:
- name: game-2048 # Requests will be forwarded to this service
port: 80
tls:
secretName: 2048.k8s.s-web.fr
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: 2048.k8s.s-web.fr
spec:
dnsNames:
- 2048.k8s.s-web.fr
secretName: 2048.k8s.s-web.fr
issuerRef:
name: selfsigned # Use the issuer created previously
kind: ClusterIssuer

File diff suppressed because it is too large Load diff

View file

@ -13,7 +13,7 @@ spec:
name: flux-system
url: https://lab.s-web.fr/ldc-web/cluster-k8s.git
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flux-system
@ -22,70 +22,6 @@ spec:
interval: 10m0s
path: ./flux/production
prune: true
sourceRef:
kind: GitRepository
name: flux-system
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: namespaces
namespace: flux-system
spec:
interval: 1m0s
path: ./namespaces
prune: true
dependsOn:
- name: flux-system
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: pre-releases
namespace: flux-system
spec:
interval: 1m0s
path: ./pre-releases
prune: true
dependsOn:
- name: namespaces
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: releases
namespace: flux-system
spec:
interval: 1m0s
path: ./releases
prune: true
dependsOn:
- name: pre-releases
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
---
apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: post-releases
namespace: flux-system
spec:
interval: 1m0s
path: ./post-releases
prune: true
dependsOn:
- name: releases
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s

View file

@ -0,0 +1,44 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: cert-manager
namespace: flux-system
spec:
interval: 1m0s
path: ./infrastructure/cert-manager
prune: false
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: cert-manager
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: cert-manager
namespace: common-services
dependsOn:
- name: external-secrets-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: cert-manager-resources
namespace: flux-system
spec:
interval: 1m0s
path: ./infrastructure/cert-manager/resources
prune: false
dependsOn:
- name: cert-manager
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
timeout: 5m

View file

@ -0,0 +1,17 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flux-resources
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/flux-resources
prune: false
dependsOn:
- name: external-secrets-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
namespace: flux-system

View file

@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: gitlab-agent
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/gitlab-agent
prune: false
dependsOn:
- name: flux-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: gitlab-agent
namespace: common-services
timeout: 5m

View file

@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: gitlab-runner
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/gitlab-runner
prune: false
dependsOn:
- name: flux-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: gitlab-runner
namespace: common-services
timeout: 5m

View file

@ -0,0 +1,73 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: hashicorp-vault
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/hashicorp-vault
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
dependsOn:
- name: namespaces
namespace: flux-system
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: hashicorp
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: vault
namespace: common-services
timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: external-secrets
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/hashicorp-vault/external-secrets
prune: false
dependsOn:
- name: hashicorp-vault
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
namespace: flux-system
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: external-secrets
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: external-secrets-operator
namespace: common-services
timeout: 10m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: external-secrets-resources
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/hashicorp-vault/external-secrets/resources
prune: false
dependsOn:
- name: external-secrets
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
namespace: flux-system
timeout: 10m

View file

@ -0,0 +1,17 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ldc-custom
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/ldc-custom
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
dependsOn:
- name: prometheus-stack
namespace: flux-system
timeout: 5m

View file

@ -0,0 +1,26 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: mariadb
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/mariadb
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
dependsOn:
- name: external-secrets-resources
namespace: flux-system
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: bitnami
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: mariadb
namespace: common-services
timeout: 5m

View file

@ -0,0 +1,32 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: namespaces
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/namespaces
prune: false
dependsOn:
- name: flux-system
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: v1
kind: Namespace
name: common-services
- apiVersion: v1
kind: Namespace
name: production
- apiVersion: v1
kind: Namespace
name: review
- apiVersion: v1
kind: Namespace
name: staging
- apiVersion: v1
kind: Namespace
name: velero

View file

@ -0,0 +1,26 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: prometheus-stack
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/prometheus-stack
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
dependsOn:
- name: external-secrets-resources
namespace: flux-system
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: prometheus-community
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: prometheus-stack
namespace: common-services
timeout: 10m

View file

@ -0,0 +1,26 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: traefik
namespace: flux-system
spec:
interval: 1m0s
path: ./infrastructure/traefik
prune: false
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
name: traefik
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
name: traefik
namespace: common-services
dependsOn:
- name: cert-manager-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
timeout: 5m

View file

@ -0,0 +1,49 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: cert-manager
namespace: flux-system
spec:
interval: 1m0s
path: ./infrastructure/cert-manager
prune: false
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: cert-manager
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
name: cert-manager
namespace: common-services
dependsOn:
- name: namespaces
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: cert-manager-resources
namespace: flux-system
spec:
interval: 1m0s
path: ./infrastructure/cert-manager/resources
prune: false
healthChecks:
- apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
name: common-services
namespace: cert-manager
dependsOn:
- name: cert-manager
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
timeout: 5m

View file

@ -0,0 +1,14 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flux-resources
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/flux-resources
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
namespace: flux-system

View file

@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: gitlab-agent
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/gitlab-agent
prune: false
dependsOn:
- name: flux-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: gitlab-agent
namespace: common-services
timeout: 5m

View file

@ -0,0 +1,22 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: gitlab-runner
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/gitlab-runner
prune: false
dependsOn:
- name: flux-resources
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: gitlab-runner
namespace: common-services
timeout: 5m

View file

@ -0,0 +1,69 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: hashicorp-vault
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/hashicorp-vault
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
dependsOn:
- name: namespaces
namespace: flux-system
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: hashicorp
namespace: common-services
timeout: 5m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: external-secrets
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/hashicorp-vault/external-secrets
prune: false
dependsOn:
- name: hashicorp-vault
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
namespace: flux-system
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: external-secrets
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
name: external-secrets-operator
namespace: common-services
timeout: 10m
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: external-secrets-resources
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/hashicorp-vault/external-secrets/resources
prune: false
dependsOn:
- name: external-secrets
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
namespace: flux-system
timeout: 10m

View file

@ -0,0 +1,17 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ldc-custom
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/ldc-custom
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
dependsOn:
- name: prometheus-stack
namespace: flux-system
timeout: 5m

View file

@ -0,0 +1,23 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: mariadb
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/mariadb
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: bitnami
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
name: mariadb
namespace: common-services
timeout: 5m

View file

@ -0,0 +1,32 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: namespaces
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/namespaces
prune: false
dependsOn:
- name: flux-system
namespace: flux-system
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: v1
kind: Namespace
name: common-services
- apiVersion: v1
kind: Namespace
name: production
- apiVersion: v1
kind: Namespace
name: review
- apiVersion: v1
kind: Namespace
name: staging
- apiVersion: v1
kind: Namespace
name: velero

View file

@ -0,0 +1,23 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: prometheus-stack
namespace: flux-system
spec:
interval: 30s
path: ./infrastructure/prometheus-stack
prune: false
sourceRef:
kind: GitRepository
name: cluster-k8s
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: prometheus-community
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
name: prometheus-stack
namespace: common-services
timeout: 10m

View file

@ -0,0 +1,26 @@
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: traefik
namespace: flux-system
spec:
interval: 1m0s
path: ./infrastructure/traefik
prune: false
healthChecks:
- apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
name: traefik
namespace: common-services
- apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
name: traefik
namespace: common-services
dependsOn:
- name: cert-manager-resources
namespace: common-services
sourceRef:
kind: GitRepository
name: cluster-k8s
timeout: 5m

View file

@ -0,0 +1,18 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: cert-manager
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: cert-manager
version: 1.15.0
sourceRef:
kind: HelmRepository
name: cert-manager
namespace: common-services
values:
installCRDs: true

View file

@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: cert-manager
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.jetstack.io

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -0,0 +1,41 @@
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-k8s-${DOMAIN_NAME}
namespace: review
spec:
dnsNames:
- '*.review.${DOMAIN_NAME}'
secretName: wildcard-k8s-ldc
issuerRef:
name: letsencrypt-production-dns01
kind: ClusterIssuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-k8s-${DOMAIN_NAME}
namespace: staging
spec:
dnsNames:
- '*.staging.${DOMAIN_NAME}'
secretName: wildcard-k8s-ldc
issuerRef:
name: letsencrypt-production-dns01
kind: ClusterIssuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-k8s-${DOMAIN_NAME}
namespace: production
spec:
dnsNames:
- '*.k8s.${DOMAIN_NAME}'
secretName: wildcard-k8s-ldc
issuerRef:
name: letsencrypt-production-dns01
kind: ClusterIssuer

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- cluster-issuers.yaml
- certificates.yaml

View file

@ -0,0 +1,4 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- teams-alert.yaml

View file

@ -1,31 +1,33 @@
---
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: msteams
namespace: flux-system
spec:
type: msteams
channel: "Flux CD - LDC_WEB"
secretRef:
name: msteams-url
---
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: msteams
namespace: flux-system
spec:
providerRef:
name: msteams
eventSeverity: info
eventSources:
- kind: GitRepository
name: '*'
- kind: Kustomization
name: '*'
- kind: HelmRepository
name: '*'
- kind: HelmRelease
name: '*'
---
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Provider
metadata:
name: msteams
namespace: flux-system
spec:
type: msteams
channel: "Flux CD - LDC_WEB"
secretRef:
name: msteams-url
---
apiVersion: notification.toolkit.fluxcd.io/v1beta3
kind: Alert
metadata:
name: msteams
namespace: flux-system
spec:
providerRef:
name: msteams
eventSeverity: info
eventSources:
- kind: GitRepository
name: '*'
- kind: Kustomization
name: '*'
- kind: HelmRepository
name: '*'
- kind: HelmRelease
name: '*'
exclusionList:
- "^Dependencies.*"

View file

@ -1,33 +1,24 @@
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: gitlab-agent
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.gitlab.io
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: gitlab-agent
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: gitlab-agent
version: ${GITLAB_AGENT_CHART_VERSION}
sourceRef:
kind: HelmRepository
name: gitlab-agent
namespace: common-services
values:
image:
tag: "${GITLAB_AGENT_APP_VERSION}"
config:
kasAddress: "wss://lab.s-web.fr/-/kubernetes-agent/"
secretName: gitlab-agent-token
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: gitlab-agent
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: gitlab-agent
version: 1.24.0
sourceRef:
kind: HelmRepository
name: gitlab-agent
namespace: common-services
values:
image:
tag: v16.9.2
config:
kasAddress: "wss://lab.s-web.fr/-/kubernetes-agent/"
secretName: gitlab-agent-token

View file

@ -0,0 +1,9 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: gitlab-agent
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.gitlab.io

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -1,46 +1,37 @@
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: gitlab-runner
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.gitlab.io
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: gitlab-runner
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: gitlab-runner
version: ${GITLAB_RUNNER_CHART_VERSION}
sourceRef:
kind: HelmRepository
name: gitlab-runner
namespace: common-services
values:
image:
tag: ${GITLAB_RUNNER_APP_VERSION}
gitlabUrl: https://lab.s-web.fr
runners:
config: |
[[runners]]
executor = "kubernetes"
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "alpine"
secret: gitlab-runner-token
metrics:
enabled: true
rbac:
create: true
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: gitlab-runner
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: gitlab-runner
version: 0.62.1
sourceRef:
kind: HelmRepository
name: gitlab-runner
namespace: common-services
values:
image:
tag: alpine-v16.9.1
gitlabUrl: https://lab.s-web.fr
runners:
config: |
[[runners]]
executor = "kubernetes"
[runners.kubernetes]
namespace = "{{.Release.Namespace}}"
image = "alpine"
secret: gitlab-runner-token
metrics:
enabled: true
rbac:
create: true

View file

@ -0,0 +1,9 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: gitlab-runner
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.gitlab.io

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -0,0 +1,19 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: external-secrets-operator
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: external-secrets
version: 0.9.19
sourceRef:
kind: HelmRepository
name: external-secrets
namespace: common-services
values:
image:
tag: v0.9.19

View file

@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: external-secrets
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.external-secrets.io

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: cloudflare-api-token-secret
namespace: common-services
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: cloudflare-api-token-secret
template:
engineVersion: v2
type: Opaque
data:
api-token: "{{ .api_key }}"
data:
- secretKey: api_key
remoteRef:
key: secret/certificate
property: cloudflare_token

View file

@ -0,0 +1,17 @@
apiVersion: external-secrets.io/v1beta1
kind: ClusterSecretStore
metadata:
name: vault-secret-store
spec:
provider:
vault:
server: "http://vault.common-services.svc.cluster.local:8200"
path: "secret"
version: "v2"
auth:
# points to a secret that contains a vault token
# https://www.vaultproject.io/docs/auth/token
tokenSecretRef:
name: "vault-token"
namespace: "common-services"
key: "token"

View file

@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: msteams-url
namespace: flux-system
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: msteams-url
template:
engineVersion: v2
type: Opaque
data:
address: "{{ .url }}"
data:
- secretKey: url
remoteRef:
key: secret/teams
property: flux_teams_webhook

View file

@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: gitlab-agent-token
namespace: common-services
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: gitlab-agent-token
template:
engineVersion: v2
type: Opaque
data:
token: "{{ .token }}"
data:
- secretKey: token
remoteRef:
key: secret/gitlab
property: agent_token

View file

@ -0,0 +1,24 @@
---
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: gitlab-runner-token
namespace: common-services
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: gitlab-runner-token
template:
engineVersion: v2
type: Opaque
data:
runner-registration-token: ""
runner-token: "{{ .token }}"
data:
- secretKey: token
remoteRef:
key: secret/gitlab
property: runner_token

View file

@ -0,0 +1,13 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- cert-manager.yaml
- cluster-secret-store.yaml
- flux-resources.yaml
- gitlab-agent.yaml
- gitlab-runner.yaml
- mariadb.yaml
- prometheus-stack.yaml
- review.yaml
- staging.yaml
- production.yaml

View file

@ -0,0 +1,28 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: mariadb-credentials
namespace: common-services
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: mariadb-credentials
template:
engineVersion: v2
type: Opaque
data:
mariadb-password: "{{ .password }}"
mariadb-replication-password: "{{ .root_password }}"
mariadb-root-password: "{{ .root_password }}"
data:
- secretKey: root_password
remoteRef:
key: secret/mariadb
property: root_password
- secretKey: password
remoteRef:
key: secret/mariadb
property: password

View file

@ -0,0 +1,23 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: docker-registry-credentials
namespace: production
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: docker-registry-credentials
template:
engineVersion: v2
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: "{{ .config }}"
data:
- secretKey: config
remoteRef:
key: secret/docker
property: auth_config
decodingStrategy: Base64

View file

@ -0,0 +1,27 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: grafana-admin
namespace: common-services
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: grafana-admin
template:
engineVersion: v2
type: Opaque
data:
user: "{{ .user }}"
password: "{{ .password }}"
data:
- secretKey: user
remoteRef:
key: secret/prometheus-stack
property: grafana_user
- secretKey: password
remoteRef:
key: secret/prometheus-stack
property: grafana_admin_password

View file

@ -0,0 +1,23 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: docker-registry-credentials
namespace: review
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: docker-registry-credentials
template:
engineVersion: v2
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: "{{ .config }}"
data:
- secretKey: config
remoteRef:
key: secret/docker
property: auth_config
decodingStrategy: Base64

View file

@ -0,0 +1,23 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: docker-registry-credentials
namespace: staging
spec:
refreshInterval: "15s"
secretStoreRef:
name: vault-secret-store
kind: ClusterSecretStore
target:
name: docker-registry-credentials
template:
engineVersion: v2
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: "{{ .config }}"
data:
- secretKey: config
remoteRef:
key: secret/docker
property: auth_config
decodingStrategy: Base64

View file

@ -0,0 +1,31 @@
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: vault
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: vault
version: 0.28.0
sourceRef:
kind: HelmRepository
name: hashicorp
namespace: common-services
values:
injector:
metrics:
enabled: true
image:
tag: "1.4.1"
agentImage:
tag: "1.16.1"
server:
image:
tag: "1.16.1"
ingress:
enabled: false
livenessProbe:
enabled: true

View file

@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: hashicorp
namespace: common-services
spec:
interval: 1h0m0s
url: https://helm.releases.hashicorp.com

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ldc-web-equipe-rbac.yaml
- shinken-rbac.yaml

View file

@ -1,177 +1,177 @@
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: svc-vincent-bridier
namespace: kube-system
---
apiVersion: v1
kind: Secret
metadata:
name: vincent-bridier-secret
namespace: kube-system
annotations:
kubernetes.io/service-account.name: svc-vincent-bridier
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: svc-jeremy-munsch
namespace: kube-system
---
apiVersion: v1
kind: Secret
metadata:
name: jeremy-munsch-secret
namespace: kube-system
annotations:
kubernetes.io/service-account.name: svc-jeremy-munsch
type: kubernetes.io/service-account-token
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crb-view-admin-web
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: cr-ldc-web-metrics
rules:
- apiGroups:
- ""
resources:
- services/portforward
- services/proxy
verbs:
- create
- delete
- get
- list
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- list
- watch
- apiGroups:
- traefik.io
resources:
- ingressroutes
- ingressroutetcps
- ingressrouteudps
- middlewares
- middlewaretcps
- tlsoptions
- tlsstores
- traefikservices
- serverstransports
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crb-ldc-web-metrics
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cr-ldc-web-metrics
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: cr-admin-web-ldc-namespace
rules:
- apiGroups:
- ""
resources:
- "*"
verbs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rb-admin-web-ldc-namespace-review
namespace: review
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
roleRef:
kind: ClusterRole
name: cr-admin-web-ldc-namespace
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rb-admin-web-ldc-namespace-staging
namespace: staging
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
roleRef:
kind: ClusterRole
name: cr-admin-web-ldc-namespace
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rb-admin-web-ldc-namespace-production
namespace: production
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
roleRef:
kind: ClusterRole
name: cr-admin-web-ldc-namespace
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: svc-vincent-bridier
namespace: kube-system
---
apiVersion: v1
kind: Secret
metadata:
name: vincent-bridier-secret
namespace: kube-system
annotations:
kubernetes.io/service-account.name: svc-vincent-bridier
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: svc-jeremy-munsch
namespace: kube-system
---
apiVersion: v1
kind: Secret
metadata:
name: jeremy-munsch-secret
namespace: kube-system
annotations:
kubernetes.io/service-account.name: svc-jeremy-munsch
type: kubernetes.io/service-account-token
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crb-view-admin-web
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: cr-ldc-web-metrics
rules:
- apiGroups:
- ""
resources:
- services/portforward
- services/proxy
verbs:
- create
- delete
- get
- list
- apiGroups:
- apiextensions.k8s.io
resources:
- customresourcedefinitions
verbs:
- get
- list
- watch
- apiGroups:
- traefik.io
resources:
- ingressroutes
- ingressroutetcps
- ingressrouteudps
- middlewares
- middlewaretcps
- tlsoptions
- tlsstores
- traefikservices
- serverstransports
verbs:
- get
- list
- watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crb-ldc-web-metrics
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cr-ldc-web-metrics
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
creationTimestamp: null
name: cr-admin-web-ldc-namespace
rules:
- apiGroups:
- ""
resources:
- "*"
verbs:
- "*"
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rb-admin-web-ldc-namespace-review
namespace: review
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
roleRef:
kind: ClusterRole
name: cr-admin-web-ldc-namespace
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rb-admin-web-ldc-namespace-staging
namespace: staging
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
roleRef:
kind: ClusterRole
name: cr-admin-web-ldc-namespace
apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: rb-admin-web-ldc-namespace-production
namespace: production
subjects:
- kind: ServiceAccount
name: svc-vincent-bridier
namespace: kube-system
- kind: ServiceAccount
name: svc-jeremy-munsch
namespace: kube-system
roleRef:
kind: ClusterRole
name: cr-admin-web-ldc-namespace
apiGroup: rbac.authorization.k8s.io

View file

@ -1,51 +1,51 @@
---
apiVersion: v1
kind: Secret
metadata:
name: shinken-monitor-token
namespace: common-services
annotations:
kubernetes.io/service-account.name: svc-shinken-monitor
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: svc-shinken-monitor
namespace: common-services
secrets:
- name: shinken-monitor-token
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cr-svc-monitor
rules:
- apiGroups:
- "*"
resources:
- pods
- nodes
- deployments
- namespaces
- endpoints
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crb-svc-monitor
subjects:
- kind: ServiceAccount
name: svc-shinken-monitor
namespace: common-services
roleRef:
kind: ClusterRole
name: cr-svc-monitor
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Secret
metadata:
name: shinken-monitor-token
namespace: common-services
annotations:
kubernetes.io/service-account.name: svc-shinken-monitor
type: kubernetes.io/service-account-token
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: svc-shinken-monitor
namespace: common-services
secrets:
- name: shinken-monitor-token
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: cr-svc-monitor
rules:
- apiGroups:
- "*"
resources:
- pods
- nodes
- deployments
- namespaces
- endpoints
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: crb-svc-monitor
subjects:
- kind: ServiceAccount
name: svc-shinken-monitor
namespace: common-services
roleRef:
kind: ClusterRole
name: cr-svc-monitor
apiGroup: rbac.authorization.k8s.io

View file

@ -0,0 +1,28 @@
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: mariadb
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: mariadb
version: 18.2.4
sourceRef:
kind: HelmRepository
name: bitnami
namespace: common-services
values:
image:
tag: 11.3.2-debian-12-r6
auth:
existingSecret: mariadb-credentials
primary:
persistence:
storageClass: "csi-cinder-high-speed"
size: 60Gi

View file

@ -0,0 +1,10 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: bitnami
namespace: common-services
spec:
interval: 1h0m0s
url: oci://registry-1.docker.io/bitnamicharts
type: "oci"

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -0,0 +1,4 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- namespaces.yaml

View file

@ -0,0 +1,29 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: common-services
---
apiVersion: v1
kind: Namespace
metadata:
name: production
---
apiVersion: v1
kind: Namespace
metadata:
name: review
---
apiVersion: v1
kind: Namespace
metadata:
name: staging
---
apiVersion: v1
kind: Namespace
metadata:
name: velero

View file

@ -1,48 +1,40 @@
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: prometheus-community
namespace: common-services
spec:
interval: 1h0m0s
url: https://prometheus-community.github.io/helm-charts
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: prometheus-stack
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: kube-prometheus-stack
version: ${PROMETHEUS_STACK_CHART_VERSION}
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: common-services
values:
prometheusOperator:
image:
tag: "${PROMETHEUS_STACK_APP_VERSION}"
kubeTargetVersionOverride: "${KUBERNETES_VERSION}"
grafana:
defaultDashboardsTimezone: Europe/Paris
admin:
existingSecret: grafana-admin
userKey: user
passwordKey: password
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: "csi-cinder-classic"
resources:
requests:
storage: 10Gi
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: prometheus-stack
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: kube-prometheus-stack
version: 60.2.0
sourceRef:
kind: HelmRepository
name: prometheus-community
namespace: common-services
values:
prometheusOperator:
image:
tag: v0.74.0
grafana:
defaultDashboardsTimezone: Europe/Paris
admin:
existingSecret: grafana-admin
userKey: user
passwordKey: password
ingress:
enabled: false
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
storageClassName: "csi-cinder-classic"
resources:
requests:
storage: 10Gi

View file

@ -0,0 +1,9 @@
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: prometheus-community
namespace: common-services
spec:
interval: 1h0m0s
url: https://prometheus-community.github.io/helm-charts

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

@ -1,171 +1,169 @@
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: traefik
namespace: common-services
spec:
interval: 1h0m0s
url: https://traefik.github.io/charts
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: traefik
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: traefik
version: ${TRAEFIK_CHART_VERSION}
sourceRef:
kind: HelmRepository
name: traefik
namespace: common-services
values:
image:
tag: "${TRAEFIK_APP_VERSION}"
rbac:
enabled: true
globalArguments:
- "--global.checknewversion"
- "--global.sendanonymoususage"
- "--accesslog=true"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--providers.kubernetescrd.allowCrossNamespace=true"
- "--entryPoints.web.proxyProtocol.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP}/32,10.124.0.0/16,127.0.0.1/32"
- "--entryPoints.websecure.proxyProtocol.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP}/32,10.124.0.0/16,127.0.0.1/32"
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP}/32"
- "--entryPoints.mariadb.proxyProtocol.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP},10.124.0.0/16"
additionalArguments:
- "--serversTransport.insecureSkipVerify=true"
- "--log.level=DEBUG"
ports:
traefik:
port: 9000
expose: false
protocol: TCP
web:
redirectTo:
port: websecure
websecure:
port: 8443
expose: true
exposedPort: 443
protocol: TCP
tls:
enabled: true
metrics:
port: 9100
expose: false
protocol: TCP
mariadb:
port: 54322
expose: true
protocol: TCP
ingressRoute:
dashboard:
enable: true
matchRule: Host(`traefik.k8s.${DOMAIN_NAME}`)
entryPoints:
- "web"
- "websecure"
middlewares:
- name: auth
- name: admin-ldc-whitelist
tls:
secretName: wildcard-${DOMAIN_NAME}
providers:
kubernetesCRD:
enabled: true
ingresssClass: traefik
kubernetesIngress:
enabled: true
service:
enabled: true
type: LoadBalancer
annotations:
service.beta.kubernetes.io/ovh-loadbalancer-proxy-protocol: v2
loadBalancerSourceRanges: [ ]
spec:
loadBalancerIP: "${TRAEFIK_LOAD_BALANCER_IP}"
externalTrafficPolicy: Local
extraObjects:
- apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: auth
namespace: common-services
spec:
basicAuth:
secret: traefik-auth-ldc-oe
- apiVersion: traefik.io/v1alpha1 # Redirect www URLs to their no-www equivalent
kind: Middleware
metadata:
name: redirect-www-to-no-www
namespace: common-services
spec:
# Redirect a request from an url to another with regex matching and replacement
redirectRegex:
# Apply a permanent redirection (HTTP 301)
permanent: true
# The regular expression to match and capture elements from the request URL
regex: "^https?://www\\.(.+)"
# How to modify the URL to have the new target URL
replacement: "https://${1}"
- apiVersion: traefik.io/v1alpha1 # Redirect no-www URLs to their www equivalent
kind: Middleware
metadata:
name: redirect-no-www-to-www
namespace: common-services
spec:
# Redirect a request from an url to another with regex matching and replacement
redirectRegex:
# Apply a permanent redirection (HTTP 301)
permanent: true
# The regular expression to match and capture elements from the request URL
regex: "^https?://(?:www\\.)?(.+)"
# How to modify the URL to have the new target URL
replacement: "https://www.${1}"
- apiVersion: traefik.io/v1alpha1
kind: MiddlewareTCP
metadata:
name: ipwhitelist-acces-mariadb
namespace: common-services
spec:
ipWhiteList:
sourceRange:
- 46.18.126.208/28 # LDC
- 62.193.56.48/32 # OPENevents - Bureau Neuville
- 80.15.14.76/32 # LDC web - Box externe
- 86.65.205.240/28 # LDC
- 135.125.42.176/28 # LDC
- 149.202.23.64/26 # LDC
- 151.80.95.176/28 # LDC
- 217.15.92.64/28 # LDC
- apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: admin-ldc-whitelist
namespace: common-services
spec:
ipWhiteList:
sourceRange:
- 46.18.126.208/28 # LDC
- 62.193.56.48/32 # OPENevents - Bureau Neuville
- 80.15.14.76/32 # LDC web - Box externe
- 86.65.205.240/28 # LDC
- 135.125.42.176/28 # LDC
- 149.202.23.64/26 # LDC
- 151.80.95.176/28 # LDC
- 217.15.92.64/28 # LDC
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: traefik
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: traefik
version: 28.3.0
sourceRef:
kind: HelmRepository
name: traefik
namespace: common-services
values:
image:
tag: v3.0.2
rbac:
enabled: true
globalArguments:
- "--api.dashboard=true"
- "--global.checknewversion"
- "--global.sendanonymoususage"
- "--accesslog=true"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--providers.kubernetescrd.allowCrossNamespace=true"
- "--entryPoints.web.proxyProtocol.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP}/32,10.124.0.0/16,127.0.0.1/32"
- "--entryPoints.websecure.proxyProtocol.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP}/32,10.124.0.0/16,127.0.0.1/32"
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP}/32"
- "--entryPoints.mariadb.proxyProtocol.trustedIPs=${TRAEFIK_LOAD_BALANCER_IP},10.124.0.0/16"
additionalArguments:
- "--log.level=DEBUG"
ports:
traefik:
port: 9000
expose:
default: false
protocol: TCP
web:
redirectTo:
port: websecure
websecure:
port: 8443
expose:
default: true
exposedPort: 443
protocol: TCP
tls:
enabled: true
metrics:
port: 9100
expose:
default: false
protocol: TCP
mariadb:
port: 54322
expose:
default: true
protocol: TCP
providers:
kubernetesCRD:
enabled: true
ingresssClass: traefik
kubernetesIngress:
enabled: true
service:
enabled: true
type: LoadBalancer
annotations:
service.beta.kubernetes.io/ovh-loadbalancer-proxy-protocol: v2
spec:
loadBalancerIP: "${TRAEFIK_LOAD_BALANCER_IP}"
externalTrafficPolicy: Local
extraObjects:
- apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: auth
namespace: common-services
spec:
basicAuth:
secret: traefik-auth-ldc-oe
- apiVersion: traefik.io/v1alpha1 # Redirect www URLs to their no-www equivalent
kind: Middleware
metadata:
name: redirect-www-to-no-www
namespace: common-services
spec:
# Redirect a request from an url to another with regex matching and replacement
redirectRegex:
# Apply a permanent redirection (HTTP 301)
permanent: true
# The regular expression to match and capture elements from the request URL
regex: "^https?://www\\.(.+)"
# How to modify the URL to have the new target URL
replacement: "https://${1}"
- apiVersion: traefik.io/v1alpha1 # Redirect no-www URLs to their www equivalent
kind: Middleware
metadata:
name: redirect-no-www-to-www
namespace: common-services
spec:
# Redirect a request from an url to another with regex matching and replacement
redirectRegex:
# Apply a permanent redirection (HTTP 301)
permanent: true
# The regular expression to match and capture elements from the request URL
regex: "^https?://(?:www\\.)?(.+)"
# How to modify the URL to have the new target URL
replacement: "https://www.${1}"
- apiVersion: traefik.io/v1alpha1
kind: MiddlewareTCP
metadata:
name: ipwhitelist-acces-mariadb
namespace: common-services
spec:
ipWhiteList:
sourceRange:
- 46.18.126.208/28 # LDC
- 62.193.56.48/32 # OPENevents - Bureau Neuville
- 80.15.14.76/32 # LDC web - Box externe
- 86.65.205.240/28 # LDC
- 135.125.42.176/28 # LDC
- 149.202.23.64/26 # LDC
- 151.80.95.176/28 # LDC
- 217.15.92.64/28 # LDC
- apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: admin-ldc-whitelist
namespace: common-services
spec:
ipWhiteList:
sourceRange:
- 46.18.126.208/28 # LDC
- 62.193.56.48/32 # OPENevents - Bureau Neuville
- 80.15.14.76/32 # LDC web - Box externe
- 86.65.205.240/28 # LDC
- 135.125.42.176/28 # LDC
- 149.202.23.64/26 # LDC
- 151.80.95.176/28 # LDC
- 217.15.92.64/28 # LDC
- apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: mariadb-ingressroutetcp
namespace: common-services
spec:
entryPoints:
- mariadb
routes:
- match: HostSNI(`*`) # Hostname to match
middlewares:
- name: ipwhitelist-acces-mariadb
namespace: common-services
services:
- name: mariadb
port: 3306

View file

@ -0,0 +1,8 @@
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
name: traefik
namespace: common-services
spec:
interval: 1h0m0s
url: https://traefik.github.io/charts

View file

@ -0,0 +1,5 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- helm-repository.yaml
- helm-release.yaml

View file

View file

@ -1,26 +1,14 @@
---
apiVersion: snapshot.storage.k8s.io/v1
deletionPolicy: Delete
driver: cinder.csi.openstack.org
kind: VolumeSnapshotClass
metadata:
name: csi-cinder-snapclass-in-use-v1-velero
labels:
velero.io/csi-volumesnapshot-class: "true"
parameters:
force-create: "true"
---
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: backup-cluster-ldc-web-test
namespace: velero
spec:
schedule: '30 00 * * *'
template:
defaultVolumesToRestic: false
includedNamespaces:
- production
ttl: 168h0m0s # Keep the backup 7 days
---
apiVersion: velero.io/v1
kind: Schedule
metadata:
name: backup-cluster-ldc-web-test
namespace: velero
spec:
schedule: '30 00 * * *'
template:
defaultVolumesToRestic: false
includedNamespaces:
- production
ttl: 168h0m0s # Keep the backup 7 days
storageLocation: default

View file

@ -0,0 +1,11 @@
---
apiVersion: snapshot.storage.k8s.io/v1
deletionPolicy: Delete
driver: cinder.csi.openstack.org
kind: VolumeSnapshotClass
metadata:
name: csi-cinder-snapclass-in-use-v1-velero
labels:
velero.io/csi-volumesnapshot-class: "true"
parameters:
force-create: "true"

View file

@ -1,5 +0,0 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: common-services

View file

@ -1,5 +0,0 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: production

View file

@ -1,5 +0,0 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: review

View file

@ -1,5 +0,0 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: staging

View file

@ -1,5 +0,0 @@
---
apiVersion: v1
kind: Namespace
metadata:
name: velero

View file

@ -1,14 +0,0 @@
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wildcard-${DOMAIN_NAME}
namespace: common-services
spec:
dnsNames:
- '*.${DOMAIN_NAME}'
- '*.k8s.${DOMAIN_NAME}'
secretName: wildcard-${DOMAIN_NAME}
issuerRef:
name: letsencrypt-production-dns01
kind: ClusterIssuer

View file

@ -1,20 +0,0 @@
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: grafana
namespace: common-services
spec:
entryPoints: # We listen to requests coming from ports 80 and 443
- web
- websecure
routes:
- match: Host(`grafana.k8s.${DOMAIN_NAME}`)
kind: Rule
services:
- name: prometheus-stack-grafana
port: 80
middlewares:
- name: admin-ldc-whitelist
tls:
secretName: wildcard-${DOMAIN_NAME}

View file

@ -1,17 +0,0 @@
---
apiVersion: traefik.io/v1alpha1
kind: IngressRouteTCP
metadata:
name: mariadb-ingressroutetcp
namespace: common-services
spec:
entryPoints:
- mariadb
routes:
- match: HostSNI(`*`) # Hostname to match
middlewares:
- name: ipwhitelist-acces-mariadb
namespace: common-services
services:
- name: mariadb
port: 3306

View file

@ -1,87 +0,0 @@
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: wenndannmitrespekt.de
namespace: common-services
spec:
dnsNames:
- wenndannmitrespekt.de
secretName: wenndannmitrespekt.de
issuerRef:
name: letsencrypt-production-http01
kind: ClusterIssuer
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: www.jeu.tregalette.bzh
namespace: common-services
spec:
dnsNames:
- www.jeu.tregalette.bzh
secretName: www.jeu.tregalette.bzh
issuerRef:
name: letsencrypt-production-http01
kind: ClusterIssuer
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: redirect-wenndannmitrespekt-to-nature-and-respect
spec:
entryPoints:
- websecure
routes:
- match: Host(`wenndannmitrespekt.de`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
middlewares:
- name: redirect-wenndannmitrespekt-to-nature-and-respect
tls:
secretName: wenndannmitrespekt.de
---
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: redirect-wwwjeutregalette-to-jeutregalette
spec:
entryPoints:
- websecure
routes:
- match: Host(`www.jeu.tregalette.bzh`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
middlewares:
- name: redirect-wwwjeutregalette-to-jeutregalette
tls:
secretName: www.jeu.tregalette.bzh
---
# Redirect with domain replacement
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-wenndannmitrespekt-to-nature-and-respect
spec:
redirectRegex:
regex: ^https://wenndannmitrespekt.de/
replacement: https://www.nature-and-respect.com/de
permanent: true
---
# Redirect with domain replacement
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: redirect-wwwjeutregalette-to-jeutregalette
spec:
redirectRegex:
regex: ^https://www.jeu.tregalette.bzh/
replacement: https://jeu.tregalette.bzh/
permanent: true

View file

@ -1,13 +0,0 @@
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: datadir-mariadb-sts-0
namespace: common-services
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 10Gi
storageClassName: csi-cinder-high-speed

View file

@ -1,29 +0,0 @@
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: jetstack
namespace: common-services
spec:
interval: 1h0m0s
url: https://charts.jetstack.io
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: cert-manager
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: cert-manager
version: ${CERT_MANAGER_CHART_VERSION}
sourceRef:
kind: HelmRepository
name: jetstack
namespace: common-services
values:
image:
tag: ${CERT_MANAGER_APP_VERSION}

View file

@ -1,38 +0,0 @@
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: HelmRepository
metadata:
name: bitnami
namespace: common-services
spec:
interval: 1h0m0s
url: oci://registry-1.docker.io/bitnamicharts
type: "oci"
---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
name: mariadb
namespace: common-services
spec:
interval: 1m0s
chart:
spec:
chart: mariadb
version: ${MARIADB_CHART_VERSION}
sourceRef:
kind: HelmRepository
name: bitnami
namespace: common-services
values:
fullnameOverride: "mariadb-service" # Only way to update the service name
image:
tag: ${MARIADB_APP_VERSION}
auth:
existingSecret: mariadb-credentials
primary:
persistence:
existingClaim: "datadir-mariadb-sts-0"

View file

@ -1,104 +0,0 @@
---
### common-services ###
---
apiVersion: v1
kind: Secret
metadata:
name: docker-registry-credentials
namespace: common-services
type: kubernetes.io/dockerconfigjson
data:
# Uses a deployment token defined on the "LDC Web" group (docker-registry-credentials)
.dockerconfigjson: >-
${DOCKER_AUTH_CONFIG}
---
### cert-manager ###
---
apiVersion: v1
kind: Secret
metadata:
name: cloudflare-api-token-secret
namespace: common-services
type: Opaque
stringData:
api-token: "${CERT_MANAGER_CLOUDFLARE_API_TOKEN}"
---
### gitlab-agent ###
---
apiVersion: v1
kind: Secret
metadata:
name: gitlab-agent-token
namespace: common-services
type: Opaque
stringData:
token: "${GITLAB_AGENT_TOKEN}"
---
### gitlab-runner ###
---
apiVersion: v1
kind: Secret
metadata:
name: gitlab-runner-token
namespace: common-services
type: Opaque
stringData:
runner-registration-token: "" # need to leave as an empty string for compatibility reasons
runner-token: "${GITLAB_RUNNER_TOKEN}"
---
### grafana ###
---
apiVersion: v1
kind: Secret
metadata:
name: grafana-admin
namespace: common-services
type: Opaque
stringData:
user: admin
password: "${GRAFANA_ADMIN_PASSWORD}"
---
### mariadb ###
---
apiVersion: v1
kind: Secret
metadata:
name: mariadb-credentials
namespace: common-services
type: Opaque
stringData:
mariadb-root-password: "${MARIADB_ROOT_PASSWORD}"
mariadb-replication-password: "${MARIADB_ROOT_PASSWORD}"
mariadb-password: "${MARIADB_PASSWORD}"
### traefik ###
---
apiVersion: v1
kind: Secret
metadata:
name: traefik-auth-ldc-oe
namespace: common-services
type: Opaque
data:
users: |1
${TRAEFIK_AUTH_LDC_OE}
---

View file

@ -1,8 +0,0 @@
---
apiVersion: v1
kind: Secret
metadata:
name: msteams-url
namespace: flux-system
stringData:
address: "${FLUX_TEAMS_URL}"

View file

@ -1,15 +0,0 @@
---
### production ###
---
apiVersion: v1
kind: Secret
metadata:
name: docker-registry-credentials
namespace: production
type: kubernetes.io/dockerconfigjson
data:
# Uses a deployment token defined on the "LDC Web" group (docker-registry-credentials)
.dockerconfigjson: >-
${DOCKER_AUTH_CONFIG}

View file

@ -1,15 +0,0 @@
---
### review ###
---
apiVersion: v1
kind: Secret
metadata:
name: docker-registry-credentials
namespace: review
type: kubernetes.io/dockerconfigjson
data:
# Uses a deployment token defined on the "LDC Web" group (docker-registry-credentials)
.dockerconfigjson: >-
${DOCKER_AUTH_CONFIG}

View file

@ -1,15 +0,0 @@
---
### staging ###
---
apiVersion: v1
kind: Secret
metadata:
name: docker-registry-credentials
namespace: staging
type: kubernetes.io/dockerconfigjson
data:
# Uses a deployment token defined on the "LDC Web" group (docker-registry-credentials)
.dockerconfigjson: >-
${DOCKER_AUTH_CONFIG}

File diff suppressed because it is too large Load diff

View file

@ -1,297 +0,0 @@
---
# Source: gitlab-runner/templates/service-account.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
name: gitlab-runner
namespace: common-services
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
---
# Source: gitlab-runner/templates/secrets.yaml
apiVersion: v1
kind: Secret
metadata:
name: "gitlab-runner"
namespace: "common-services"
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
type: Opaque
data:
runner-registration-token: "NXNURG54MUFaREUtaG9qbXVwcXY="
runner-token: ""
---
# Source: gitlab-runner/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: gitlab-runner
namespace: "common-services"
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
data:
entrypoint: |
#!/bin/bash
set -e
mkdir -p /home/gitlab-runner/.gitlab-runner/
cp /configmaps/config.toml /home/gitlab-runner/.gitlab-runner/
# Set up environment variables for cache
if [[ -f /secrets/accesskey && -f /secrets/secretkey ]]; then
export CACHE_S3_ACCESS_KEY=$(cat /secrets/accesskey)
export CACHE_S3_SECRET_KEY=$(cat /secrets/secretkey)
fi
if [[ -f /secrets/gcs-applicaton-credentials-file ]]; then
export GOOGLE_APPLICATION_CREDENTIALS="/secrets/gcs-applicaton-credentials-file"
elif [[ -f /secrets/gcs-application-credentials-file ]]; then
export GOOGLE_APPLICATION_CREDENTIALS="/secrets/gcs-application-credentials-file"
else
if [[ -f /secrets/gcs-access-id && -f /secrets/gcs-private-key ]]; then
export CACHE_GCS_ACCESS_ID=$(cat /secrets/gcs-access-id)
# echo -e used to make private key multiline (in google json auth key private key is oneline with \n)
export CACHE_GCS_PRIVATE_KEY=$(echo -e $(cat /secrets/gcs-private-key))
fi
fi
if [[ -f /secrets/azure-account-name && -f /secrets/azure-account-key ]]; then
export CACHE_AZURE_ACCOUNT_NAME=$(cat /secrets/azure-account-name)
export CACHE_AZURE_ACCOUNT_KEY=$(cat /secrets/azure-account-key)
fi
if [[ -f /secrets/runner-registration-token ]]; then
export REGISTRATION_TOKEN=$(cat /secrets/runner-registration-token)
fi
if [[ -f /secrets/runner-token ]]; then
export CI_SERVER_TOKEN=$(cat /secrets/runner-token)
fi
# Validate this also at runtime in case the user has set a custom secret
if [[ ! -z "$CI_SERVER_TOKEN" && "1" -ne "1" ]]; then
echo "Using a runner token with more than 1 replica is not supported."
exit 1
fi
# Register the runner
if ! sh /configmaps/register-the-runner; then
exit 1
fi
# Run pre-entrypoint-script
if ! bash /configmaps/pre-entrypoint-script; then
exit 1
fi
# Start the runner
exec /entrypoint run --user=gitlab-runner \
--working-directory=/home/gitlab-runner
config.toml: |
concurrent = 10
check_interval = 30
log_level = "info"
config.template.toml: |
[[runners]]
[runners.kubernetes]
namespace = "common-services"
image = "ubuntu:16.04"
register-the-runner: |
#!/bin/bash
MAX_REGISTER_ATTEMPTS=30
for i in $(seq 1 "${MAX_REGISTER_ATTEMPTS}"); do
echo "Registration attempt ${i} of ${MAX_REGISTER_ATTEMPTS}"
/entrypoint register \
--template-config /configmaps/config.template.toml \
--non-interactive
retval=$?
if [ ${retval} = 0 ]; then
break
elif [ ${i} = ${MAX_REGISTER_ATTEMPTS} ]; then
exit 1
fi
sleep 5
done
exit 0
check-live: |
#!/bin/bash
if /usr/bin/pgrep -f .*register-the-runner; then
exit 0
elif /usr/bin/pgrep gitlab.*runner; then
exit 0
else
exit 1
fi
pre-entrypoint-script: |
---
# Source: gitlab-runner/templates/role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: "Role"
metadata:
name: gitlab-runner
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
namespace: "common-services"
rules:
- apiGroups: [""]
resources: ["*"]
verbs: ["*"]
---
# Source: gitlab-runner/templates/role-binding.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: "RoleBinding"
metadata:
name: gitlab-runner
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
namespace: "common-services"
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: "Role"
name: gitlab-runner
subjects:
- kind: ServiceAccount
name: gitlab-runner
namespace: "common-services"
---
# Source: gitlab-runner/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: gitlab-runner
namespace: "common-services"
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: gitlab-runner
template:
metadata:
labels:
app: gitlab-runner
chart: gitlab-runner-0.48.0
release: "gitlab-runner"
heritage: "Helm"
annotations:
checksum/configmap: d384622e4f5da536deb34e7ad12641d175943ccf1509e501650b4b81968a8722
checksum/secrets: 160e94f48b9ea82025fca86ff7ac083c1947ca5b81cc074a93ae9c454d5f6c77
spec:
securityContext:
fsGroup: 65533
runAsUser: 100
terminationGracePeriodSeconds: 3600
serviceAccountName: gitlab-runner
containers:
- name: gitlab-runner
image: registry.gitlab.com/gitlab-org/gitlab-runner:alpine-v15.7.0
imagePullPolicy: "IfNotPresent"
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: false
runAsNonRoot: true
lifecycle:
preStop:
exec:
command: ["/entrypoint", "unregister", "--all-runners"]
command: ["/usr/bin/dumb-init", "--", "/bin/bash", "/configmaps/entrypoint"]
env:
- name: CI_SERVER_URL
value: "https://lab.s-web.fr/"
- name: CLONE_URL
value: ""
- name: RUNNER_EXECUTOR
value: "kubernetes"
- name: REGISTER_LOCKED
value: "true"
- name: RUNNER_TAG_LIST
value: ""
- name: KUBERNETES_PRIVILEGED
value: "true"
livenessProbe:
exec:
command: ["/bin/bash", "/configmaps/check-live"]
initialDelaySeconds: 60
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
readinessProbe:
exec:
command: ["/usr/bin/pgrep","gitlab.*runner"]
initialDelaySeconds: 10
timeoutSeconds: 1
periodSeconds: 10
successThreshold: 1
failureThreshold: 3
ports:
- name: "metrics"
containerPort: 9252
volumeMounts:
- name: projected-secrets
mountPath: /secrets
- name: etc-gitlab-runner
mountPath: /home/gitlab-runner/.gitlab-runner
- name: configmaps
mountPath: /configmaps
resources:
{}
volumes:
- name: runner-secrets
emptyDir:
medium: "Memory"
- name: etc-gitlab-runner
emptyDir:
medium: "Memory"
- name: projected-secrets
projected:
sources:
- secret:
name: "gitlab-runner"
items:
- key: runner-registration-token
path: runner-registration-token
- key: runner-token
path: runner-token
- name: configmaps
configMap:
name: gitlab-runner

View file

@ -1,327 +0,0 @@
# Copyright 2017 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: common-services
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: common-services
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
---
apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: common-services
type: Opaque
---
apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-csrf
namespace: common-services
type: Opaque
data:
csrf: ""
---
apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-key-holder
namespace: common-services
type: Opaque
---
kind: ConfigMap
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-settings
namespace: common-services
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: common-services
rules:
# Allow Dashboard to get, update and delete Dashboard exclusive secrets.
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["kubernetes-dashboard-key-holder", "kubernetes-dashboard-certs", "kubernetes-dashboard-csrf"]
verbs: ["get", "update", "delete"]
# Allow Dashboard to get and update 'kubernetes-dashboard-settings' config map.
- apiGroups: [""]
resources: ["configmaps"]
resourceNames: ["kubernetes-dashboard-settings"]
verbs: ["get", "update"]
# Allow Dashboard to get metrics.
- apiGroups: [""]
resources: ["services"]
resourceNames: ["heapster", "dashboard-metrics-scraper"]
verbs: ["proxy"]
- apiGroups: [""]
resources: ["services/proxy"]
resourceNames: ["heapster", "http:heapster:", "https:heapster:", "dashboard-metrics-scraper", "http:dashboard-metrics-scraper"]
verbs: ["get"]
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
rules:
# Allow Metrics Scraper to get metrics from the Metrics server
- apiGroups: ["metrics.k8s.io"]
resources: ["pods", "nodes"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: common-services
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: kubernetes-dashboard
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: common-services
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: kubernetes-dashboard
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: common-services
---
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: common-services
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: kubernetes-dashboard
template:
metadata:
labels:
k8s-app: kubernetes-dashboard
spec:
containers:
- name: kubernetes-dashboard
image: kubernetesui/dashboard:v2.3.1
imagePullPolicy: Always
ports:
- containerPort: 8443
protocol: TCP
args:
- --auto-generate-certificates
- --namespace=common-services
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
# - --apiserver-host=http://my-address:port
volumeMounts:
- name: kubernetes-dashboard-certs
mountPath: /certs
# Create on-disk volume to store exec logs
- mountPath: /tmp
name: tmp-volume
livenessProbe:
httpGet:
scheme: HTTPS
path: /
port: 8443
initialDelaySeconds: 30
timeoutSeconds: 30
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsUser: 1001
runAsGroup: 2001
volumes:
- name: kubernetes-dashboard-certs
secret:
secretName: kubernetes-dashboard-certs
- name: tmp-volume
emptyDir: {}
serviceAccountName: kubernetes-dashboard
nodeSelector:
"kubernetes.io/os": linux
# Comment the following tolerations if Dashboard must not be deployed on master
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
---
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: dashboard-metrics-scraper
name: dashboard-metrics-scraper
namespace: common-services
spec:
ports:
- port: 8000
targetPort: 8000
selector:
k8s-app: dashboard-metrics-scraper
---
kind: Deployment
apiVersion: apps/v1
metadata:
labels:
k8s-app: dashboard-metrics-scraper
name: dashboard-metrics-scraper
namespace: common-services
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: dashboard-metrics-scraper
template:
metadata:
labels:
k8s-app: dashboard-metrics-scraper
annotations:
seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
spec:
containers:
- name: dashboard-metrics-scraper
image: kubernetesui/metrics-scraper:v1.0.6
ports:
- containerPort: 8000
protocol: TCP
livenessProbe:
httpGet:
scheme: HTTP
path: /
port: 8000
initialDelaySeconds: 30
timeoutSeconds: 30
volumeMounts:
- mountPath: /tmp
name: tmp-volume
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsUser: 1001
runAsGroup: 2001
serviceAccountName: kubernetes-dashboard
nodeSelector:
"kubernetes.io/os": linux
# Comment the following tolerations if Dashboard must not be deployed on master
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
volumes:
- name: tmp-volume
emptyDir: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: common-services
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: common-services
---
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: admin-user-token
namespace: common-services
annotations:
kubernetes.io/service-account.name: admin-user

View file

@ -1,65 +0,0 @@
apiVersion: v1
kind: Secret
metadata:
name: mariadb-secret
type: Opaque
data:
# Encoded value: echo -n 'secret'|base64
mariadb-root-password: MnI3XixYbEVkLDVSIzh4ZjZAOXdacSlsU28ldVBZYyk=
---
apiVersion: v1
kind: Service
metadata:
name: mariadb-service
labels:
app: mariadb
spec:
ports:
- port: 3306
name: mariadb-port
clusterIP: None
selector:
app: mariadb
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mariadb-sts
spec:
serviceName: "mariadb-service"
replicas: 1
selector:
matchLabels:
app: mariadb
template:
metadata:
labels:
app: mariadb
spec:
containers:
- name: mariadb
image: mariadb:10.10
ports:
- containerPort: 3306
name: mariadb-port
env:
# Using Secrets
- name: MARIADB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: mariadb-root-password
volumeMounts:
- name: datadir
mountPath: /var/lib/mysql/
volumeClaimTemplates:
- metadata:
name: datadir
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "csi-cinder-high-speed"
resources:
requests:
storage: 60Gi

View file

@ -1,78 +0,0 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: mariadb-configmap
data:
database_url: mariadb-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: phpmyadmin-deployment
spec:
replicas: 1
selector:
matchLabels:
app: pma
template:
metadata:
labels:
app: pma
spec:
containers:
- name: phpmyadmin
image: bitnami/phpmyadmin:latest
ports:
- containerPort: 8080
env:
- name: DATABASE_HOST
valueFrom:
configMapKeyRef:
name: mariadb-configmap
key: database_url
---
apiVersion: v1
kind: Service
metadata:
name: pma
spec:
selector:
app: pma
ports:
- port: 8080
targetPort: 8080
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: pma
spec:
entryPoints: # We listen to requests coming from ports 80 and 443
- web
- websecure
routes:
- match: Host(`pma.k8s.s-web.fr`)
kind: Rule
services:
- name: pma # Requests will be forwarded to this service
port: 8080
middlewares:
- name: admin-ldc-whitelist
tls:
secretName: pma.k8s.s-web.fr
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: pma.k8s.s-web.fr
spec:
dnsNames:
- pma.k8s.s-web.fr
secretName: pma.k8s.s-web.fr
issuerRef:
name: letsencrypt-production-dns01
kind: ClusterIssuer

Some files were not shown because too many files have changed in this diff Show more