我在minikube中运行一些服务,并尝试连接到在3306端口上的localhost(127.0.0.1)上运行的mysql。
我阅读了this,并试图创建service
和Endpoints
。但是,当我将127.0.0.1
指定为IP时,它将引发如下错误:
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
请协助我了解如何从mysql
连接到minikube
数据库。
我还尝试用计算机的公共IP替换127.0.0.1
(虽然不知道为什么),并且连接超时。
感谢任何对正确方向的帮助或指导。
答案 0 :(得分:0)
由于未提及操作系统和迷你库vm-driver
,因此我认为它是--vm-driver=virtualbox
,因为这可能是最常见的情况。如果您使用其他方法,则需要根据您的配置调整此解决方案。
127.0.0.1
是一个localhost
(lo0
)接口IP地址。节点,主机和Pod具有它们自己的localhost接口,并且彼此之间未连接。
您的mysql-server
在主机上运行,无法通过localhost
(或其IP范围)从minikube集群容器内部或minikube vm内部进行访问。
您应该在minikube VM和主机之间建立网络。 Virtualbox中的默认NAT网络不适合这样做,因此最好创建另一个仅主机的网络。让我们在Virtualbox UI中创建名为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
为了方便起见,我编写了其他最常见的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
mysql-service
名称和端口3306
作为目的地。答案 1 :(得分:0)
这与您的问题无关,但也许有帮助。
如果真正的问题是要将某些服务连接到数据库,则可以在Minikube中运行数据库(不是存储,容器可能是无状态的)。在这种情况下,您将能够使用标签将数据库服务与其他服务进行匹配。我们将使用PersistentVolume,PersistenceVolumeClaim和Secrets。 video对此确实很有帮助。