Като ОС и minikube vm-driver
не беше споменат, предполагам, че е --vm-driver=virtualbox
защото това е може би най-честият случай. Ако използвате нещо различно, трябва да коригирате това решение според вашата конфигурация.
Обяснение:
127.0.0.1
е localhost
(lo0
) IP адрес на интерфейса. Възлите, хостовете и модулите имат свои собствени локални интерфейси и не са свързани един с друг.
Вашият mysql-server
работи на хост машината и не може да бъде достъпен чрез localhost
(или това е диапазонът на IP) от вътрешността на minikube cluster pod или от вътрешността на minikube vm.
Решение:
-
Трябва да имате мрежа между minikube VM и хоста. NAT мрежата по подразбиране във Virtualbox не е добра за това, така че е по-добре да създадете друга мрежа само за хост. Нека създаваме допълнителна мрежа само за хост в потребителския интерфейс на Virtualbox с името
vmnet2
и IP обхват192.168.77.1/24
. Не е необходимо да активирате DHCP за тази мрежа. -
Трябва да конфигурирате mysql да слуша на интерфейса vmnet2 или ip
192.168.77.1
който по подразбиране се използва за хост машината. Проверете дали е достъпен от хоста:
mysql -h 192.168.77.1 -u root -p
-
За да прикачите тази мрежа към minikube VM трябва да се използва ключът --host-only-cidr. Различен тип
vm-driver
използвайте различни Cli опции за тази цел. Проверетеminikube start --help
изход. И така, заvirtualbox
ще изглежда по следния начин: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
Написах други най-често срещани опции за кли, само за удобство.
MinikubeVM ще получи следния IP адрес:
192.168.77.100
(поне първия път. )Можете да го проверите с помощта наminikube ssh
и след товаifconfig
команди. -
Последна част - трябва да създадем услуга и крайна точка за нея вътре в
minikube
клъстер:
kubectl apply -f mysql-service.yaml
Ето съдържанието на mysql-service.yaml
файл:
---
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
- Сега можем да използваме
mysql-service
име и порт3306
вътре във всяка капсула на този клъстер като точка на дестинация.