Kubernetes - Exposer une application sur internet

From Cloud Avenue
Jump to navigation Jump to search

Voici une méthode d'exposition d'une application sur un réseau externe.

Schéma de la solution
Déploiement de deux services HTTP présentant une simple page web sur serveurs Nginx
Nous utilisons une configuration de base, 1 Master + 2 Nodes
Le premier déploiement présente une page bleue; hébergée sur X Pods (ici 3)
Le second déploiement présente une page verte; hébergée sur Y Pods (ici 4)
Ces déploiements sont ensuite présentés en services (type NodePort)
Nous utilisons ensuite un contrôleur Ingress (Type Nginx) qui va effectuer le LoadBalancing (L7) entre les Pods
Les règles définies au niveau du Ingress permettent le routage entre les 2 services (nginx-blue / nginx-green) selon l'URL d'accès
Le controleur Ingress est présenté en service NodePort et est accessible sur chaque node de notre cluster K8s sur un port externe (ici 32078) (NB: l'accès via le Master est ici autorisé mais pourrait être désactivé selon configuration souhaitée)
Les NodePorts (32078) sont présentés à l'extérieur via le service LoadBalancer de la Edge Gateway
Ceci permet l'équilibrage de charge entre les différents nodes du cluster.
CSE ExternalLB.png


Déploiement Nginx-Blue:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-blue-deployment
  labels:
    app: nginx-blue
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-blue
  template:
    metadata:
      labels:
        app: nginx-blue
    spec:
      containers:
      - name: nginx-blue
        image: cauchabie/ocb-testing:nginx-blue
        ports:
         - containerPort: 80

Déclaration du service:

Terminal.png Terminal

Installation d'un controleur Ingress Suivre la documentation:https://kubernetes.github.io/ingress-nginx/deploy/#bare-metal

Création d'un service Ingress pour exposer nos services nginx-blue et nginx-green:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: nginx-blue
      http:
        paths:
        - backend:
            serviceName: myservice-blue
            servicePort: 80
    - host: nginx-green
      http:
        paths:
        - backend:
            serviceName: myservice-green
            servicePort: 80

Enfin, configuration du service LoadBalancer sur la Edge Gateway (VCloud):

Configuration du Pool sur VCD Edge Load Balancer


Pool créé avec les 3 nodes du cluster; sur le port d'écoute du contrôleur Ingress:

Définition du Pool

Enfin, création du serveur virtuel pour accès externe:

Définition du Serveur Virtuel


Etape suivante: Configurer un noeud NFS



Liens rapides : Revenir en haut de la page Bouton CDS NGP.png Bouton FAQ.png Bouton FP.png Bouton Accueil.png Bouton contact wiki.jpg