Kubernetes MySQL connection timeout

9/2/2018

I've set up a Kubernetes deployment and service for MySQL. I cannot access the MySQL service from any pod using its DNS name... It just times out. Any other port refuses the connection immediately, but the port in my service configuration times out after ~10 seconds.

  1. I am able to resolve the MySQL Pod DNS.
  2. I cannot ping the host.

Service.yml

apiVersion: v1
kind: Service
metadata:
  name: mysql-service
  labels:
    run: mysql-service
spec:
  ports:
  - port: 3306
    protocol: TCP
  - port: 3306
    protocol: UDP
  selector:
    run: mysql-service

Deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-service
  labels:
    app: mysql-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mysql-service
  template:
    metadata:
      labels:
        app: mysql-service
    spec:
      containers:
      - name: 'mysql-service'
        image: mysql:5.5
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: some_password
          - name: MYSQL_DATABASE
            value: some_database
        ports:
          - containerPort: 3306
-- Monstrum
kubernetes

1 Answer

9/2/2018

Your deployment (and more specifically its pod spec) says

labels:
  app: mysql-service

but your service says

selector:
  run: mysql-service

These don't match, so your service isn't attaching to the pod. You should also see this if you kubectl describe service mysql-service, the "endpoints" list will be empty.

Change the service's selector to match the pod's labels (or vice versa) and this should be better.

-- David Maze
Source: StackOverflow