java - 无法从 kubernetes pod 内部连接到外部数据库
问题描述
我正在尝试将 kubernetes pod 内的 spring-boot api 连接到外部数据库(一台单独的机器,但在本地网络中),但是在运行时,我得到 SQLNonTransientConnectionException, UknownHostException: mysql-svc, api cannot connect to the database但是每当我使用 kubectl exec -it 从 pod 内部 ping 数据库地址时,我都可以成功地 ping 它,是否有人遇到过与我相同的错误?
这是我的 application.properties 连接 uri 和 kubernetes 对象:
spring.datasource.url=jdbc:mysql://mysql-svc/test?autoReconnect=true
---
apiVersion: v1
kind: Service
metadata:
name: mysql-svc
spec:
type: ClusterIP
ports:
- port: 3306
targetPort: 3306
---
apiVersion: v1
kind: Endpoints
metadata:
name: mysql-svc
subsets:
- addresses:
- ip: 10.0.123.28
ports:
- port: 3306
name: mysql-svc
解决方案
经过数小时的挖掘和重新配置,我终于让它工作了,感谢 kubernetes 组的 Xenwar 指出了 externalIP 属性,事实证明我需要将我的应用程序指向一个外部 ip,在这种情况下是数据库,这里是服务对象:
apiVersion: v1
kind: Service
metadata:
name: db-con
spec:
selector:
app: api2
ports:
- name: http
protocol: TCP
port: 3306
targetPort: 3306
externalIPs:
- 10.0.123.28
推荐阅读
- reactjs - 将一组图像映射到反应组件中的图像标签
- python - AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas (Python)
- r - 在 R 闪亮的反应表上计算日期时间间隔(以分钟为单位)
- php - 如何使用 PHP 解决这个问题陈述?
- javascript - 未知的自定义元素
- android - Android 设备组未收到消息
- javascript - 如何在 if else 语句中检查数组是否包含某个值
- java - 这是在 java8 中使用嵌套 groupby 的正确方法吗?
- flutter - 我需要添加三个文本的数据
- java - 我需要帮助创建一个函数,该函数将从 Java(Selenium)中的 CSV 文件读取(打开新的浏览器选项卡)url