gpt4 book ai didi

postgresql - 无法从外部登录到 Kubernetes 集群内部的 Postgres

转载 作者:行者123 更新时间:2023-12-02 11:59:36 31 4
gpt4 key购买 nike

我只想从我的 K8 集群外部登录到 postgres 数据库。我创建了以下配置:

apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres
spec:
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: database-persistent-volume-claim
containers:
- name: postgres
image: postgres
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
env:
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_PORT
value: '5432'
- name: POSTGRES_DB
value: postgres
- name: POSTGRES_PASSWORD
value: password
- name: POSTGRES_HOST_AUTH_METHOD
value: trust
---
apiVersion: v1
kind: Service
metadata:
name: postgres-srv
spec:
selector:
app: postgres
type: NodePort
ports:
- name: postgres
protocol: TCP
port: 5432
targetPort: 5432
配置图:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
5432: "default/postgres-srv:5432"
我查过 kubectl get services并尝试使用端点和集群 IP。这些都不起作用。 psql "postgresql://postgres:password@[ip]:5432/postgres"pod 正在运行,日志显示一切就绪。我在这里缺少什么吗?我在 digital ocean 中运行集群。
编辑:
我希望能够从我的主机访问数据库。 (sub.domain.com) 我已经退回了部署,但仍然无法进入。我所针对的唯一配置是上面显示的内容。我确实有我的域的 A 记录,并且可以通过我的入口 nginx 服务访问我的其他公开的 pod

最佳答案

您可以expose TCP and UDP servicesingress-nginx配置。
例如使用 GKE ingress-nginx , nfs-server-provisioner bitnami/postgresql helm 图表:

kubectl create secret generic -n default postgresql \
--from-literal=postgresql-password=$(openssl rand -base64 32) \
--from-literal=postgresql-replication-password=$(openssl rand -base64 32)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install -n default postgres bitnami/postgresql \
--set global.storageClass=nfs-client \
--set existingSecret=postgresql
修补 ingress-nginx tcp-services ConfigMap :
kubectl patch cm -n ingress-nginx tcp-services -p '{"data": {"5432": "default/postgres-postgresql:5432"}}'
更新 Controller Service对于代理端口(即 kubectl edit svc -n ingress-nginx ingress-nginx ):
  - name: postgres
port: 5432
protocol: TCP
targetPort: 5432
备注 :您可能需要更新现有的 ingress-nginx Controller 部署 args (即 kubectl edit deployments.apps -n ingress-nginx nginx-ingress-controller )包括 --tcp-services-configmap=ingress-nginx/tcp-services并反弹 ingress-nginx如果您编辑部署规范(即 kubectl scale deployment -n ingress-nginx --replicas=0 && kubectl scale deployment -n ingress-nginx --replicas=3 ),则为 Controller 。
测试连接:
export PGPASSWORD=$(kubectl get secrets -n default postgresql -o jsonpath={.data.postgresql-password} |base64 -d)
docker run --rm -it \
-e PGPASSWORD=${PGPASSWORD} \
--entrypoint psql \
--network host \
postgres:13-alpine -U postgres -d postgres -h example.com
Connection to remote PostgreSQL database using dns resolution and ingress-nginx proxied traffic
备注 : 我手动创建了一个 A记录在 Google Cloud DNS将主机名解析为集群外部 IP。
更新 : 除了创建 ingress-nginx配置,安装 bitnami/postgresql图表等。必须在负载均衡器上禁用“代理协议(protocol)”才能使连接在 DigitalOcean 中进行部署( postgresLOG: invalid length of startup packet 否则):
Digital Ocean postgres connection through public load balancer

关于postgresql - 无法从外部登录到 Kubernetes 集群内部的 Postgres,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64040744/

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