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:17] – [ClusterIP] benoitinformatique:kebernetes:kube_service [2023/12/18 07:23] (Version actuelle) – [LoadBalancer] benoit
Ligne 10: Ligne 10:
  
 ===== ClusterIP ===== ===== ClusterIP =====
-C'est le mode par défaut de Kubernetes lorsque l'on crée un service. Il permet d'exposer uniquement un port au sein du cluster uniquement. Il n'est pas publié vers l'extérieur.+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. 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 127: Ligne 129:
 ===== NodePort =====  ===== NodePort ===== 
  
 +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.1702646249.txt.gz · Dernière modification : de benoit