我的机器上运行着 minikube 版本 v0.17.1。我想模拟我在 AWS 中的环境,我的 MySQL 实例将在我的 Kubernetes 集群之外。
基本上,如何将我机器上运行的本地 MySQL 实例暴露给通过 minikube 运行的 Kubernetes 集群?
我的机器上运行着 minikube 版本 v0.17.1。我想模拟我在 AWS 中的环境,我的 MySQL 实例将在我的 Kubernetes 集群之外。
基本上,如何将我机器上运行的本地 MySQL 实例暴露给通过 minikube 运行的 Kubernetes 集群?
Kubernetes 允许你创建一个没有选择器的服务,并且集群不会为这个服务创建相关的端点,这个特性通常用于代理一个遗留组件或一个外部组件。
创建没有选择器的服务
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 1443
targetPort: <YOUR_MYSQL_PORT>
创建一个相对的 Endpoint 对象
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: <YOUR_MYSQL_ADDR>
ports:
- port: <YOUR_MYSQL_PORT>
获取服务IP
$ kubectl get svc my-service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service <SERVICE_IP> <none> 1443/TCP 18m
从服务访问您的 MYSQL<SERVICE_IP>:1443
或my-service:1443
从 minikube 1.10 开始,有一个特殊 host.minikube.internal
的主机名可以解析为运行 minikube VM 或容器的主机。然后,您可以在 pod 的环境变量或定义相关设置的 ConfigMap 中配置此主机名。
选项 1 - 使用没有选择器的无头服务
因为这个服务没有选择器,所以Endpoints
不会创建相应的对象。您可以手动将服务映射到您自己的特定端点(请参阅doc)。
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
ports:
- port: 80
targetPort: 8080
---
kind: Endpoints
apiVersion: v1
metadata:
name: my-service
subsets:
- addresses:
- ip: 10.0.2.2
ports:
- port: 8080
选项 2 - 使用ExternalName
服务
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: ExternalName
externalName: minikube.host
唯一需要注意的是,它需要能够解决minikube.host
. 只需将此行添加到etc/hosts
文件中即可。
10.0.2.2 minikube.host
ExternalName
目前不支持端口映射。
另一个注意事项:已知 IP10.0.2.2
仅适用于 Virtual Box(请参阅SO)。对于xhyve
,请尝试将其替换为192.168.99.1
(请参阅 GitHub问题和问题)。一个演示GitHub。
提醒一下,如果在 Windows 上,请打开防火墙。