无法通过Spring Boot将Docker Desktop Kubernetes(Windows)服务连接到本地Postgres数据库

安东尼·范

我无法通过Docker桌面(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可以彼此通信,等等)。

我认为我的配置在这里不可用。

ConfigMap

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 application.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计算机上的文件。

我还假设您运行的Postgres5432带有以下内容:

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

首先,127.0.0.1它将无法正常工作,因为Docker仅在VM上公开IP地址上的端口。

其次,Kubernetes将无法找到,kubernetes.docker.internal因为Pod用于CoreDNS解析,并且不了解该域。

我建议你这样做:

  • 不要使用kubernetes.docker.internal它,因为docker已经将其用于自己的用途。使用类似mypostgres.local

  • 获取您的Docker VM的IP地址。运行ping docker.local或在“ C:\ Windows \ System32 \ drivers \ etc \ hosts”下查找以下内容:

    Added by Docker Desktop
    10.xx.xx.xx host.docker.internal
    

    或查看ipconfig /alldocker桌面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服务公开它

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

spring boot 无法将 spring boot 连接到 postgresql 数据库

来自分类Dev

无法通过Docker连接到SQL Server数据库

来自分类Dev

无法连接到服务器(WAMP,phpmyadmin),将 VS 连接到数据库?

来自分类Dev

无法在IIS中本地打开.asp网站(该网站将无法连接到数据库)

来自分类Dev

从Spring Boot应用程序连接到本地MySQL数据库时出错

来自分类Dev

将 Spring Boot Docker 容器连接到 MongoDB Docker 容器

来自分类Dev

如何将本地机器上运行的 Postgres 数据库连接到 docker 容器

来自分类Dev

无法在docker-compose(php和MariaDB)中连接到数据库服务器

来自分类Dev

无法连接到本地数据库

来自分类Dev

Dockerized Spring Boot应用程序连接到数据库Docker映像

来自分类Dev

无法通过 JDBC 将 h2o 连接到数据库

来自分类Dev

无法连接到Docker容器中的MySQL数据库

来自分类Dev

无法连接到 Docker 上的 SQL 数据库

来自分类Dev

无法使用TypeORM + pgAdmin4连接到在docker上运行的本地PostgreSQL数据库

来自分类Dev

C#将通过远程桌面(或其他)在本地运行的WinForm App连接到数据库

来自分类Dev

Spring Boot Data JPA无法连接到MySQL数据库

来自分类Dev

无法在 Spring Boot 中使用 JDBC 驱动程序连接到 Oracle 数据库

来自分类Dev

PHP代码将无法连接到数据库

来自分类Dev

Python将无法连接到数据库

来自分类Dev

如何将本地数据库服务器连接到SQL Azure数据库服务器

来自分类Dev

无法将 Spring Boot 连接到 consulMesos 服务器

来自分类常见问题

允许Docker容器连接到本地/主机Postgres数据库

来自分类Dev

无法使用Docker连接我的postgres数据库

来自分类Dev

在Kubernetes上设置Rundeck-无法连接到Postgres数据库

来自分类Dev

SQL Server 2014-无法连接到本地数据库-找不到服务器

来自分类Dev

将本地机器上的 SSIS 连接到远程服务器 oracle 数据库

来自分类Dev

我似乎无法将PHP页面连接到SQL测试服务器和数据库

来自分类Dev

本地服务器无法使用PHP连接到远程Postgresql数据库,但是本地终端可以连接

来自分类Dev

Spring Boot无法从本地MySQL数据库加载实体

Related 相关文章

  1. 1

    spring boot 无法将 spring boot 连接到 postgresql 数据库

  2. 2

    无法通过Docker连接到SQL Server数据库

  3. 3

    无法连接到服务器(WAMP,phpmyadmin),将 VS 连接到数据库?

  4. 4

    无法在IIS中本地打开.asp网站(该网站将无法连接到数据库)

  5. 5

    从Spring Boot应用程序连接到本地MySQL数据库时出错

  6. 6

    将 Spring Boot Docker 容器连接到 MongoDB Docker 容器

  7. 7

    如何将本地机器上运行的 Postgres 数据库连接到 docker 容器

  8. 8

    无法在docker-compose(php和MariaDB)中连接到数据库服务器

  9. 9

    无法连接到本地数据库

  10. 10

    Dockerized Spring Boot应用程序连接到数据库Docker映像

  11. 11

    无法通过 JDBC 将 h2o 连接到数据库

  12. 12

    无法连接到Docker容器中的MySQL数据库

  13. 13

    无法连接到 Docker 上的 SQL 数据库

  14. 14

    无法使用TypeORM + pgAdmin4连接到在docker上运行的本地PostgreSQL数据库

  15. 15

    C#将通过远程桌面(或其他)在本地运行的WinForm App连接到数据库

  16. 16

    Spring Boot Data JPA无法连接到MySQL数据库

  17. 17

    无法在 Spring Boot 中使用 JDBC 驱动程序连接到 Oracle 数据库

  18. 18

    PHP代码将无法连接到数据库

  19. 19

    Python将无法连接到数据库

  20. 20

    如何将本地数据库服务器连接到SQL Azure数据库服务器

  21. 21

    无法将 Spring Boot 连接到 consulMesos 服务器

  22. 22

    允许Docker容器连接到本地/主机Postgres数据库

  23. 23

    无法使用Docker连接我的postgres数据库

  24. 24

    在Kubernetes上设置Rundeck-无法连接到Postgres数据库

  25. 25

    SQL Server 2014-无法连接到本地数据库-找不到服务器

  26. 26

    将本地机器上的 SSIS 连接到远程服务器 oracle 数据库

  27. 27

    我似乎无法将PHP页面连接到SQL测试服务器和数据库

  28. 28

    本地服务器无法使用PHP连接到远程Postgresql数据库,但是本地终端可以连接

  29. 29

    Spring Boot无法从本地MySQL数据库加载实体

热门标签

归档