如何暴露EKS中的PostgreSQL并通过PG Admin/DBeaver无SSL连接
问题描述
在Kubernetes EKS集群中,PostgreSQL以StatefulSet部署,对应Service初始为ClusterIP,后改为NodePort,并通过ALB Ingress Controller创建了如下Ingress配置:
kind: Ingress metadata: name: postgres namespace: postgres annotations: alb.ingress.kubernetes.io/group.name: eks-dev-test-postgres-group alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":5432}]' alb.ingress.kubernetes.io/load-balancer-name: eks-dev-test-alb-postgres alb.ingress.kubernetes.io/scheme: internal alb.ingress.kubernetes.io/tags: Environment=dev-test,Team=devops spec: ingressClassName: alb rules: - host: postgres.test.XXXXXX.com http: paths: - path: / pathType: Prefix backend: service: name: postgres port: number: 5432
当前AWS已创建内部ALB(ARN: arn:aws:elasticloadbalancing:us-east-1:XXXXX:loadbalancer/app/eks-dev-test-alb-postgres/XXXXX),安全组已开放5432端口,且已通过AWS VPN连接至VPC。但使用关闭SSL的PG Admin连接时报错,使用DBeaver测试连接时出现“An error occurred while setting up the SSL connection”错误。
解决方案
- 替换为NLB类型的LoadBalancer Service:将原Service替换为以下配置,创建内部NLB暴露PostgreSQL服务:
apiVersion: v1 kind: Service metadata: name: postgres-postgresql-external labels: app: postgresql annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer ports: - name: postgresql port: 5432 targetPort: postgresql selector: app: postgresql release: "postgres" loadBalancerSourceRanges: - "172.16.0.0/16"
- 调整EC2实例安全组:由于Network Load Balancer(NLB)自身没有安全组,需要在EKS集群的EC2实例安全组中开放5432端口,允许VPN网段访问。
- 检查网络连通性:执行
telnet <NLB端点> 5432命令,测试从VPN客户端到NLB的端口可达性。 - 关闭SSL连接选项:在PG Admin创建连接时,将SSL模式设置为Off(关闭SSL)。
- 验证连接:使用配置好的参数重新测试PG Admin和DBeaver的连接。
内容的提问来源于stack exchange,提问作者dheeraj
相关产品推荐
相关产品推荐

