Я воспроизвел проблему, о которой вы сообщили. Я создал кластер 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
После создания кластера и службы
Служба предоставляет имя службы, которое также преобразуется в IP-адрес с помощью разрешения DNS k8s.
Поэтому нам не нужно использовать статический IP-адрес для кластера postgres, потому что сервис postgres k8s поможет вам подключиться к контейнерам кластера.
Чтобы доказать, что я отправил запрос curl, используя имя службы, а не IP-адрес.
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 не будет работать.
Надеюсь, это поможет.