我已经复制了您报告的问题。我已经创建了一个 postgres 集群,并且还为该集群创建了一个 K8S 服务。
集群看起来像
root@k8-master:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
kibana 1/1 Running 0 9s
postgres-59bcb7c9d4-lvg8v 1/1 Running 0 56m
postgres-59bcb7c9d4-rfppm 1/1 Running 0 56m
postgres-59bcb7c9d4-s9zc4 1/1 Running 0 56m
创建集群和服务后
该服务提供了一个服务名称,该名称还可以在 k8s DNS 解析的帮助下转换为 IP 地址。
所以我们不需要为 postgres 集群使用静态 IP 地址,因为 postgres k8s 服务将帮助您连接到集群容器。
为了证明我使用服务名而不是IP地址发送了一个curl请求。
root@k8-master:~# kubectl exec -it kibana /bin/bash
bash-4.2$ curl http://postgres:5432
curl: (52) Empty reply from server
bash-4.2$ exit
当您为 postgres 创建集群时,请确保端点连接到您的集群容器之一。它应该是这样的,
root@k8-master:~# kubectl describe services postgres
Name: postgres
Namespace: default
Labels: app=postgres
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app":"postgres"},"name":"postgres","namespace":"default"},"spe...
Selector: app=postgres
Type: NodePort
IP: 10.97.201.134
Port: <unset> 5432/TCP
TargetPort: 5432/TCP
NodePort: <unset> 30362/TCP
Endpoints: 10.244.1.12:5432,10.244.1.13:5432,10.244.2.242:5432
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
在上面的示例中,端点被分配给 10.244.1.12 和其他。如果该字段为空,则访问 postgres 服务将不会产生任何结果。
另一种说法是,服务只是将请求重定向到集群。如果集群无法识别服务,那么来自 Java 的访问将无法正常工作。
希望这会有所帮助。