Reputation: 3509
I have minikube version v0.17.1 running on my machine. I want to simulate the environment I will have in AWS, where my MySQL instance will be outside of my Kubernetes cluster.
Basically, how can I expose my local MySQL instance running on my machine to the Kubernetes cluster running via minikube?
Upvotes: 25
Views: 12055
Reputation: 341
If you are using minikube, try host.minikube.internal
, for example,
data:
CACHE_LOCATION: redis://host.minikube.internal:6379/0
DJANGO_ITEK_DB_URL: postgres://xxx:[email protected]/db
Upvotes: 0
Reputation: 1287
Follow instructions in https://minikube.sigs.k8s.io/docs/handbook/host-access/
You need then obtain your pc IP ifconfig | grep "inet " | grep -Fv 127.0.0.1 | awk '{print $2}
--> This one is for mac, you can find similar command to linx, windows
minikube ssh
and copy printed IP and pasted in \etc\hosts
as it says and it should work
Note use host.minikube.internal
as mysql host and exposed MySQL port.
Upvotes: 0
Reputation: 158657
As of minikube 1.10, there is a special hostname host.minikube.internal
that resolves to the host running the minikube VM or container. You can then configure this hostname in your pod's environment variables or the ConfigMap that defines the relevant settings.
Upvotes: 5
Reputation: 33036
Option 1 - use a headless service without selectors
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 (See 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
Option 2 - use ExternalName
service
kind: Service
apiVersion: v1
metadata:
name: my-service
spec:
type: ExternalName
externalName: minikube.host
The only caveat is that it needs to be able to resolve minikube.host
. Simply add this line to the etc/hosts
file should do it.
10.0.2.2 minikube.host
ExternalName
doesn't support port mapping at the moment.
Another note: The IP 10.0.2.2
is known to work with Virtual Box only (see SO).
For xhyve
, try replacing that with 192.168.99.1
(see GitHub issue and issue). A demo GitHub.
Upvotes: 3
Reputation: 412
Kubernetes allows you to create a service without selector, and cluster will not create related endpoint for this service, this feature is usually used to proxy a legacy component or an outside component.
Create a service without selector
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
ports:
- protocol: TCP
port: 1443
targetPort: <YOUR_MYSQL_PORT>
Create a relative Endpoint object
apiVersion: v1
kind: Endpoints
metadata:
name: my-service
subsets:
- addresses:
- ip: <YOUR_MYSQL_ADDR>
ports:
- port: <YOUR_MYSQL_PORT>
Get service IP
$ kubectl get svc my-service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-service <SERVICE_IP> <none> 1443/TCP 18m
Access your MYSQL from service <SERVICE_IP>:1443
or my-service:1443
Upvotes: 15