我有kubernetes集群。我已经从kubectl启动了mysql。我有一个弹簧启动应用程序的图像。我对application.yml中使用的JDBC URL感到困惑。我已经通过描述Pod,服务等尝试了多个IP地址。由于“ 通信链接失败”
,它已被误认为是错误的下面是我的ngOnInit(){
// Do something
}
OnSubmit(){
// save data
}
mysql-deployment.yml
答案 0 :(得分:1)
您的K8S服务应公开端口和targetPort 3306,并在JDBC URL中使用该服务的名称:
jdbc:mysql://mysql/database
如果您的MySQL是仅针对在K8S中运行的应用程序的后端服务,则您不需要在服务清单中使用nodePort。
如果您获得SQLException: Connection refused
或Connection 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地址