![Minikube。如何允许从容器访问本地 mySQL 数据库](https://linux22.com/image/749887/Minikube%E3%80%82%E5%A6%82%E4%BD%95%E5%85%81%E8%AE%B8%E4%BB%8E%E5%AE%B9%E5%99%A8%E8%AE%BF%E9%97%AE%E6%9C%AC%E5%9C%B0%20mySQL%20%E6%95%B0%E6%8D%AE%E5%BA%93.png)
我正在尝试从 minikube 容器访问本地 MySQL 数据库。我的 minikube 在带有 hyper-v 驱动程序的 Windows 10 上运行。我找到了一些解决方案(从 VirtualBox 创建仅主机网络),但没有找到适用于 hyper-v 的解决方案。有人能帮助我如何从 minikube hyper-v 连接到 localhost mysql 服务器吗?
答案1
Minikube v1.10 在集群 DNS 中添加了一个主机名,允许 Pod 连接到主机。让您的 Pod 使用此 DNS 条目访问主机 IP。此时,DNS 主机名是host.minikube.internal
看文档了解更多。
答案2
首先你需要创建一个Service
然后Endpoint
使用你的 MySQL 的 IP 创建一个。
apiVersion: v1
kind: Service
metadata:
name: database
spec:
ports:
- port: 3306
targetPort: 3306
protocol: TCP
---
# Because this service has no selector, the corresponding Endpoints
# object will not be created. You can manually map the service to
# your own specific endpoints:
kind: Endpoints
apiVersion: v1
metadata:
name: database
subsets:
- addresses:
- ip: "23.99.34.75"
ports:
- port: 3306
你也可以查看这个问题从 minikube 集群内部连接到本地数据库。
答案3
通过以下方式获取主机 IPHOST_IP=$(minikube ssh "route -n | grep ^0.0.0.0 | awk '{ print \$2 }'")
根据K8s文档申请:
apiVersion: v1
kind: Service
metadata:
name: mysql-db
spec:
ports:
- port: 3306
targetPort: 3306
protocol: TCP
---
kind: EndpointSlice
apiVersion: discovery.k8s.io/v1
metadata:
name: mysql-db-endpoint
labels:
kubernetes.io/service-name: mysql-db
addressType: IPv4
ports:
- port: 3306
name: ''
appProtocol: http
protocol: TCP
endpoints:
- addresses:
- $HOST_IP