首页 > 解决方案 > 无法从 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

标签: javamysqlspring-bootdockerkubernetes

解决方案


经过数小时的挖掘和重新配置,我终于让它工作了,感谢 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

推荐阅读