Aller au contenu

Exposer votre application

Cette page vous guide pour rendre vos applications accessibles — à l’intérieur du cluster ou depuis Internet, en HTTPS avec un certificat automatique.

1. Rendre l’application joignable dans le cluster (Service)

  1. Ouvrez Service Discovery › Services dans votre namespace.
  2. Cliquez sur Create et choisissez ClusterIP.
  3. Remplissez :
    • Name : web
    • Selectors : app=nginx-demo (les labels de vos pods)
    • Port : 80 (port d’écoute de votre conteneur)
  4. Validez avec Create.

Votre application répond maintenant, depuis n’importe quel pod de vos namespaces, sur :

http://web.<votre-namespace>.svc.cluster.local

2. Publier en HTTPS sur votre domaine (Ingress)

Étape 1 : pointez votre domaine

Créez un enregistrement CNAME chez votre fournisseur DNS :

www.example.com → ingress.k-bdkbsh.blackswift.hosting

Le guide détaillé par fournisseur (OVHcloud, Gandi, Cloudflare…), y compris le cas du domaine racine (example.com sans www), est ici : Configurer votre DNS.

Étape 2 : créez l’Ingress avec certificat automatique

Fenêtre de terminal
kubectl create ingress web-public -n <namespace> \
--rule "www.example.com/*=web:80,tls=web-tls" \
--annotation cert-manager.io/issuer=letsencrypt

L’annotation cert-manager.io/issuer: letsencrypt déclenche l’émission automatique d’un certificat Let’s Encrypt (généralement en 1 à 2 minutes, une fois le DNS propagé). Suivez l’émission :

Fenêtre de terminal
kubectl get certificates,challenges -n <namespace>

Test : ouvrez https://www.example.com — votre application s’affiche, avec un certificat valide.

3. Exposer un protocole non-HTTP

Option A — NodePort (inclus, quota 10)

Pour du TCP simple (MQTT, SSH, jeu…) :

Fenêtre de terminal
kubectl -n <namespace> expose deploy/<deployment> \
--type=NodePort --port=<port> --name=<service-name>

⚠️ Deux conditions pour que le service soit joignable depuis Internet :

  1. Ajoutez le label exposition: public sur vos pods (pas sur le Service) — sans lui, la politique réseau bloque le trafic externe ;
  2. Relevez le port attribué (kubectl get svc -n <namespace>) et connectez-vous sur nodeport.k-bdkbsh.blackswift.hosting:<node-port>.

À savoir : un NodePort ne peut pas être restreint par adresse IP source — une fois exposé, le port répond à tout Internet. Si vous devez limiter l’accès à certaines IP (VPN d’entreprise, partenaires…), utilisez un LoadBalancer et son loadBalancerSourceRanges (ci-dessous), ou gérez la restriction dans l’application.

Option B — LoadBalancer (option payante, IP dédiée)

Pour une IP publique dédiée avec le port de votre choix :

apiVersion: v1
kind: Service
metadata:
name: mon-service-public
spec:
type: LoadBalancer
externalTrafficPolicy: Cluster # recommandé — voir ci-dessous
loadBalancerSourceRanges: # optionnel : IP sources autorisées
- 203.0.113.0/24
- 198.51.100.42/32
selector:
app: mon-app # pods qui doivent porter le label exposition: public
ports:
- port: 5432
  • Tarif : 0,02 €/h par LoadBalancer ;
  • Quota : 1 par namespace — si votre namespace affiche encore services.loadbalancers: 0, demandez l’activation via ticket ;
  • Le label exposition: public est requis sur les pods ciblés ;
  • loadBalancerSourceRanges restreint l’accès aux plages d’IP listées (CIDR) — c’est l’avantage du LoadBalancer sur le NodePort, qui ne le permet pas. Omettez le champ pour un service ouvert à tous ;
  • Gardez externalTrafficPolicy: Cluster (notre recommandation) : les nœuds du cluster sont répartis sur plusieurs régions, et en mode Local le LoadBalancer ne peut servir que les pods hébergés dans sa région — si vos pods sont planifiés ailleurs, le service ne répond plus. En mode Cluster, le trafic est routé vers vos pods où qu’ils soient ; la contrepartie est que l’adresse IP source vue par l’application est celle du réseau interne, pas celle du client (la restriction loadBalancerSourceRanges reste appliquée en amont, elle).

Récapitulatif

BesoinObjet K8sAccès
Interne au clusterService ClusterIP<svc>.<ns>.svc.cluster.local
HTTP(S) publicIngress + Servicevotre domaine (CNAME)
TCP public mutualiséNodePort + label exposition: publicnodeport.k-bdkbsh.blackswift.hosting:<port>
TCP public, IP dédiéeLoadBalancer + label exposition: publicIP dédiée (0,02 €/h)

Un problème d’exposition ? Voir Problème de connexion ou de réseau.