À quoi sert l'option d'adresse IP externe dans le service kubernetes lorsque le service est de type ClusterIP
5 Réponses :
Lorsque vous utilisez un service avec type: ClusterIP , il n'a qu'une adresse IP de cluster et aucune adresse IP externe .
Un ExternalIP est juste un point de terminaison par lequel des services sont accessibles depuis l'extérieur du cluster, donc un service de type ClusterIP avec un ExternalIP peut toujours accessible à l'intérieur du cluster à l'aide de son nom DNS service.namespace, mais il est désormais également accessible depuis son point de terminaison externe. Par exemple, vous pouvez définir ExternalIP sur l'IP de l'un de vos nœuds k8s, ou créer une entrée dans votre cluster sur cette IP.
Salut, est-ce une bonne idée de donner nodeIP comme externalIP au pod?
C'est une bonne question @SureshVishnoi. IMO sa mauvaise pratique si cluster multinœud.
@Hrishikesh oui, il existe des possibilités de temps d'arrêt des nœuds. Je pense que ExternalIP devrait provenir d'un autre sous-réseau et être acheminé vers plusieurs nœuds du clster k8s.
ClusterIP est la valeur par défaut type de service dans Kubernetes qui vous permet d'accéder à votre service uniquement dans le cluster.
Si votre type de service est défini sur LoadBalancer ou < a href = "https://kubernetes.io/docs/concepts/services-networking/service/#nodeport" rel = "nofollow noreferrer"> NodePort , ClusterIP est automatiquement créé et Le service LoadBalancer ou NodePort sera acheminé vers cette adresse IP ClusterIP .
Les nouvelles adresses IP externes ne sont allouées qu'avec le type LoadBalancer .
Vous pouvez également utiliser les adresses IP externes du nœud lorsque vous définissez votre service sur NodePort . Mais dans ce cas, vous aurez besoin de règles de pare-feu supplémentaires pour vos nœuds afin d'autoriser le trafic entrant pour vos ports de nœuds exposés.
ClusterIP est un Ip unique donné depuis un pool IP à un service et pour accéder aux pods de ce cluster de services, l'IP ne peut être utilisée qu'à l'intérieur d'un cluster.Cluster IP est le type de service par défaut dans kubernetes.
kubectl expose deployment nginx --port=80 --target-port=80 --type=LoadBalancer
l'exemple ci-dessus créera un service avec une adresse IP externe et une adresse IP de cluster. Dans le cas des services loadbalancer, nodeport, le service est accessible à partir d'autres clusters via externalIP
Juste pour ajouter à la réponse coolinuxoid. Je travaille avec GKE et je me base sur leur documentation a > lorsque vous ajoutez un Service de type ClusterIP, ils proposent d'y accéder via:
Accéder à votre service Répertoriez vos pods en cours d'exécution:
kubectl obtenir des pods
Dans la sortie, copiez l'un des noms de pod commençant par mon-déploiement.
NOM READY STATUS REDÉMARRE L'ÂGE my-deployment-dbd86c8c4-h5wsf 1/1 Exécution 0 2m51s
Insérez un shell dans l'un de vos conteneurs en cours d'exécution:
kubectl exec -it nom-du-pod - sh
où nom-pod est le nom de l'un des pods dans mon-déploiement.
Dans votre shell, installez curl:
apk add - no-cache curl
Dans le conteneur, faites une demande à votre service en utilisant votre cluster Adresse IP et port 80. Notez que 80 est la valeur du champ de port de votre service. Il s'agit du port que vous utilisez en tant que client du Service.
curl cluster-ip: 80 Ainsi, bien que vous puissiez trouver un moyen de vous diriger vers un tel service de l'extérieur, ce n'est pas une manière recommandée / ordinaire de le faire.
Comme meilleure alternative, utilisez:
LoadBalancer si vous travaillez sur un projet avec de nombreux services et des exigences détaillées. NodePort si vous travaillez sur quelque chose de plus petit où l'équilibrage de charge natif du cloud n'est pas nécessaire et que cela ne vous dérange pas d'utiliser l'adresse IP de votre nœud directement pour le mapper au service. Incidemment, le même document suggère une option pour le faire (testé personnellement; fonctionne comme un charme): Si les nœuds de votre cluster ont des adresses IP externes, recherchez le adresse IP externe de l'un de vos nœuds:
kubectl get nodes --output wide
La sortie affiche les adresses IP externes de vos nœuds:
NOM STATUT ROLES AGE VERSION EXTERNAL-IP gke-svc -... Prêt aucun 1h v1.9.7-gke.6 203.0.113.1
Tous les clusters n'ont pas d'adresse IP externe pour les nœuds. Par exemple, les nœuds des clusters privés n'ont pas d'adresse IP externe.
Créez une règle de pare-feu pour autoriser le trafic TCP sur le port de votre nœud:
gcloud compute firewall-rules create test-node-port --allow tcp:node-port
où: node-port est la valeur du champ nodePort de votre service.
Pouvez-vous montrer un exemple de ClusterIP externe?