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édentesRévision précédente
Prochaine révision
Révision précédente
informatique:kebernetes:kube_service [2023/12/15 13:29] – [NodePort] benoitinformatique:kebernetes:kube_service [2023/12/18 07:23] (Version actuelle) – [LoadBalancer] benoit
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 : 
 +  vim pod_nginx_service_nodeport.yml 
 +   
 +Contenu :  
 +  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: NodePort 
 +    selector: 
 +      app: mywebapp 
 +    ports: 
 +    - name: mywebport 
 +      protocol: TCP 
 +      port: 8080 
 +      targetPort: 80 
 +      nodePort: 31000 
 + 
 +On retrouve les mêmes éléments que pour la création d'un ClusterIP à la différence près que :  
 +   * **Pour le service** :  
 +       * **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. 
 + 
 +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.1702646989.txt.gz · Dernière modification : de benoit