Nacos启动,连接MySQL失败,原因如下:

com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed

是MySQL Connector/J 在启用caching_sha2_password认证插件时常见的问题。原因是 JDBC 驱动在需要公钥来加密密码时,默认 禁止自动获取服务器端的公钥。

需要修改MySQL连接参数,但是K8S的配置说明中并没有给我们提供修改MySQL连接参数的方式。

Nacos地址的K8S配置模板地址:nacos-k8s-yaml-template

Nacos仓库的配置说明:github-nacos-k8s

我们找到Nacos的Docker仓库地址对于MySQL的参数配置地址(nacos-docker-application.properties),看看有没有为我们提供修改的方式。

因此我们可以通过自定义MYSQL_SERVICE_DB_PARAM环境变量的方式去配置MySQL连接参数,不管是K8S还是Docker都可以通过添加环境变量的方式解决。

将该环境变量值修改成如下的配置:

characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true

对于K8S中,推荐将配置管理在ConfigMap中

apiVersion: v1
kind: ConfigMap
metadata:
  name: nacos-cm
  namespace: nacos
data:
  mysql.host: "..."
  mysql.db.name: "nacos"
  mysql.port: "3306"
  mysql.user: "..."
  mysql.password: "..."
  mysql.service.db.param: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true"

然后在StatefulSet当中新增对于ConfigMap当中该参数的引用:

            - name: MYSQL_SERVICE_DB_PARAM
              valueFrom: 
                configMapKeyRef:
                  key: mysql.service.db.param
                  name: nacos-cm