我的机器上运行了minikube v0.17.1版。我想模拟我将在AWS中拥有的环境,我的MySQL实例将在我的Kubernetes集群之外。
基本上,我如何将在我的机器上运行的本地MySQL实例暴露给通过minikube运行的Kubernetes集群?
答案 0 :(得分:8)
Kubernetes允许您创建没有选择器的服务,并且集群不会为此服务创建相关端点,此功能通常用于代理旧组件或外部组件。
创建不带选择器的服务
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 1443
targetPort: <YOUR_MYSQL_PORT>
创建相对端点对象
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
从服务<SERVICE_IP>:1443
或my-service:1443
答案 1 :(得分:0)
如果要将本地端口映射到Minikube集群,可以按照Kubernetes documentation中所述使用kubectl port-forward
。
以下示例将127.0.0.1:6379
映射到同一端口上minikube ip上的Redis服务。
kubectl port-forward svc/redis-master 6379:6379
答案 2 :(得分:0)
一个想法是使用没有选择器的无头服务。由于此服务没有选择器,因此将不会创建相应的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
另一种解决方案是使用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
目前不支持端口映射。
另一个注意事项:IP 10.0.2.2
仅与Virtual Box一起使用(请参阅SO)。
对于xhyve
,请尝试将其替换为192.168.99.1
(请参见GitHub issue和issue)。
答案 3 :(得分:0)
从minikube 1.10开始,有一个special hostname host.minikube.internal
可以解析为运行minikube VM或容器的主机。然后,您可以在pod的环境变量或定义相关设置的ConfigMap中配置此主机名。
答案 4 :(得分:-1)
提醒一下,如果在Windows上,请打开防火墙。