我在 minikube 中运行一些服务,并尝试连接到 3306 端口上运行在 localhost(127.0.0.1) 上的 mysql。
我读了this并尝试创建 service
和 Endpoints
。但是,当我将 127.0.0.1
指定为 IP 时,它会抛出如下错误:
端点“mysql-service”无效:子集[0].addresses[0].ip:无效值:“127.0.0.1”:可能不在环回范围内(127.0.0.0/8 )
我的部署如下:
---
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
请帮助我了解如何从 minikube
连接到 mysql
数据库。
我也尝试过用我电脑的公共(public) IP 替换 127.0.0.1
(虽然不知道为什么)但连接超时。
感谢任何朝着正确方向提供的帮助或指导。
最佳答案
由于未提及操作系统和 minikube vm-driver
,我假设它是 --vm-driver=virtualbox
因为它可能是最常见的情况。如果您使用不同的东西,则需要根据您的配置调整此解决方案。
说明:
127.0.0.1
是一个 localhost
(lo0
) 接口(interface) IP 地址。节点、主机和 Pod 有自己的本地主机接口(interface),并且它们之间没有连接。
您的 mysql-server
正在主机上运行,无法使用 localhost
(或其 IP 范围)从 minikube 集群 pod 内部或从 minikube 内部访问虚拟机。
解决方案:
您应该在 minikube VM 和主机之间有一个网络。 Virtualbox 中的默认 NAT 网络对此不利,因此最好创建另一个仅供主机使用的网络。让我们create Virtualbox UI 中的附加仅主机网络,名称为
vmnet2
,IP 范围为192.168.77.1/24
。您不需要为该网络启用 DHCP。您必须将 mysql 配置为在默认情况下用于主机的接口(interface) vmnet2 或 ip
192.168.77.1
上监听。检查它是否可以从主机访问:
mysql -h 192.168.77.1 -u root -p
要将此网络连接到 minikube 虚拟机,应使用 --host-only-cidr key 。为此,不同类型的
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
为了方便起见,我编写了其他最常见的 cli 选项。
MinikubeVM 将获得以下 IP 地址:
192.168.77.100
( at least the first time. ) 您可以使用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
- 现在我们可以使用此集群的任何 pod 内的
mysql-service
名称和端口3306
作为目标点。
关于mysql - 从 minikube 访问在本地主机上运行的 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55164223/