【问题标题】:access postgres in kubernetes from an application outside the cluster从集群外的应用程序访问 Kubernetes 中的 postgres
【发布时间】:2020-02-04 07:22:28
【问题描述】:

我正在尝试从另一个 centos vm 上运行的另一个应用程序访问部署在 centos vm 上的 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

我什至无法从本地 Mac 上的 pgadmin 访问它。我错过了什么吗?

非常感谢任何帮助。

【问题讨论】:

    标签: postgresql kubernetes


    【解决方案1】:

    Ingress 不起作用,它只是为 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 节点,这可能涉及配置您的虚拟机管理程序、路由器和防火墙,并且高度依赖于您为 Kubernetes 集群使用的网络 (CNI) 插件。

    【讨论】:

    • LoadBalancer 服务也可以作为解决方案。但它有点贵:D
    猜你喜欢
    • 2020-06-17
    • 1970-01-01
    • 2020-07-28
    • 2023-03-15
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多