Comprendre l’exposition réseau sur Hosted OpenShift on VCD
L’exposition réseau d’une application sur un Hosted Cluster OpenShift Cloud Avenue est particulière :
l’environnement IaaS ne permet pas d’attacher une IP publique directement à un workload Kubernetes.
Ce comportement est volontaire, hérité du modèle sécurisé Cloud Avenue.
Ce guide explique :
- pourquoi l’IP publique ne peut pas être attachée directement,
- comment Cloud Avenue utilise MetalLB par défaut,
- comment créer un pool d’IP interne pour vos applications,
- comment publier vos services via DNAT sur la Edge Gateway du tenant.
1. Pourquoi on ne peut pas attribuer une IP publique directement à un Service LoadBalancer ?
Dans Cloud Avenue, chaque tenant possède sa propre Edge Gateway.
C’est elle qui gère :
- les IP publiques,
- les règles NAT,
- la sécurité réseau,
- l’isolation entre tenants.
De ce fait :
- aucune IP publique ne peut être assignée à un worker,
- aucune IP publique ne peut être attribuée à un service Kubernetes,
- toute exposition vers Internet passe obligatoirement par la Edge du tenant.
En résumé :
Une IP publique ne peut jamais pointer directement vers un pod. L’accès se fait uniquement via des règles DNAT sur la Edge Gateway.
2. Pourquoi Cloud Avenue déploie MetalLB par défaut ?
Les environnements IaaS (comme Cloud Avenue) ne disposent pas d’un load balancer natif Kubernetes.
OpenShift ne peut donc pas attribuer automatiquement des IP externes sans un composant supplémentaire.
C’est pour cela que Cloud Avenue installe MetalLB par défaut.
MetalLB, c’est quoi ?
MetalLB est un Load Balancer pour Kubernetes conçu pour les environnements bare-metal et IaaS.
Il permet :
- d’attribuer des IP internes aux Services de type LoadBalancer,
- de répondre aux requêtes ARP/Layer2 sur le réseau des workers,
- de fournir une IP interne stable pour chaque application exposée.
Mais ces IP restent internes.
Pour les rendre publiques, il faut du DNAT.
3. Le pool MetalLB par défaut livré avec chaque cluster
Lors de la livraison, Cloud Avenue configure un premier pool MetalLB très restreint.
Il sert uniquement à :
- l’accès à la console OpenShift,
- l’accès aux routes Ingress
*.apps.<CLUSTER_ID>.kaas.cav.
Ce pool contient une unique IP (ou un très petit range).
Il ne doit pas être utilisé pour les applications du client.
4. Comment exposer ses applications ?
→ Il faut créer un pool MetalLB supplémentaire
Pour exposer vos applications via LoadBalancer, vous devez créer votre propre pool MetalLB.
Ce pool doit :
- appartenir au même réseau que les workers,
- ne pas chevaucher le pool OpenShift,
- utiliser des IP disponibles dans votre plage réseau.
Exemple
Supposons que vos workers utilisent le réseau :192.168.10.0/24
Vous pouvez réserver un pool pour vos apps :192.168.10.50-192.168.10.100
5. Créer un pool MetalLB (AddressPool + L2Advertisement)
Voici un exemple complet à adapter selon votre réseau.
IPAddressPool
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: pool-applications
namespace: metallb-system
spec:
addresses:
- 192.168.10.50-192.168.10.100
L2Advertisement
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: pool-applications
namespace: metallb-system
spec:
ipAddressPools:
- pool-applications
Appliquez la configuration :
oc apply -f pool-applications.yaml
Vérifiez :
oc -n metallb-system get ipaddresspool
oc -n metallb-system get l2advertisement
6. Déployer votre service LoadBalancer (attribue une IP MetalLB interne)
Exemple :
oc expose deployment myapp --type=LoadBalancer --port=8080
Vérifiez :
oc get svc myapp
Vous verrez une IP interne provenant du pool, par exemple :
EXTERNAL-IP 192.168.10.55
⚠️ Cette IP n’est pas publique.
Elle n’est accessible que dans le réseau du tenant.
7. Rendre l’application accessible depuis Internet : créer une règle DNAT
Pour exposer votre application au public, il faut créer une règle DNAT sur la Edge Gateway du tenant :
Public IP → IP MetalLB → Pod
Exemple DNAT :
- IP publique :
164.2.123.45 - IP MetalLB du service :
192.168.10.55 - Port public :
443 - Port interne :
8080
La règle ressemblera à :
DNAT:
164.2.123.45:443 → 192.168.10.55:8080
À partir de cet instant :
- l’IP publique répond,
- la Edge translate vers l’IP MetalLB interne,
- Kubernetes route ensuite vers votre application.
Résumé global
| Élément | Rôle |
|---|---|
| IP publique | Gérée par la Edge Gateway du tenant |
| MetalLB | Attribue des IP internes LoadBalancer |
| Pool MetalLB par défaut | Réservé à OpenShift (*.apps + console) |
| Pool MetalLB client | Permet d’exposer vos applications |
| DNAT Edge Gateway | Rend l’application accessible depuis Internet |
En une phrase :
MetalLB fournit une IP interne, la Edge la publie via DNAT, et l’application devient accessible depuis Internet.