从集群外的应用程序访问kubernetes中的postgres

时间:2020-02-03 19:41:36

标签: postgresql kubernetes

试图从运行在另一个centos vm上的另一个应用程序访问在centos vms的kubernetes(kubeadm)中部署的postgres db。我已经将postgres服务部署为“ NodePort”类型。我的理解是,我们只能将其作为LoadBalancer类型部署在AWS / Azure之类的云提供商上,而不能部署在裸机vm上。因此,现在尝试使用NodePort类型服务配置“入口”。但是除了在kubernetes master上使用kubectl exec $ Pod-Name之外,我仍然无法访问我的数据库。

我的ingress.yaml是

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: postgres-ingress
spec:
  backend:
    serviceName: postgres
    servicePort: 5432

其中没有显示以下任何地址

NAME                    HOSTS   ADDRESS    PORTS   AGE
postgres-ingress        *                  80      4m19s

am甚至无法从本地Mac上的pgadmin访问它。我想念什么吗?

我们非常感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

入口无法使用,它仅用于HTTP流量,而Postgres协议不是HTTP。您需要仅处理原始TCP流量的解决方案:

  • 仅NodePort服务就足够了。这可能是最简单的解决方案。通过在服务上进行kubectl describe来找出端口,然后将Postgres客户端连接到该端口上节点VM(而不是Pod或服务)的IP。
  • 您可以使用端口转发:kubectl port-forward pod/your-postgres-pod 5432:5432,然后将Postgres客户端连接到localhost:5432。这是从本地计算机访问数据库的首选方式(非常方便且安全),但是我不会将其用于生产工作负载(kubectl必须始终运行,因此它有些脆弱,并且您无法获得最佳性能) 。
  • 如果进行特殊的网络配置,则可以从群集外部直接访问服务或Pod IP。您必须将Pod和服务CIDR范围的流量路由到k8s节点,这可能涉及配置VM虚拟机管理程序,路由器和防火墙,并且高度依赖于Kubernetes集群使用的网络(CNI)插件。 / li>