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 :)
3 Réponses :
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?
Si par " exposer " vous entendez la possibilité d'atteindre vos points de terminaison de service sans IP de cluster, alors utilisez simplement le sélecteur
dans votre service headless, ie
apiVersion: v1 kind: Service metadata: name: cassandra spec: clusterIP: None selector: app: cassandra ports: - port: 80 targetPort: 80
Pour plus de détails, reportez-vous à documentation
Sinon, si vous souhaitez exposer vos déploiements en dehors du cluster, vous ne pourrez pas le faire avec le service headless.
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 a> "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
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!
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 a>