Come il sistema operativo e minikube vm-driver
non è stato menzionato, presumo che sia --vm-driver=virtualbox
perché è probabilmente il caso più comune. Se usi qualcosa di diverso devi adattare questa soluzione in base alla tua configurazione.
Spiegazione:
127.0.0.1
è un localhost
(lo0
) indirizzo IP dell'interfaccia. Nodi, host e pod hanno le proprie interfacce localhost e non sono collegati tra loro.
Il tuo mysql-server
è in esecuzione sulla macchina Host e non può essere accessibile utilizzando il localhost
(o è l'intervallo IP) dall'interno di un cluster pod minikube o dall'interno di minikube vm.
Soluzione:
-
Dovresti avere una rete tra minikube VM e l'host. La rete NAT predefinita in Virtualbox non va bene per questo, quindi è meglio creare un'altra rete solo host. creiamo rete solo host aggiuntiva nell'interfaccia utente di Virtualbox con il nome
vmnet2
e intervallo IP192.168.77.1/24
. Non è necessario abilitare DHCP per quella rete. -
Devi configurare mysql per ascoltare sull'interfaccia vmnet2 o ip
192.168.77.1
che è utilizzato per impostazione predefinita per la macchina host. Controlla se è accessibile dall'host:
mysql -h 192.168.77.1 -u root -p
-
Per collegare questa rete a minikube VM è necessario utilizzare la chiave --host-only-cidr. Tipo diverso di
vm-driver
utilizzare diverse opzioni cli per questo scopo. Controlla ilminikube start --help
produzione. Quindi, pervirtualbox
sarà simile al seguente: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
Ho scritto altre opzioni cli più comuni solo per comodità.
MinikubeVM riceverà il seguente indirizzo IP:
192.168.77.100
(almeno la prima volta. )Puoi verificarlo usandominikube ssh
e poiifconfig
comandi. -
Ultima parte:dobbiamo creare un servizio e un endpoint all'interno del
minikube
gruppo:
kubectl apply -f mysql-service.yaml
Ecco un contenuto di mysql-service.yaml
file:
---
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
- Ora possiamo usare il
mysql-service
nome e porta3306
all'interno di qualsiasi pod di questo cluster come punto di destinazione.