Rya*_*yan 1 postgresql docker digital-ocean kubernetes
我只想从 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
Run Code Online (Sandbox Code Playgroud)
配置图:
apiVersion: v1
kind: ConfigMap
metadata:
name: tcp-services
namespace: ingress-nginx
data:
5432: "default/postgres-srv:5432"
Run Code Online (Sandbox Code Playgroud)
我已检查kubectl get services并尝试使用端点和 cluster-ip。这些都不起作用。
psql "postgresql://postgres:password@[ip]:5432/postgres"
Pod 正在运行,日志显示一切就绪。我这里缺少什么吗?我正在数字海洋中运行集群。
编辑:
我希望能够从我的主机访问数据库。(sub.domain.com) 我已经退回了部署,但仍然无法进入。我所针对的唯一配置是上面显示的配置。我的域确实有 A 记录,并且可以通过我的 ingress nginx 服务访问其他公开的 pod
您可以通过配置公开 TCP 和 UDP 服务ingress-nginx。
例如,将GKE与nfs-server-provisioner和图表一起使用:ingress-nginxbitnami/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
Run Code Online (Sandbox Code Playgroud)
修补ingress-nginx tcp-services ConfigMap:
kubectl patch cm -n ingress-nginx tcp-services -p '{"data": {"5432": "default/postgres-postgresql:5432"}}'
Run Code Online (Sandbox Code Playgroud)
Service更新代理端口的控制器(即kubectl edit svc -n ingress-nginx ingress-nginx):
kubectl patch cm -n ingress-nginx tcp-services -p '{"data": {"5432": "default/postgres-postgresql:5432"}}'
Run Code Online (Sandbox Code Playgroud)
注意:如果您编辑部署规范(即) ,您可能需要更新现有的ingress-nginx控制器部署(即 )以包含并退回控制器。argskubectl edit deployments.apps -n ingress-nginx nginx-ingress-controller--tcp-services-configmap=ingress-nginx/tcp-servicesingress-nginxkubectl scale deployment -n ingress-nginx --replicas=0 && kubectl scale deployment -n ingress-nginx --replicas=3
测试连接:
- name: postgres
port: 5432
protocol: TCP
targetPort: 5432
Run Code Online (Sandbox Code Playgroud)
注意:我在Google Cloud DNSA中手动创建了一条记录,以将主机名解析为集群的外部 IP。
更新:除了创建ingress-nginx配置、安装bitnami/postgresql图表等之外,还需要在负载均衡器上禁用“代理协议”以使连接适用于 DigitalOcean 中的部署(postgres否则LOG: invalid length of startup packet将):
| 归档时间: |
|
| 查看次数: |
2991 次 |
| 最近记录: |