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:17]
benoit [ClusterIP]
informatique:kebernetes:kube_service [2023/12/18 08:23] (Version actuelle)
benoit [LoadBalancer]
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: 2023/12/15 14:17 par benoit