Outils pour utilisateurs

Outils du site


informatique:kebernetes:kube_service

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
informatique:kebernetes:kube_service [2023/12/15 14:35]
benoit [NodePort]
informatique:kebernetes:kube_service [2023/12/18 08:23] (Version actuelle)
benoit [LoadBalancer]
Ligne 12: Ligne 12:
 C'est le mode par défaut de Kubernetes lorsque l'on crée un service. Il permet d'​exposer un port au sein du cluster uniquement. ​ C'est le mode par défaut de Kubernetes lorsque l'on crée un service. Il permet d'​exposer un port au sein du cluster uniquement. ​
  
-**Remarque** :!: L'IP n'est pas publiée en dehors du cluster. L'IP allouée ne sera accessible que par les nodes du cluster.+**Remarque** :!: L'IP n'est pas publiée en dehors du cluster. L'IP allouée ne sera accessible que par les nodes du cluster. A noter aussi que les ClusterIP sont assignées par des règles Iptables dans la table NAT.
  
 Ci-dessous un fichier YAML pour démarrer un Pod nginx et son service : Ci-dessous un fichier YAML pour démarrer un Pod nginx et son service :
Ligne 129: Ligne 129:
 ===== NodePort =====  ===== NodePort ===== 
  
-La création d'un service de type **NodePort** ​permet de publier ​un port à l'​extérieur du cluster. Un port sera ouvert ​au niveau de l'​hôte ​(le serveur virtuel ou physique). Les ports qui peuvent être utilisés sont supérieur à 30000.+La création d'un service de type **NodePort** ​créé aussi un service **ClusterIP** mais en plus un port sera publié ​à l'​extérieur du cluster. Un port sera ouvert ​sur chacun des nodes (le serveur virtuel ou physique). Les ports qui peuvent être utilisés sont supérieur à 30000.
  
 Comme pour la création d'un service ClusterIP plus haut, nous allons créer un service et lancer un Pod : Comme pour la création d'un service ClusterIP plus haut, nous allons créer un service et lancer un Pod :
Ligne 168: Ligne 168:
        * **spec.type** : Doit être défini pour forcer la création de type **NodePort**.        * **spec.type** : Doit être défini pour forcer la création de type **NodePort**.
        * **spec.ports.nodePort** : Définir le port qui devra écouter sur tous les nodes.        * **spec.ports.nodePort** : Définir le port qui devra écouter sur tous les nodes.
-  ​+ 
 +On liste les services :  
 +  kubectl get svc 
 + 
 +Résultat :  
 +  NAME            TYPE        CLUSTER-IP ​     EXTERNAL-IP ​  ​PORT(S) ​         AGE 
 +  kubernetes ​     ClusterIP ​  ​10.96.0.1 ​      <​none> ​       443/​TCP ​         8d 
 +  nginx-service ​  ​NodePort ​   10.110.183.49 ​  <​none> ​       8080:​31000/​TCP ​  47m 
 + 
 +**Explications** : On constate que le service est de type **NodePort**. Le service dispose quand même d'un Cluster IP (10.110.183.49). 
 + 
 +Techniquement le pods est accessible en depuis les nodes ainsi :  
 +  curl http://​10.110.183.49:​8080 
 + 
 +Mais aussi depuis l'​extérieur sur chacune des IP des nodes : 
 + 
 +  curl http://​10.0.6.8:​31000 
 +  curl http://​10.0.4.248:​31000 
 + 
 +Liste des nodes :  
 +  NAME         ​STATUS ​  ​ROLES ​          ​AGE ​  ​VERSION ​  ​INTERNAL-IP ​  ​EXTERNAL-IP ​  ​OS-IMAGE ​                        ​KERNEL-VERSION ​        ​CONTAINER-RUNTIME 
 +  k8s-master ​  ​Ready ​   control-plane ​  ​11d ​  ​v1.28.2 ​  ​10.0.6.8 ​     <​none> ​       Debian GNU/Linux 12 (bookworm) ​  ​6.1.0-15-cloud-amd64 ​  ​docker://​24.0.7 
 +  k8s-node ​    ​Ready ​   <​none> ​         11d   ​v1.28.2 ​  ​10.0.4.248 ​   <​none> ​       Debian GNU/Linux 12 (bookworm) ​  ​6.1.0-15-cloud-amd64 ​  ​docker://​24.0.7 
 + 
 +===== LoadBalancer ===== 
 + 
 +:!: A approfondir :!: 
 + 
 +La création d'un service de type **LoadBalancer** créé aussi les services **NodePort** et **ClusterIP**. En revanche, il permet d'​équilibrer la charge vers les nodes avec l'​utilisation d'un service de LoadBalancer externe ou cloud. 
 + 
 +Fichier YAML correspond (identique à NodePort mais le type change) :  
 +  apiVersion: v1 
 +  kind: Pod 
 +  metadata: 
 +    name: nginx 
 +    labels: 
 +      app: mywebapp 
 +  spec: 
 +    containers:​ 
 +    - name: nginx 
 +      image: nginx:​stable 
 +      ports: 
 +        - containerPort:​ 80 
 +  --- 
 +  apiVersion: v1 
 +  kind: Service 
 +  metadata: 
 +    name: nginx-service 
 +  spec: 
 +    type: LoadBalancer 
 +    selector: 
 +      app: mywebapp 
 +    ports: 
 +    - name: mywebport 
 +      protocol: TCP 
 +      port: 8080 
 +      targetPort: 80 
 +      nodePort: 31000 
 + 
 +===== ExternalName =====
 ===== Ingress ===== ===== Ingress =====
informatique/kebernetes/kube_service.1702647323.txt.gz · Dernière modification: 2023/12/15 14:35 par benoit