gpt4 book ai didi

postgresql - 无法通过 Spring Boot 将 Docker Desktop Kubernetes (Windows) 服务连接到本地 Postgres db

转载 作者:行者123 更新时间:2023-12-02 11:42:20 26 4
gpt4 key购买 nike

我无法通过 Docker Desktop (Windows) 将 Kubernetes 管理的 dockerized Spring Boot API 连接到 Postgres 的本地实例。错误如下:

org.postgresql.util.PSQLException: Connection to postgres-db-svc.default.svc.cluster.local:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

在尝试连接到本地数据库之前,一切正常(外部客户端可以通过 Ingress 连接到 Pod,Pod 可以相互通信,等等)。
我认为我的配置在这里关闭。
配置图
apiVersion: v1
kind: ConfigMap
metadata:
creationTimestamp: 2017-12-27T18:38:34Z
name: test-docker-config
namespace: default
resourceVersion: "810136"
uid: 352c4572-eb35-11e7-887b-42010a8002b8
data:
spring_datasource_platform: postgres
spring_datasource_url: jdbc:postgresql://postgres-db-svc.default.svc.cluster.local/sandbox
spring_datasource_username: postgres
spring_datasource_password: password
spring_jpa_properties_hibernate_dialect: org.hibernate.dialect.PostgreSQLDialect
服务
kind: Service
apiVersion: v1
metadata:
name: postgres-db-svc
spec:
type: ExternalName
externalName: kubernetes.docker.internal
ports:
- port: 5432
在我的主机文件中,“kubernetes.docker.internal”映射到 127.0.0.1
部署
apiVersion: apps/v1
kind: Deployment
metadata:
name: tester
spec:
selector:
matchLabels:
app: tester
template:
metadata:
labels:
app: tester
spec:
containers:
- name: tester
imagePullPolicy: IfNotPresent
image: test-spring-boot
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_PLATFORM
valueFrom:
configMapKeyRef:
name: test-docker-config
key: spring_datasource_platform
- name: SPRING_DATASOURCE_URL
valueFrom:
configMapKeyRef:
name: test-docker-config
key: spring_datasource_url
- name: SPRING_DATASOURCE_USERNAME
valueFrom:
configMapKeyRef:
name: test-docker-config
key: spring_datasource_username
- name: SPRING_DATASOURCE_PASSWORD
valueFrom:
configMapKeyRef:
name: test-docker-config
key: spring_datasource_password
- name: SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT
valueFrom:
configMapKeyRef:
name: test-docker-config
key: spring_jpa_properties_hibernate_dialect
Spring Boot 应用程序.properties
spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:postgres}
spring.datasource.url=${SPRING_DATASOURCE_URL:jdbc:postgresql://localhost:5432/sandbox}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME:postgres}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD:password}
spring.jpa.properties.hibernate.dialect=${SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT:org.hibernate.dialect.PostgreSQLDialect}

最佳答案

带有 Docker 的 Kubernetes 在同一个 docker VM 中运行,所以我假设 /etc/hosts您所指的文件是您的 Windows 机器上的文件。
我还假设您运行 Postgres 时会暴露 5432像这样:

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
一、 127.0.0.1不会工作,因为如果是虚拟机,docker 只会暴露 IP 地址上的端口。
其次,Kubernetes 将无法找到 kubernetes.docker.internal因为 pod 使用 CoreDNS 解决,它不知道该域。
我建议你这样做:
  • 不要使用 kubernetes.docker.internal因为它已经被 docker 用于自己的目的。使用类似 mypostgres.local
  • 获取 docker 虚拟机的 IP 地址。运行ping docker.local或在 `C:\Windows\System32\drivers\etc\hosts 下查看如下内容:
    Added by Docker Desktop
    10.xx.xx.xx host.docker.internal
    或查看 ipconfig /all 的输出并从 docker 桌面 VM 中找到 IP。
  • 使用 hostAliases 在您的 podSpec 中,以便 /etc/hosts文件实际上是在您的 pod 中修改的。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    name: tester
    spec:
    selector:
    matchLabels:
    app: tester
    template:
    metadata:
    labels:
    app: tester
    spec:
    hostAliases:
    - ip: "10.xx.xx.xx" # The IP of your VM
    hostnames:
    - "mypostgres.local"
    containers:
    - name: tester
    imagePullPolicy: IfNotPresent
    image: test-spring-boot
    resources:
    limits:
    memory: "128Mi"
    cpu: "500m"
  • 不要使用 ExternalName服务,因为这些服务仅适用于 CoreDNS。如果你想要 ExternalName服务工作,您将不得不修改您的 CoreDNS 配置,以便对 mypostgres.local 的条目进行硬编码

  • 注意:另一种选择是在 Kubernetes 中运行 Postgresql 并使用常规 ClusterIP 公开它。服务。

    关于postgresql - 无法通过 Spring Boot 将 Docker Desktop Kubernetes (Windows) 服务连接到本地 Postgres db,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62746410/

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