2 votes

Réseau GCP depuis le calcul VM jusqu'au service GKE dans le même VPC

J'ai une instance de machine virtuelle nommée mysql-1 dans le même compte, le même VPC qu'un cluster GKE.

J'ai un service k8s déployé :

~ $ kubectl get services
NAME                                           TYPE           CLUSTER-IP      EXTERNAL-IP      PORT(S)                                        AGE
haproxy-mysql                                  LoadBalancer   10.19.242.236   8.8.8.8     3306:32375/TCP,3307:30748/TCP,3308:30064/TCP   40m 
^ remplacement de l'adresse IP externe réelle par 8.8.8.8 ici

Sur la VM, j'ai mysql qui tourne sur le port 3306

user@mysql-1:~$ netstat -ntap |grep 3306|grep LISTE
(Toutes les processus n'ont pas pu être identifiés, les informations sur les processus non possédés
 ne seront pas affichées, vous devez être root pour tout voir.)
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -
user@mysql-1:~$ ip a|grep 156
    inet 10.156.0.13/32 brd 10.156.0.13 scope global dynamic ens4

à partir d'un pod k8s, je peux me connecter à la vm :

# curl -I 10.156.0.13:3306
curl: (8) Réponse du serveur étrange

depuis la VM, je ne peux pas me connecter au service haproxy en utilisant les IP internes et externes :

user@mysql-1:~$ curl --connect-timeout 2 10.19.242.236:3306
curl: (28) Connexion expirée après 2001 millisecondes
user@mysql-1:~$ curl --connect-timeout 2 8.8.8.8:3306
curl: (28) Connexion expirée après 2001 millisecondes

quand j'utilise l'IP du pod, ça fonctionne :

$ kubectl get pods -A -o wide |grep haproxy-mysql
default       haproxy-mysql-6dd5f8cf64-72gdx                             1/1     Running   0          10m   10.16.1.39    gke-blabla-default-pool-370bb0fd-92rb              
default       haproxy-mysql-6dd5f8cf64-zgmwb                             1/1     Running   0          10m   10.16.2.56    gke-blabla-default-pool-370bb0fd-prn7              
user@mysql-1:~$ curl --connect-timeout 2 10.16.1.39:3306
Attention: La sortie binaire peut perturber votre terminal. Utilisez "--output -" pour indiquer
Attention: à curl de le renvoyer quand même sur votre terminal, ou utilisez "--output
Attention: " pour enregistrer dans un fichier.

J'ai une règle de pare-feu :

~ $ gcloud compute firewall-rules list|grep 3306
k8s-fw-ad6943bb1121311eab6fc42010a9c005  default  INGRESS    1000      tcp:3306,tcp:3307,tcp:3308          False

~ $ gcloud compute firewall-rules describe k8s-fw-ad6943bb1121311eab6fc42010a9c005
allowed:
- IPProtocol: tcp
  ports:
  - '3306'
  - '3307'
  - '3308'
creationTimestamp: '2019-11-28T11:18:23.294-08:00'
description: '{"kubernetes.io/service-name":"default/haproxy-mysql", "kubernetes.io/service-ip":"8.8.8.8"}'
direction: INGRESS
disabled: false
id: '2373636381534430096'
kind: compute#firewall
logConfig:
  enable: false
name: k8s-fw-ad6943bb1121311eab6fc42010a9c005
network: https://www.googleapis.com/compute/v1/projects/blalala-1234lab/global/networks/default
priority: 1000
selfLink: https://www.googleapis.com/compute/v1/projects/blalala-1234/global/firewalls/k8s-fw-ad6943bb1121311eab6fc42010a9c005
sourceRanges:
- 8.8.8.8/32
- 8.8.8.8/32
- 8.8.8.8/32
- 10.0.0.0/8
- 8.8.8.8/32
- 8.8.8.8/32
- 8.8.8.8/32
- 8.8.8.8/32
targetTags:
- gke-blablabla-4125f0a3-node

à partir d'un serveur qui est explicitement répertorié dans le bloc ci-dessus (masqué en tant que 8.8.8.8/32), je peux me connecter au service EXTERNAL-IP

Qu'est-ce que je rate ici ?

2voto

MTND G Points 21

Avez-vous suivi toutes les étapes ici Configurer l'équilibrage de charge HTTP avec Ingress pour configurer votre cluster GKE?

D'après ce que je comprends, vous devez Exposer votre déploiement en tant que service en interne

2voto

beauxq Points 190

Les adresses IP des Pods sont routables, les adresses IP des services ne le sont pas. Création d'un cluster VPC-native:

Les adresses IP des clusters pour les services internes ne sont disponibles que depuis l'intérieur du cluster. Si vous souhaitez accéder à un service Kubernetes depuis le même VPC et la même région, mais depuis l'extérieur du cluster (par exemple, depuis une instance Compute Engine), utilisez un équilibreur de charge interne.

Documentation sur l'équilibreur de charge interne

Pour l'accès à l'IP externe, je vais tirer une première conclusion ici. Peut-être que de telles règles ne fonctionneraient pas lorsque la source est une IP privée et la cible est une IP externe (même si elle est exprimée sous forme de balise). Pour une connexion entrante, cette IP privée ne serait pas considérée comme l'IP source et la règle ne correspondrait pas?

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X