web-dev-qa-db-fra.com

Accédez à MySQL en cours d'exécution sur localhost de Minikube

Je gère des services à Minikube et j'essaie de se connecter à MySQL en cours d'exécution sur localhost (127.0.0.1) sur le port 3306.

J'ai lu - ceci et essaye de créer service et Endpoints. Cependant, lorsque je spécifie 127.0.0.1 En tant que IP, il jette une erreur comme ci-dessous:

The Endpoints "mysql-service" is invalid: subsets[0].addresses[0].ip: Invalid value: "127.0.0.1": may not be in the loopback range (127.0.0.0/8)

mon déploiement est comme ci-dessous:

---
apiVersion: v1
kind: Service
metadata:
  name: mysql-service
spec:
  ports:
  - protocol: TCP
    port: 1443
    targetPort: mysql

---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-service
subsets:
  - addresses:
    - ip: 127.0.0.1
    ports:
    - name: mysql
      port: 3306

S'il vous plaît, aidez-moi à comprendre comment puis-je vous connecter à mysql dB à partir de minikube.

J'ai également essayé de remplacer 127.0.0.1 Avec la propriété intellectuelle publique de mon ordinateur (ne savez pas pourquoi) et la connexion a été expirée.

Toute aide ou guide vers la bonne direction est appréciée.

7
Nirav

Comme le système d'exploitation et minikube vm-driver n'a pas été mentionné, je suppose que c'est --vm-driver=virtualbox parce que c'est probablement le cas le plus souvent. Si vous utilisez quelque chose de différent, vous devez ajuster cette solution en fonction de votre configuration.

Explication:

127.0.0.1 est un localhost (lo0) Interface adresse IP. Les nœuds, les hôtes et les pods ont leurs propres interfaces localhost et elles ne sont pas connectées les unes aux autres.

Ton mysql-server est en cours d'exécution sur la machine hôte et ne peut pas être accessible à l'aide de la plage localhost (ou de la plage IP) de l'intérieur d'une gousse de cluster Minikube ou de l'intérieur Minikube VM.

Solution:

  1. Vous devriez avoir un réseau entre minikube VM et l'hôte. Par défaut NAT Network in VirtualBox n'est pas bon pour cela, il est donc préférable de créer un autre hôte uniquement. Réseau. Soyons Créer Réseau d'hôte supplémentaire uniquement dans VirtualBox UI avec le nom vmnet2 et gamme IP 192.168.77.1/24. Vous n'avez pas besoin d'activer DHCP pour ce réseau.

  2. Vous devez configurer MySQL pour écouter sur l'interface VMNET2 ou IP 192.168.77.1 qui est par défaut utilisé pour la machine hôte. Vérifiez si c'est accessible à partir de l'hôte:

mysql -h 192.168.77.1 -u root -p 
  1. Pour attacher ce réseau à MINIKUBE VM -HOST-SEUL-SEUL-CIDR doit être utilisé. Différent type de vm-driver Utilisez différentes options CLI à cette fin. Vérifier la minikube start --help sortir. Donc, pour virtualbox Cela ressemblera à ce qui suit:

    minikube start --cpus 2 \
                   --memory 2048 \
                   --disk-size 20g \
                   --vm-driver virtualbox \
                   --network-plugin flannel \
                   --kubernetes-version v1.12.2 \
                   --Host-only-cidr 192.168.77.1/24
    

    J'ai écrit d'autres options CLI les plus courantes pour la commodité.

    MinikubevM recevra l'adresse IP suivante: 192.168.77.100 ( au moins la première fois. ) Vous pouvez le vérifier à l'aide de minikube ssh, puis ifconfig commandes.

  2. Dernière partie - Nous devons créer un service et un point de terminaison à l'intérieur du cluster minikube:

kubectl apply -f mysql-service.yaml

Voici un contenu du mysql-service.yaml déposer:

---
apiVersion: v1
kind: Service
metadata:
   name: mysql-service
spec:
   type: ClusterIP
   ports:
   - protocol: TCP
     port: 3306
     targetPort: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mysql-service
subsets:
  - addresses:
      - ip: 192.168.77.1
    ports:
      - port: 3306
  1. Maintenant, nous pouvons utiliser le mysql-service Nom et port 3306 À l'intérieur de tout pod de ce groupe comme point de destination.
6
VAS

Ce n'est pas lié à votre question mais peut-être que cela aide.

Si le problème réel est que vous souhaitez connecter un service à la base de données, il est possible d'exécuter la base de données (pas le stockage, les conteneurs peuvent être apatrides) à l'intérieur de Minikube. Dans ce scénario, vous pourrez utiliser des étiquettes pour correspondre à votre service de base de données avec d'autres services. Nous utiliserions persistentvolume, persistancevolumeclaim et secrets. Ceci Vidéo était vraiment utile pour cela.

0
Rubén Morales