从minikube访问运行在本地主机上的mysql

16

我正在minikube上运行一些服务,尝试连接到运行在本地主机(127.0.0.1)的mysql,端口为3306。

我读了这个,并尝试创建serviceEndpoints。但是,当我将IP地址指定为127.0.0.1时,它会抛出以下错误:

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)

我的部署如下:

---
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 数据库。
我也尝试将 127.0.0.1 替换为我的计算机的公共IP(虽然不知道为什么),但连接超时了。
感激任何对正确方向的帮助或指导。
3个回答

15

由于OS和minikube的vm-driver未被提及,我假设它是--vm-driver=virtualbox,因为这可能是最常见的情况。如果您使用其他设置,则需要根据自己的配置调整此解决方案。

127.0.0.1localhostlo0)接口IP地址。节点、主机和Pod都有自己的本地接口,它们彼此不连接。

您的mysql-server正在主机上运行,并且无法使用minikube集群pod内部的localhost(或其IP范围)或从minikube vm内部访问它。

  1. 您应该在minikube VM和主机之间建立网络。Virtualbox中的默认NAT网络不适用于此,因此最好创建另一个主机-only网络。让我们在Virtualbox UI中创建具有名称vmnet2和IP范围192.168.77.1/24的附加host-only网络。创建。对于该网络,您不需要启用DHCP。

  2. 您必须将mysql配置为侦听vmnet2接口或IP192.168.77.1,该接口默认用于主机。检查它是否可以从主机访问:

mysql -h 192.168.77.1 -u root -p 
  1. 要将此网络连接到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

为了方便起见,我写了其他最常见的cli选项。

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
现在我们可以在该集群的任何 pod 中使用 mysql-service 名称和端口 3306 作为目标点。

9

根据 minikube 的文档,如果你的 minikube 版本高于 v1.10,你可以使用 host.minikube.internal 来访问你的 localhost。你可以使用 minikube ssh 命令来确认连通性。


0

这与你的问题无关,但或许可以帮到你。

如果真正的问题是你想要将某些服务连接到数据库,那么在Minikube中运行数据库(而不是存储,容器可能是无状态的)是可行的。在这种情况下,你将能够使用标签将数据库服务与其他服务匹配。我们将使用PersistentVolume、PersistenceVolumeClaim和Secrets。这个视频对此非常有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接