1

我部署的 Spring Boot 应用程序试图从 Kubernetes Pod 连接到外部 SQL Server 数据库。但是每次它都因错误而失败

初始化池失败:与主机 <>、端口 1443 的 TCP/IP 连接失败。
错误:“连接超时:没有更多信息。
验证连接属性。确保 SQL Server 实例正在主机上运行并在端口接受 TCP/IP 连接。确保与端口的 TCP 连接未被阻止通过防火墙。

我尝试执行到 Pod 并成功 ping 数据库服务器,没有任何问题

以下是我尝试过的解决方案:

  1. 创建了一个服务和端点,并在配置文件中提供了数据库 IP 尝试在 Pod 中启动应用程序

  2. 尝试在配置中使用 Endpoint 的内部 IP 而不是 DB IP 来查看内部 IP 被解析为 DB IP

但是这两种情况都给出了相同的结果。下面是我使用创建服务和端点的 yaml。

---
apiVersion: v1
kind: Service
metadata:
  name: mssql
  namespace: cattle
spec:
  type: ClusterIP
  ports:
  - port: 1433
---
apiVersion: v1
kind: Endpoints
metadata:
  name: mssql
  namespace: cattle
subsets:
- addresses:
  - ip: <<DB IP>>
  ports:
  - port: 1433

如果我在此设置中有错误或遗漏,请告诉我。

K8s 设置的附加信息

  • 它是具有外部 etcd 集群拓扑的集群主节点
  • 节点上的操作系统是 CentOS
  • 能够从所有节点和创建的 Pod ping 服务器
4

2 回答 2

2

对于这种情况,无头服务非常有用。您将在不定义端点的情况下将流量重定向到此 IP。

kind: "Service"
apiVersion: "v1"
metadata:
  namespace: "your-namespace"
  name: "ftp"
spec:
  type: ExternalName
  externalName: your-ip
于 2019-09-09T03:42:07.113 回答
2

该问题已通过使用 IP 地址更新部署 yaml 得到解决。由于所有服务器都在同一个子网中,我不需要创建服务或端点来访问数据库。感谢您对帖子的所有投入

于 2019-09-09T14:16:05.733 回答