informatique:kebernetes:kube_service
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| informatique:kebernetes:kube_service [2023/12/15 11:45] – [ClusterIP] benoit | informatique: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' | + | C'est le mode par défaut de Kubernetes lorsque l'on crée un service. Il permet d' |
| + | |||
| + | **Remarque** :!: L' | ||
| 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 : | ||
| + | |||
| + | vim pod_nginx_service.yml | ||
| + | |||
| + | Contenu : | ||
| apiVersion: v1 | apiVersion: v1 | ||
| Ligne 26: | Ligne 32: | ||
| ports: | ports: | ||
| - containerPort: | - containerPort: | ||
| - | name: http-web-svc | + | |
| + | #name: http-web-svc | ||
| | | ||
| --- | --- | ||
| Ligne 34: | Ligne 41: | ||
| name: nginx-service | name: nginx-service | ||
| spec: | spec: | ||
| + | # ClusterIP étant le mode par défaut, il n'est pas obligé de définir le type pour le créer. | ||
| + | #type: ClusterIP | ||
| selector: | selector: | ||
| app: mywebapp | app: mywebapp | ||
| Ligne 40: | Ligne 49: | ||
| protocol: TCP | protocol: TCP | ||
| port: 8080 | port: 8080 | ||
| - | targetPort: http-web-svc | + | |
| + | # Si un nom a été donné au port du conteneur on peut cibler le port par son nom. | ||
| + | #targetPort: http-web-svc | ||
| + | Explications, | ||
| + | * **Un Pod** : | ||
| + | * **metadata.labels.app** : Il est important de définir le nom pour qu'il soit ciblé automatiquement par le service. | ||
| + | * **Un service**: | ||
| + | * **metadata.name**: | ||
| + | * **spec.selector.app** : Le nom doit correspondre à **metadata.labels.app** afin que la publication du service cible le pod à publier. | ||
| + | * **spec.ports.name**: | ||
| + | * **spec.ports.protocol**: | ||
| + | * **spec.ports.port** : C'est le port qui sera publié au sein du cluster. | ||
| + | * **spec.ports.targetPort** : C'est le port ciblé coté conteneurs. | ||
| + | Création du pod et du service : | ||
| + | kubectl apply -f pod_nginx_service.yml | ||
| + | |||
| + | Listons le pods créé : | ||
| + | kubectl get pods | ||
| + | |||
| + | Résultat attendu : | ||
| + | NAME READY | ||
| + | nginx | ||
| + | |||
| + | Listons les services : | ||
| + | kubectl get services | ||
| + | # Même commande en plus court | ||
| + | #kubectl get svc | ||
| + | |||
| + | l'IP de cluster **10.110.183.49** a été affecté au service : | ||
| + | NAME TYPE CLUSTER-IP | ||
| + | kubernetes | ||
| + | nginx-service | ||
| + | |||
| + | Pour tester l' | ||
| + | curl http:// | ||
| + | |||
| + | Ci-dessous, nous allons lister les points de terminsons : | ||
| + | kubectl get endpoints | ||
| + | # Version courte | ||
| + | #kubectl get ep | ||
| + | |||
| + | Ce que nous constatons, c'est le service **nginx-service** cible le pod qui à l'IP **192.168.1.105** sur le port **80** : | ||
| + | NAME ENDPOINTS | ||
| + | kubernetes | ||
| + | nginx-service | ||
| + | |||
| + | Déployons un autre pod qui sera accessible par le même service : | ||
| + | vim pod_nginx2.yml | ||
| + | |||
| + | Contenu : | ||
| + | apiVersion: v1 | ||
| + | kind: Pod | ||
| + | metadata: | ||
| + | name: nginx2 | ||
| + | labels: | ||
| + | app: mywebapp | ||
| + | spec: | ||
| + | containers: | ||
| + | - name: nginx | ||
| + | image: nginx: | ||
| + | ports: | ||
| + | - containerPort: | ||
| + | |||
| + | Lancement du pod : | ||
| + | kubectl apply -f pod_nginx2.yml | ||
| + | | ||
| + | Vérification des endpoints : | ||
| + | kubectl get endpoints | ||
| + | |||
| + | Ce que nous pouvons voir c'est le service cible **nginx-service** 2 pods sur le port 80 : | ||
| + | NAME ENDPOINTS | ||
| + | kubernetes | ||
| + | nginx-service | ||
| + | |||
| + | La requête ci-dessous sera alternativement redirigée vers **192.168.1.105: | ||
| + | curl http:// | ||
| ===== NodePort ===== | ===== NodePort ===== | ||
| + | La création d'un service de type **NodePort** créé aussi un service **ClusterIP** mais en plus un port sera publié à l' | ||
| + | |||
| + | 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: | ||
| + | ports: | ||
| + | - containerPort: | ||
| + | | ||
| + | --- | ||
| + | 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 | ||
| + | kubernetes | ||
| + | nginx-service | ||
| + | |||
| + | **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:// | ||
| + | |||
| + | Mais aussi depuis l' | ||
| + | |||
| + | curl http:// | ||
| + | curl http:// | ||
| + | |||
| + | Liste des nodes : | ||
| + | NAME | ||
| + | k8s-master | ||
| + | k8s-node | ||
| + | |||
| + | ===== LoadBalancer ===== | ||
| + | |||
| + | :!: A approfondir :!: | ||
| + | |||
| + | La création d'un service de type **LoadBalancer** créé aussi les services **NodePort** et **ClusterIP**. En revanche, il permet d' | ||
| + | |||
| + | 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: | ||
| + | ports: | ||
| + | - containerPort: | ||
| + | --- | ||
| + | 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.1702640758.txt.gz · Dernière modification : de benoit
