Kubernetes-无法从Spring应用程序连接到mysql

时间:2018-07-18 09:50:03

标签: mysql kubernetes

我有kubernetes集群。我已经从kubectl启动了mysql。我有一个弹簧启动应用程序的图像。我对application.yml中使用的JDBC URL感到困惑。我已经通过描述Pod,服务等尝试了多个IP地址。由于“ 通信链接失败

,它已被误认为是错误的

下面是我的ngOnInit(){ // Do something } OnSubmit(){ // save data }

mysql-deployment.yml

3 个答案:

答案 0 :(得分:1)

您的K8S服务应公开端口和targetPort 3306,并在JDBC URL中使用该服务的名称: jdbc:mysql://mysql/database

如果您的MySQL是仅针对在K8S中运行的应用程序的后端服务,则您不需要在服务清单中使用nodePort。

如果您获得SQLException: Connection refusedConnection timed out或特定于MySQL的CommunicationsException: Communications link failure,则意味着根本无法访问该数据库。

这可能有以下一种或多种原因:

  • JDBC URL中的IP地址或主机名错误。

  • 本地DNS服务器无法识别JDBC URL中的主机名。

  • JDBC URL中的端口号丢失或错误。

  • 数据库服务器已关闭。

  • 数据库服务器不接受TCP / IP连接。

  • 数据库服务器已用尽连接。

  • Java和DB之间的某种情况正在阻止连接,例如防火墙或代理。

我建议采取以下步骤来更好地理解问题:

  • 连接到MySQL pod并验证 /etc/mysql/my.cnf个文件

  • 从pod内连接到MySQL以验证其是否有效

  • 从服务清单中删除clusterIP: None

答案 1 :(得分:0)

以下是我对kubectl get svc的输出

kubectl获取svc

NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP          9d
mysql        ClusterIP   None           <none>        3306/TCP         2h
registry     NodePort    10.110.33.13   <none>        8761:31881/TCP   7d

答案 2 :(得分:0)

通过运行以下命令获取运行MySQL pod的节点的IP地址:-

kubectl获取-o宽的节点

如果MySQL服务公开为NodePort类型,请获取分配的nodeport:-

kubectl获取svc

在您的application.properties中,使用

编辑JDBC URL。

分配给该服务的node:nodeport的IP地址