Connect to local database from inside minikube cluster

末鹿安然 提交于 2019-12-04 07:48:19

This is because your service type is ExternalName which only fits in cloud environment such as AWS and GKE. To run your service locally change the service type to NodePort which will assign a static NodePort between 30000-32767. If you need to assign a static port on your own so that minikube won't pick a random port for you define that in your service definition under ports section like this nodePort: 32002.

And also I don't see any selector that points to your MySQL deployment in your service definition. So include the corresponding selector key pair (e.g. app: mysql-server) in your service definition under spec section. That selector should match with the selector you have defined in MySQL deployment definition.

So your service definition should be like this:

kind: Service
apiVersion: v1
metadata:
  name: mysql-db-svc
  namespace: external
spec:
  selector:
    app: mysql-server
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306
    nodePort: 32002
  type: NodePort

After you deploy the service you can hit the MySQL service via http://{minikube ip}:32002 Replace {minikube ip} with actual minikube ip.

Or else you can get the access URL for the service with following command

minikube service <SERVICE_NAME> --url

Replace the with actual name of the service. In your case it is mysql-db-svc

If I'm not mistaken, you should also create an Endpoint for this service as it's external.

In your case, the Endpoints definition should be as follows:

kind: "Endpoints"
apiVersion: "v1"
metadata:
  name: mysql-db-svc
  namespace: external
subsets: 
- addresses:
  - ip: "10.10.1.1"
  ports:
    port: 3306

You can read about the external sources on Kubernetes Defining a service docs.

I'm using ubuntu with Minikube and my database runs outside of minikube inside a docker container and can be accessed from localhost @ 172.17.0.2. My Kubernetes service for my external mysql container reads as follows:

kind: Service
apiVersion: v1
metadata:
  name: mysql-db-svc
  namespace: external
spec: 
  type: ExternalName
  externalName: 10.0.2.2

Then inside my .env for a project my DB_HOST is defined as

mysql-db-svc.external.svc

... the name of the service "mysql-db-svc" followed by its namespace "external" with "svc"

Hope that makes sense.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!