1
votes

Comment puis-je exposer un service StatefulSet avec ClusterIP None sur Google Cloud Platform?

Comment puis-je exposer un service StatefulSet (cassandra, mysql, etc ...) avec ClusterIP = None sur Kubernetes dans Google Cloud Platform?

J'ai besoin de changer la configuration de ClusterIP? Ou j'ai besoin de configurer Google Cloud NAT? Ou j'ai besoin de changer d'autres choses?

Merci

EDIT: Je souhaite me connecter à cassandra depuis une adresse IP externe, depuis n'importe où sur Internet

EDIT2: Je suppose que la solution est d'utiliser LoadBalance au lieu de ClusterIP , mais lorsque j'utilise LoadBalance , les nœuds Cassandra peuvent ' t trouver le nœud d'amorçage. Ensuite, j'utilise ClusterIP = None vers le cluster Cassandra, et j'ai créé un autre POD avec type = LoadBalance pour me connecter à Cassandra et avoir des connexions à l'extérieur. Et maintenant ça marche :)


4 commentaires

Pourquoi voulez-vous que ClusterIP soit None?


Le service @FrankYuchengGu pour statefulset aurait ClusterIP = None et il s'appelle Headless Service


@Rui, voulez-vous dire exposer en dehors du cluster?


Vous voudrez peut-être jeter un œil aux articles suivants qui vous donnent une idée de ce que vous voulez réaliser. kubernetes.io/docs/concepts/services-networking/service/… et itnext.io/exposing-statefulsets-in-kubernetes-698730fb92a1


3 Réponses :


2
votes

Les services ClusterIP ne sont pas exposés en dehors du cluster Kubernetes. Peut-être voulez-vous plutôt utiliser un service NodePort ou LoadBalancer?


0 commentaires

4
votes

5 commentaires

Je veux m'exposer à Internet. Je veux que les serveurs externes se connectent à cassandra.


@RuiMartins alors quelle est la raison derrière ClusterIP: None ? Pourquoi ne pas exposer avec le type de port LoadBalancer ?


J'ai suivi les étapes des exemples de "COMMENT CRÉER UN CLUSTER CASSANDRA SUR KUBERNETES"


J'ai changé pour "LoadBalancer", mais avec "LoadBalancer" un seul nœud est démarré, les autres nœuds échouent. Je pense que cassandra doit être ClusterIP sans IP. J'ai lu ceci ici: github.com/jaegertracing/jaeger-kubernetes/issues/33 "cela aurait pu être dû au fait que j'ai modifié le paramètre clusterIP pour obtenir une adresse IP, au lieu de le laisser comme None. selon la documentation - kubernetes.io/docs/concepts/workloads/controllers/statefulse‌ t - un service headless est requis, donc cela ressemble à PEBKAC. fonctionne très bien maintenant."


Au départ, vous vouliez exposer votre service à Internet et revenez maintenant à l'affirmation selon laquelle un service sans tête est requis. C'est quelque chose de controversé. La seule solution possible est d'exposer le service headless via ingress avec le sélecteur matchLabels



1
votes

Si vous souhaitez exposer le service en externe, vous aurez besoin d'un service basé sur ClusterIP, qu'il s'agisse d'un NodePort ou LoadBalancer; même si vous utilisez ingress, vous devrez au moins le sauvegarder avec un service ClusterIP.

Le ClusterIP est uniquement interne et fournit au cluster Kubebernetes un point de terminaison fixe pour référencer votre déploiement / pod en interne . La méthode la plus simple pour exposer vos services consiste à utiliser un NodePort , auquel cas votre service prendra l'adresse IP du nœud en externe avec un numéro de port élevé (30000+). Sur GCP, si vous définissez un load-balancer , une adresse IP externe vous sera attribuée et le trafic sera transféré vers vos pods dans les ensembles avec état. Si vous utilisez une entrée, votre adresse IP externe sera celle de votre entrée, et le transfert de paquets vers vos services sera effectué en fonction de l'URL de la demande (c'est-à-dire que vous pouvez avoir plusieurs noms de domaine complets mappés sur une seule adresse IP externe dans votre DNS).

Les services "Headless" sont principalement utilisés pour découpler votre conception de Kubernetes. L'hypothèse est que vous ferez votre propre découverte de services, et je ne pense pas que ce soit un bon cas d'utilisation pour votre application.

J'espère que cela vous aidera!


0 commentaires