无法连接到运行MySQL的端口转发Pod

Gab*_*uiu 1 mysql kubernetes

我有以下部署了MySQL实例:

kind: Deployment
apiVersion: apps/v1beta1
metadata:
  name: mysql
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:8
        ports:
        - containerPort: 3306
        env:
          - name: MYSQL_ROOT_PASSWORD
            valueFrom:
              secretKeyRef:
                name: mysql-root-password
                key: password
Run Code Online (Sandbox Code Playgroud)

密码是root

kind: Secret
apiVersion: v1
metadata:
  name: mysql-root-password
type: Opaque
data:
  password: cm9vdA==
Run Code Online (Sandbox Code Playgroud)

问题是我按照此处的指示尝试在端口转发MySQL端口后连接到实例,但出现错误:

$ kubectl port-forward mysql-824284009-rpbpk 3306
Forwarding from 127.0.0.1:3306 -> 3306
Forwarding from [::1]:3306 -> 3306

# from another terminal
$ mysql -u root -p
Enter password:  
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Run Code Online (Sandbox Code Playgroud)

从Pod本身连接到服务器的工作原理是:

$ kubectl exec -it mysql-824284009-rpbpk -- /bin/bash
root@mysql-824284009-rpbpk:/# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
...
mysql>
Run Code Online (Sandbox Code Playgroud)

我的基本设置与此处相同,只是我在minikube中而不是GCP中运行集群。我的本地MySQL没有运行,所以我认为没有冲突的机会。

Jar*_*iuk 6

端口转发可能在那里,但是您需要告诉mysql客户端使用主机/端口而不是Unix套接字进行连接(默认)

mysql --host=localhost --protocol tcp --port=3306 -u root -p
Run Code Online (Sandbox Code Playgroud)

如果您不这样做,则mysql默认情况下使用本地linux套接字连接到服务器:/var/run/mysqld/mysqld.sock ..它甚至告诉您;)

更新:正如Gabriel所检查的那样-添加--protocol tcp终于使它起作用了,所以我将其添加到我的答案中