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

Nir*_*rav 10 mysql database-connection kubernetes minikube

我正在 minikube 中运行一些服务并尝试连接到 3306 端口上在 localhost(127.0.0.1) 上运行的 mysql。

我读了这个并尝试创建serviceEndpoints. 但是,当我指定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
Run Code Online (Sandbox Code Playgroud)

请帮助我了解如何mysqlminikube.

我也试过用127.0.0.1我电脑的公共 IP替换(虽然不知道为什么)并且连接超时。

对正确方向的任何帮助或指导表示赞赏。

VAS*_*VAS 14

由于vm-driver没有提到操作系统和 minikube ,我认为这是--vm-driver=virtualbox因为这可能是最常见的情况。如果您使用不同的东西,则需要根据您的配置调整此解决方案。

解释:

127.0.0.1localhost( lo0) 接口 IP 地址。节点、主机和 Pod 有自己的 localhost 接口,它们之间没有连接。

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

解决方案:

  1. 您应该在 minikube VM 和主机之间建立网络。Virtualbox 中的默认 NAT 网络对此不利,因此最好创建另一个仅限主机的网络。让我们在 Virtualbox UI 中使用名称和 IP 范围创建额外的仅主机网络。您不需要为该网络启用 DHCP。vmnet2192.168.77.1/24

  2. 您必须配置 mysql 以侦听192.168.77.1默认情况下用于主机的接口 vmnet2 或 ip 。检查它是否可以从主机访问:

mysql -h 192.168.77.1 -u root -p 
Run Code Online (Sandbox Code Playgroud)
  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
    
    Run Code Online (Sandbox Code Playgroud)

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

    MinikubeVM会得到下面的IP地址:192.168.77.100。至少在第一时间)您可以使用检查minikube ssh,然后ifconfig命令。

  2. 最后一部分 - 我们需要在minikube集群内为它创建一个服务和端点:

kubectl apply -f mysql-service.yaml
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)
  1. 现在我们可以使用该集群的任何 pod 内的mysql-service名称和端口3306作为目标点。


Cha*_*ong 10

\xe2\x80\x83 根据minikube\ 的文档,如果你的host.minikube.internal版本高于. 您可以使用它来确认连接。localhostminikube\'sv1.10minikube ssh

\n