gpt4 book ai didi

postgresql - microk8s集群中如何访问本地安装的postgresql

转载 作者:行者123 更新时间:2023-12-02 12:12:56 25 4
gpt4 key购买 nike

我已经在 Ubuntu 18 上安装了 Postgresql 和 microk8s。
我在 microk8s 单节点集群内的微服务之一需要访问安装在同一 VM 上的 postgresql。
一些文章建议我应该像这样创建 service.yml 和 endpoint.yml。

apiVersion: v1
metadata:
name: postgresql
spec:
type: ClusterIP
ports:
- port: 5432
targetPort: 5432

---

kind: Endpoints
apiVersion: v1
metadata:
name: postgresql
subsets:
- addresses:
- ip: ?????
ports:
- port: 5432

现在,我不知道应该在 subsets.addresses.ip 字段中输入什么?

最佳答案

首先,您需要配置您的 Postgresql 以不仅监听您虚拟机的 localhost。假设您有一个 IP 地址为 10.1.2.3 的网络接口(interface),该接口(interface)配置在您的节点上,并安装了 Postgresql 实例。

在您的 /etc/postgresql/10/main/postgresql.conf 中添加以下条目:

listen_addresses = 'localhost,10.1.2.3'

并重启你的 postgres 服务:

sudo systemctl restart postgresql

您可以通过运行以下命令检查它是否监听所需的地址:

sudo ss -ntlp | grep postgres

从部署在 Microk8s 集群 中的 Pod,您应该能够访问节点的 IP 地址,例如您应该能够从您的 Pod ping 提到的 10.1.2.3

因为它不需要任何负载平衡,您可以直接从您的 Pods 访问您的 Postgresql,而无需配置额外的 Service,将其暴露给您的集群。

如果您不想在您的应用程序中使用它的 IP 地址引用您的 Postgresql 实例,您可以编辑您的 Deployment(它管理 连接到您的 postgres 数据库的 Pod)以修改您的 Pod 使用的 /etc/hosts 文件的默认内容。

通过运行编辑您的应用部署:

microk8s.kubectl edit deployment your-app

并在 Pod 模板 spec 下添加以下部分:

  hostAliases: # it should be on the same indentation level as "containers:"
- hostnames:
- postgres
- postgresql
ip: 10.1.2.3

保存后,将根据新规范重新创建此 Deployment 管理的所有 Pod。当您通过运行 exec 进入您的 Pod 时:

microk8s.kubectl exec -ti pod-name -- /bin/bash

您应该在/etc/hosts 文件中看到其他部分:

# Entries added by HostAliases.
10.1.2.3 postgres postgresql

从现在开始,您可以通过名称 postgres:5432postgresql:5432 在您的应用中引用您的 Postgres 实例,它将会被解析到您的 VM 的 IP 地址。

希望对你有帮助。

更新:

我差点忘了前段时间我发布了一个关于非常相似主题的答案。你可以找到它here .它描述了 Service without selector 的用法,这基本上就是您在问题中提到的内容。是的,它还可以用于配置对在同一主机上运行的 Postgresql 实例的访问。由于这种 Service 没有定义选择器,no endpoint 不会由 kubernetes 自动创建,您需要自己创建一个.一旦您获得了 Postgres 实例的 IP 地址(在我们的示例中为 10.1.2.3),您就可以在您的 endpoint 定义中使用它。

一旦您在 kubernetes 方面配置了所有内容,您可能仍然会遇到 Postgres 的问题。在尝试连接到 Postgres 实例的 Pod 中,您可能会看到以下错误消息:

org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host 10.1.7.151

这基本上意味着您的 pg_hba.conf文件缺少允许您的 Pod 访问您的 Postgresql 数据库所需的条目。身份验证是基于主机的,换句话说,只有具有特定 IP 或 IP 在特定 IP 范围内的主机才允许进行身份验证。

Client authentication is controlled by a configuration file, which traditionally is named pg_hba.conf and is stored in the database cluster's data directory. (HBA stands for host-based authentication.)

现在您可能想知道您应该在 pg_hba.conf 中允许哪个网络。要处理集群网络 Microk8s 使用 flannel .查看 /var/snap/microk8s/common/run/flannel/subnet.env 文件的内容。我的看起来如下:

FLANNEL_NETWORK=10.1.0.0/16
FLANNEL_SUBNET=10.1.53.1/24
FLANNEL_MTU=1410
FLANNEL_IPMASQ=false

仅向您的 pg_hba.conf 添加 flannel 子网 应该足以确保您所有的 Pod 都可以连接到 Posgresql.

关于postgresql - microk8s集群中如何访问本地安装的postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60626218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com