J'essaie d'accéder au cluster elasticsearch sur GKE à partir de mon projet dans GAE - flexible. Puisque je ne veux pas d'équilibreur de charge externe, je suis ce guide: https://cloud.google.com/kubernetes- engine / docs / how-to / internal-load-balancing GKE et GAE sont déployés dans la même région, mais les appels au cluster elasticsearch expirent constamment. Est-ce que quelqu'un a fait cela et peut partager quelques conseils serait très apprécié!
Mon fichier service.yaml ressemble à ceci:
apiVersion: v1
kind: Service
metadata:
name: internalloadbalancerservice
annotations:
cloud.google.com/load-balancer-type: "Internal"
labels:
app.kubernetes.io/component: elasticsearch-server
app.kubernetes.io/name: elasticsearch #label selector service
spec:
type: LoadBalancer
loadBalancerSourceRanges: # restrict access
- xxxxxxxx
ports:
- name: myport
port: 9000
protocol: TCP # default; can also specify UDP
selector:
app.kubernetes.io/name : elasticsearch # label selector for Pods
app.kubernetes.io/component: elasticsearch-server
3 Réponses :
En supposant que l'application GAE et le cluster GKE se trouvent dans la même région et dans le même réseau VPC, je vous suggère de vous assurer que vous avez créé Ingress autorise les règles de pare-feu qui s'appliquent aux nœuds GKE en tant que cibles avec les VM de l'application GAE en tant que sources.
N'oubliez pas que l'entrée sur les machines virtuelles est refusée par la règle implicite de refus d'entrée. Ainsi, à moins que vous ne créiez des règles de pare-feu Ingress, vous ne pourrez envoyer de paquets à aucune VM. Et pour utiliser un équilibrage de charge interne (ILB) , le client et les VM backend doivent être dans le même:
- Région
- Réseau VPC
- Projet
Pour sauver quelqu'un d'autre d'une situation similaire, je vais partager mes découvertes sur les raisons pour lesquelles je n'ai pas pu me connecter à mon application GKE depuis GAE. Le GAE était dans la région europe-west, tandis que GKE était dans la région europe-west-4a. Je pensais que ce serait la même région. Mais le changement de région GKE en europe-west-1b a fonctionné. Pas très évident mais à la lecture de la documentation GAE region europe-west et GKE region europe-west-1b sont toutes les deux en Belgique.
GCP propose désormais un Global Access avec des équilibreurs de charge internes qui permettront aux équilibreurs de charge internes d'être accessibles depuis n'importe quelle région du même réseau.
Cela sera également utile pour votre cas. Si deux services sont exposés à l'aide d'adresses IP internes mais situés dans des régions différentes.
La fonctionnalité d'accès global est désormais stable (pour GKE 1.16.x strong> et au-dessus) et il peut être activé en ajoutant l'annotation ci-dessous à votre service.
apiVersion: v1
kind: Service
metadata:
name: internalloadbalancerservice
annotations:
cloud.google.com/load-balancer-type: "Internal"
# Required to enable global access
networking.gke.io/internal-load-balancer-allow-global-access: "true"
labels:
app.kubernetes.io/component: elasticsearch-server
app.kubernetes.io/name: elasticsearch #label selector service
spec:
type: LoadBalancer
loadBalancerSourceRanges: # restrict access
- xxxxxxxx
ports:
- name: myport
port: 9000
protocol: TCP # default; can also specify UDP
selector:
app.kubernetes.io/name : elasticsearch # label selector for Pods
app.kubernetes.io/component: elasticsearch-server
Par exemple : Le manifeste ci-dessous créera votre internalloadbalancerservice LoadBalancer avec une adresse IP interne et cette IP sera accessible depuis n'importe quelle région du même VPC.
networking.gke.io/internal-load-balancer-allow-global-access: "true"
Cela fonctionne bien pour GKE 1.16.x et les versions ultérieures. Pour les anciennes versions de GKE, vous pouvez consulter cette réponse .