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
评论