# Passer en Kubernetes

> Objectif : le même contrat, en cluster, en une commande - sans rien installer d'autre avant.

Guide - Depuis la version 0.1.0 - Flexway v1.6.3 - https://flexway.io/docs/operations-kubernetes/

> Guide d'exploitation : configurer, déployer et observer la passerelle. Ce que fait la capacité côté produit : [guide produit](https://flexway.io/docs/product-overview/) ; l'appeler : [guide développeur](https://flexway.io/docs/developer-overview/).

**Objectif** : le même contrat, en cluster, en une commande - sans rien installer d'autre avant.

**Commande** (parcours court : un contrat, une URL d'amont)

```bash
helm install orders oci://ghcr.io/flexwiz/charts/flexway --version <version> \
  --set-file openapi=examples/rest-minimal/openapi.yaml \
  --set upstream=http://orders.internal:8080
```

Parcours complet : le `flexway.yaml` entier en `config`, les fichiers qu'il nomme en `contracts`.

```yaml
# values.yaml
config:
  version: 1
  contracts: { openapi: ./orders.yaml }
  upstreams:
    default: { url: "http://orders.internal:8080" }
contracts:
  orders.yaml: |
    openapi: 3.1.0
    ...
secretMounts:
  - name: llm-keys          # lu par file:/etc/flexway-secrets/llm-keys/<clé>
```

```bash
helm install orders oci://ghcr.io/flexwiz/charts/flexway --version <version> -f values.yaml
```

**Vérif**

```bash
kubectl port-forward svc/orders-flexway 8080:8080 &
curl -i http://localhost:8080/orders          # relayé à l'amont
curl -i http://localhost:8080/nope            # 404 : fermé par défaut
kubectl port-forward svc/orders-flexway-admin 9090:9090 &
curl -s http://localhost:9090/readyz          # {"status":"ready","operations":3}
```

> **`/readyz` au vert** veut dire : contrat chargé, routes, chaînes, expressions et **schémas de
> validation compilés** pour tous les modes - aucune compilation n'attend la première requête
> (`1.6.0`). Il ne dit pas qu'une connexion amont est ouverte (la première requête vers un amont
> l'ouvre : DNS, TCP, TLS) ni que les clés d'un émetteur OIDC sont déjà lues (découverte en
> arrière-plan).

> **Sans contrat, l'installation échoue** dans le terminal, avec la commande à taper - jamais un pod
> qui ne démarre pas.

> Le contrat et la configuration sont un `ConfigMap` monté en répertoire : un `helm upgrade` avec un
> contrat modifié est servi **sans redémarrage** ([Changer la configuration sans redémarrer](https://flexway.io/docs/operations-live-config/)). Les secrets sont des `Secret` que le
> chart ne crée pas. Le port d'administration a son propre `Service`, `ClusterIP` : ne jamais
> l'exposer. Rien de Kubernetes-spécifique n'est requis par le coeur : le même fichier tourne sur
> une VM.

5 s. Tant que l'image est privée, ajouter `imagePullSecrets`.*
