Aller au contenu

Exposer un service


Cette page vous guide, pas à pas, pour rendre vos applications accessibles — que ce soit à l’intérieur du cluster ou depuis Internet — quand on n’a jamais touché à Kubernetes.


1. Rendre l’application disponible dans le cluster

  1. Ouvrez Service Discovery → Services dans votre namespace c‑acme‑rtximz‑prod.

  2. Cliquez sur Create.

  3. Remplissez :

    • Name : api-internal
    • Target : sélecteur app=api
    • Port : 80 (port de votre conteneur)
  4. Laissez Service type sur ClusterIP puis Create.

Votre application répond maintenant sur :

http://api-internal.c-acme-rtximz-prod.svc.cluster.local:80

2. Publier une application web (HTTPS)

Étape 1 : DNS

Créez un CNAME :

www.example.com ▶︎ ingress.bseufr01.blackswift.hosting

Apex CNAME

Apex CNAME ** (example.com) : possible seulement si votre fournisseur DNS supporte ALIAS/ANAME ou CNAME flattening (Route 53, Cloudflare, Gandi…). Ne pointez pas vers la ou les adresses A derrière ingress.bseufr01.blackswift.hosting, nous pouvons être amenés à les changer sans préavis.

Étape 2 : Service interne

Fenêtre de terminal
kubectl expose deploy/<deployment-name> \
--name <service-name> \
--port <target-port> \
--namespace <namespace>
# Exemple :
kubectl expose deploy/web \
--name web \
--port 80 \
--namespace c-acme-rtximz-prod

Étape 3 : Ingress HTTPS

Option A — automatique (Let’s Encrypt)

Fenêtre de terminal
kubectl create ingress <ingress-name> -n <namespace> \
--rule "<hostname>/*=<service-name>:<service-port>,tls=<secret-name-to-create>" \
--annotation cert-manager.io/issuer=letsencrypt
# Exemple:
kubectl create ingress web-public -n c-acme-rtximz-prod \
--rule "www.example.com/*=web:80,tls=web-tls" \
--annotation cert-manager.io/issuer=letsencrypt

Option B — certificat perso

Fenêtre de terminal
kubectl -n <namespace> create secret tls <secret-name> \
--cert=<cert-file-path> --key=<key-file-path>
# Exemple :
kubectl -n c-acme-rtximz-prod create secret tls example-tls \
--cert=fullchain.pem --key=privkey.pem

Puis :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-public
namespace: c-acme-rtximz-prod
spec:
tls:
- hosts: ["www.example.com"]
secretName: example-tls
rules:
- host: www.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 80

Test : ouvrez https://www.example.com → la page Nginx s’affiche.


3. Publier un service non‑HTTP (NodePort)

Besoin d’exposer une base de données, du MQTT, un SSH ou un jeu ? Utilisez un NodePort.

Raccourci CLI

Fenêtre de terminal
# Créer le service NodePort pour exposer un Deployment
kubectl -n <namespace> expose deploy/<deployment-name> \
--type=NodePort --port=<port> --name=<service-name>

⚠️ Par défaut vos conteneurs sont protégés et ne sont pas joignables en dehors de vos namespaces, même exposés par un NodePort. Pour autoriser les connexions depuis l’extérieur, vous devez ajouter le label exposition=public sur vos pods.

Repérez le port assigné :

Fenêtre de terminal
kubectl get svc <service-name> -n <namespace>
NAME TYPE PORT(S) NODE-PORT
<service-name> NodePort <container-port>/TCP <node-port>

Votre pouvez alors vous connecter sur nodeport.bseufr01.blackswift.hosting:<node-port>


Récap rapide

BesoinObjet K8sURL / Hostname
Interne seulementService ClusterIPsvcname.<ns>.svc.cluster.local
HTTP(s) publicIngress + Servicevotredomaine.com (CNAME vers ingress)
Autre protocole publicNodePort + label exposition=public sur les podsnodeport.<cluster>.blackswift.hosting:<port>

Vous êtes prêts à exposer vos applications ! En cas de doute, ouvrez un ticket ou passez sur notre Slack communautaire. 😉