如何让 kubernetes pod 能够访问 PostgreSQL Pod

JDe*_*Dev 3 docker kubernetes kubectl kubernetes-helm

我正在尝试本地 Kubernetes(Docker-on-mac),并尝试提交 Spark 作业。Spark 作业连接 PostgreSQL 数据库并执行一些计算。

PostgreSQL 正在我的 Kube 上运行,由于我已经发布了它,我可以通过 localhost:5432 从主机访问它。但是,当 Spark 应用程序尝试连接到 PostgreSQL 时,它会抛出异常

Exception in thread "main" org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
Run Code Online (Sandbox Code Playgroud)

kubectl 集群信息

Kubernetes master is running at https://kubernetes.docker.internal:6443
KubeDNS is running at https://kubernetes.docker.internal:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

Run Code Online (Sandbox Code Playgroud)

kubectl 获取服务 postgresql-published

在此输入图像描述

kubectl描述服务spark-store-1588217023181-driver-svc

Name:              spark-store-1588217023181-driver-svc
Namespace:         default
Labels:            <none>
Annotations:       <none>
Selector:          spark-app-selector=spark-533ecb8556b6439eb938d487cc77c330,spark-role=driver
Type:              ClusterIP
IP:                None
Port:              driver-rpc-port  7078/TCP
TargetPort:        7078/TCP
Endpoints:         <none>
Port:              blockmanager  7079/TCP
TargetPort:        7079/TCP
Endpoints:         <none>
Session Affinity:  None
Run Code Online (Sandbox Code Playgroud)

我如何才能完成我的 Spark 工作,并访问 PostgreSQL 服务?

Arg*_*dhu 6

localhost存在,EXTERNAL_IP但 Kubernetes 集群 DNS 系统(CoreDNS)不知道如何将其解析为 IP 地址。EXTERNAL_IP应该由外部 DNS 服务器解析,通常用于从 Kubernetes 集群外部(即从另一个系统或从 Kubernetes 节点)连接到 Postgres,而不是从集群内部(即从另一个 pod)连接)

Postgres 应该可以通过10.106.15.112:5432或从 Spark pod 访问postgresql-published:5432,因为 kubernetes 集群 DNS 系统知道如何解析它。

测试 Postgres 连接性

kubectl run postgresql-postgresql-client --rm --tty -i --restart='Never' --namespace default --image bitnami/postgresql --env="PGPASSWORD=<HERE_YOUR_PASSWORD>" --command -- psql --host <HERE_HOSTNAME=SVC_OR_IP> -U <HERE_USERNAME> 
Run Code Online (Sandbox Code Playgroud)