Jako system operacyjny i minikube vm-driver
nie było wspomniane, zakładam, że jest to --vm-driver=virtualbox
bo to chyba najczęstszy przypadek. Jeśli używasz czegoś innego, musisz dostosować to rozwiązanie do swojej konfiguracji.
Wyjaśnienie:
127.0.0.1
jest localhost
(lo0
) adres IP interfejsu. Węzły, hosty i pody mają własne interfejsy hosta lokalnego i nie są ze sobą połączone.
Twój mysql-server
działa na komputerze hosta i nie może być dostępny za pomocą localhost
(lub jego zakres adresów IP) z wnętrza klastra minikube lub z wnętrza minikube vm.
Rozwiązanie:
-
Powinna istnieć sieć między maszyną wirtualną minikube a hostem. Domyślna sieć NAT w Virtualbox nie jest do tego dobra, więc lepiej jest utworzyć inną sieć tylko dla hosta. Zróbmy utworzyć dodatkowa sieć host-only w Virtualbox UI o nazwie
vmnet2
i zakres IP192.168.77.1/24
. Nie musisz włączać DHCP dla tej sieci. -
Musisz skonfigurować mysql do nasłuchiwania na interfejsie vmnet2 lub ip
192.168.77.1
który jest domyślnie używany przez maszynę hosta. Sprawdź, czy jest dostępny z hosta:
mysql -h 192.168.77.1 -u root -p
-
Aby podłączyć tę sieć do minikube VM, należy użyć klucza --host-only-cidr. Inny typ
vm-driver
użyj w tym celu różnych opcji CLI. Sprawdźminikube start --help
wyjście. Tak więc dlavirtualbox
będzie wyglądać następująco: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
Napisałem inne najczęstsze opcje CLI tylko dla wygody.
MinikubeVM otrzyma następujący adres IP:
192.168.77.100
(przynajmniej za pierwszym razem. )Możesz to sprawdzić za pomocąminikube ssh
a następnieifconfig
poleceń. -
Ostatnia część - musimy stworzyć dla niej usługę i punkt końcowy w
minikube
klaster:
kubectl apply -f mysql-service.yaml
Oto zawartość pliku mysql-service.yaml
plik:
---
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
- Teraz możemy korzystać z
mysql-service
nazwa i port3306
wewnątrz dowolnego zasobnika tego klastra jako punkt docelowy.