ajout de doc autour de awx et keycloak

This commit is contained in:
Tom David--Broglio 2024-01-29 11:55:34 +01:00
parent 12d4012e44
commit 6cf9349d7b
4 changed files with 102 additions and 35 deletions

View file

@ -21,9 +21,17 @@ Documentation: <https://ansible.readthedocs.io/projects/awx-operator/en/latest/i
Déploiement de AWX Operator sur un cluster Kubernetes :
> Si vous n'avez pas de cluster Kubernetes, on peut facilement en créer un cluster *mono-neud* avec k3s par exemple voir [HowtoK3s](/HowtoK3s.md)
* On utilise kustomize pour assembler et appliquer les configurations yaml Kubernetes.
Nous allons créer un dossier awx contenant notre configuration :
* Il faut une storage class fonctionnelle dans le cluster.
Remarques :
* On peut aussi utiliser un chart helm pour l'opérateur uniquement : https://ansible.readthedocs.io/projects/awx-operator/en/latest/installation/helm-install-on-existing-cluster.html
* Si vous n'avez pas de cluster Kubernetes, on peut facilement en créer un cluster *mono-neud* avec k3s par exemple voir [HowtoK3s](/HowtoK3s.md)
Nous allons créer un dossier awx contenant la configuration pour l'opérateur, une instance et traefik (ingress) :
~~~{.bash}
$ tree -L 3 awx
@ -33,17 +41,10 @@ awx
│   ├── demo
│   │   ├── awx-instance.yaml
│   │   ├── kustomization.yaml
│   │   ├── traefik-whitelist-middleware.yaml
│   │   └── treafik-ingressroute.yaml
│   │   └── traefik-ingressroute.yaml
│   └── kustomization.yaml
├── awx-operator
│   └── kustomization.yaml
└── traefik
├── kustomization.yaml
├── traefik-dashboard-ingressroute.yaml
├── traefik-helm-chart-config.yaml
├── traefik-helm-config.yaml.old
└── whitelist-middleware.yaml
└── awx-operator
   └── kustomization.yaml
~~~
* un fichier kustomize qui va assembler tout `awx/kustomization.yaml`
@ -52,12 +53,11 @@ awx
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./traefik
- ./awx-operator
- ./awx-instances
~~~
* L'operateur `awx/awx-operator/kustomization.yaml ` qui va etre crée dans un namespace `awx`
* L'opérateur `awx/awx-operator/kustomization.yaml ` qui va être créé dans le namespace `awx`
~~~{.yaml}
apiVersion: kustomize.config.k8s.io/v1beta1
@ -83,8 +83,7 @@ apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- awx-instance.yaml
- traefik-whitelist-middleware.yaml
- treafik-ingressroute.yaml
- traefik-ingressroute.yaml
# awx/awx-instances/demo/awx-instance.yaml
apiVersion: awx.ansible.com/v1beta1
@ -92,10 +91,29 @@ kind: AWX
metadata:
name: awx-demo
spec:
# service_type: nodeport
service_type: clusterip
# awx/awx-instances/demo/traefik-ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
name: demo-instance-awx
spec:
entryPoints:
- websecure
routes:
- kind: Rule
match: Host(`awx.chez-vous.org`)
services:
- kind: Service
name: awx-demo-service
port: 80
tls:
certResolver: letsencrypt
~~~
> on peut aussi configurer directement les paramètres de l'insgress dans le spec de l'instance, voir documentation : https://ansible.readthedocs.io/projects/awx-operator/en/latest/user-guide/network-and-tls-configuration.html
Lancer le Déploiement :
~~~{.bash}
@ -117,15 +135,18 @@ service/awx-operator-controller-manager-metrics-service created
deployment.apps/awx-operator-controller-manager created
~~~
* Voir ou en est l'installation
~~~{.bash}
# voir ou en l'installation
$ kubectl -n awx logs -f deployments/awx-operator-controller-manager
# suivre le lancement d'instance(s)
$kubectl logs -n awx -f deployments/awx-operator-controller-manager -c awx-manager
$ kubectl logs -n awx -f deployments/awx-operator-controller-manager -c awx-manager
# Récuperer le mot de passe d'une instance
$ kubectl get secret -n awx awx-demo-admin-password -o jsonpath="{.data.password}" | base64 --decode ; echo
~~~
Si tout se passe bien, on
### Docker (Déprécié)
Copier le dépôt sur le serveur a partir d'une version stable: https://github.com/ansible/awx/releases/tag

View file

@ -15,13 +15,13 @@ Documentation : <https://docs.k3s.io/quick-start> et <https://docs.k3s.io/instal
Prérequis :
* Il faut avoir un noyau récent qui supporte les CGroupv2 >= 5.8
* Vérifier la version de iptable installée https://docs.k3s.io/known-issues#iptables
* Vérifier la version de Iptable installée https://docs.k3s.io/known-issues#iptables
* Désactiver ufw si présent (les règles iptables de k3s passerons devant)
* Il faut mettre minifirewall à DOCKER='on'
> Attention k3s rajoutera ses regles iptables par-dessus; il faut faire attention a ce qu'on expose si la machine est sur internet.
> Attention k3s rajoutera ses règles iptables par-dessus; il faut faire attention à ce qu'on expose si la machine est sur internet.
Pour installer on peut simplement jouer le script d'installation qui va récupérer le binaire et mettre en place l'unitée systemd ou openrc.
Pour installer, on peut simplement jouer le script d'installation qui va récupérer le binaire et mettre en place l'unité systemd ou openrc.
~~~{.bash}
### Installer
@ -40,24 +40,27 @@ k3s server ...
On peut rejouer le script d'installation ou installer le binaire d'une version en particulier :
> **Attention** : si à l'installation on à joué le script d'installation argument, il ne faut pas en donné cette fois-ci ! autrement ils ecraseront les anciens argument.
> **Attention** : si à l'installation, on a joué le script d'installation avec des arguments, il ne faut pas en donner cette fois-ci ! autrement, ils écraseront les anciens argument.
~~~{.bash}
# Installer le binaire d'une release https://github.com/k3s-io/k3s/releases
# Jouer le script d'installation sans arguments ...
curl -sfL https://get.k3s.io | sh -
# Installer le binaire d'une version https://github.com/k3s-io/k3s/releases
$ tag=v1.29.0+k3s1
$ curl -Lo /usr/local/bin/k3s https://github.com/k3s-io/k3s/releases/download/${tag}/k3s; chmod a+x /usr/local/bin/k3s
~~~
## Configuration
Selon les besoins, on peut configuer K3s de différentes manière en même temps :
Selon les besoins, on peut configurer K3s de différente manière en même temps :
* Au lancement avec des ENVs et argument
* Avec un fichier de configuration dans `/etc/rancher/k3s/config.yaml` ou des fichiers dans `/etc/rancher/k3s/config.yaml.d/*.yaml`
* Avec un fichier de configuration dans `/etc/rancher/k3s/config.yaml` ou des fichiers dans `/etc/rancher/k3s/config.yaml.d/*.yaml` (lu et appliqué dans l'ordre alphabétique : la dernière valeur lue pour une clef sera appliqué).
~~~{.ini}
### /etc/rancher/k3s/config.yaml
$vim /etc/rancher/k3s/config.yaml
write-kubeconfig-mode: "0644"
disable:
- servicelb

View file

@ -157,7 +157,6 @@ hostname-admin=adm-test.example.org
> Dans ce cas, il faudra utiliser un [proxy-inverse](#proxy-inverse) pour contrôler les accès des hostnames.
### SSL/TLS
<https://www.keycloak.org/server/enabletls>
@ -178,7 +177,21 @@ https-certificate-key-file=/root/keycloak_private.key
### Proxy inverse
WIP <https://www.keycloak.org/server/reverseproxy>
Documentation : <https://www.keycloak.org/server/reverseproxy>
* edge : Terminaison SSL au niveau du proxy et communication avec keycloak en HTTP
> **Attention** : dans ce mode le traffic entre le proxy est donc en clair. Le reseaux interne doit être sécurisé.
* reencrypt : La terminaison SSL se fait au niveau du proxy inverse ET au niveau de keycloak, chacun ont une clef et un certificat (different). C'est utile dans un environnement ou le reseaux interne doit aussi être protégé, cela permet aussi au reverse proxy de voir le contenu des requêtes
Requires communication through HTTPS between the proxy and Keycloak. This mode is suitable for deployments where internal communication between the reverse proxy and Keycloak should also be protected. Different keys and certificates are used on the reverse proxy as well as on Keycloak.
* passthrough : Terminaison SSl au niveau de keycloak uniquement, le trafique https est forwardé par le proxy. Le proxy n'a pas connaissance du contenu du traffique
The proxy forwards the HTTPS connection to Keycloak without terminating TLS. The secure connections between the server and clients are based on the keys and certificates used by the Keycloak server.
### Exemple de configuration

View file

@ -49,7 +49,7 @@ Sans rentrer dans les détails dans cette configuration, nous allons préciser..
Par exemple...
~~~{.yaml}
## Static configuration
# Configuration Statique
entryPoints:
web:
address: ":80"
@ -74,12 +74,12 @@ Liste des providers : https://doc.traefik.io/traefik/providers/overview/
On va configurer...
* des [routers](https://doc.traefik.io/traefik/routing/routers/#configuration-example) qui permette de connecter les requêtes aux services
* des [Services](https://doc.traefik.io/traefik/routing/services/#services) permettent de joindre les services...
* des [Services](https://doc.traefik.io/traefik/routing/services/#services) qui permettent de joindre les services...
Par exemple :
~~~{.yaml}
## Dynamic configuration
# Configuration dynamique
http:
routers:
Router-1:
@ -100,9 +100,39 @@ TODO à venir examples !!
## Configuration avancée
### Logging
Documentation Logs : <https://doc.traefik.io/traefik/observability/logs/>
Documentation Access Logs : <https://doc.traefik.io/traefik/observability/access-logs/>
Pour configurer les logs de Traefik, il faut lui indiquer dans sa configration statique...
~~~{.yaml}
log:
# ERROR par défaut : DEBUG > INFO > WARN > ERROR > FATAL > PANIC
level: DEBUG
filePath: "/var/log/traefik.log"
accessLog:
filePath: "/path/to/access.log"
~~~
### Whitelist
On peut configurer un middleware pour n'autoriser que certaines Ips
On peut définir un middleware pour n'autoriser que certaines Ips
~~~{.toml}
# Configuration dynamique
[http.middlewares.evolix-whitelist.ipWhiteList]
sourceRange = ["31.170.8.0/21", "185.236.224.0/22"]
~~~
On peut ensuite utiliser ce middleware directement sur un entryPoint ou sur des services (TODO à venir)...
~~~{.toml}
# Configuration statique
[entryPoints.websecure.http]
middlewares = ["evolix-whitelist@file"]
~~~
### HTTPS et gestion des certificats TLS
@ -111,7 +141,7 @@ Documentation : <https://doc.traefik.io/traefik/routing/routers/#tls>
dès le moment ou le router contient la section `tls:`, Traefik suppose que celui-ci est uniquement utilisé pour des requetes HTTPS uniquement.
~~~{.yaml}
## Dynamic configuration
## Configuration dynamique
http:
routers:
my-https-router:
@ -126,7 +156,7 @@ http:
Traefik peut s'occuper de la gestion des certificats TLS, il faut definir un "certResolver":
~~~{.yaml}
## Static configuration
# Configuration Statique
certificatesResolvers:
myresolver:
acme: