【发布时间】:2018-12-02 19:51:26
【问题描述】:
我希望这里有人知道是什么原因造成的。我有一个 AKS 群集,其中包含许多访问 Azure Postgres 数据库服务器中的资源的微服务。我为 POD 子网和 Kubernetes 服务子网的 Postgres 服务器定义了防火墙规则。此 Postgres 服务器中对数据库的所有访问都来自这些子网。无法从外部源访问此服务器。但是,当我的服务启动时,我总是会遇到这个异常:
2018-12-02 19:23:57.540 INFO [venus,,,] 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet dispatcherServlet mapped to [/]
2018-12-02 19:23:57.543 INFO [venus,,,] 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet complexGraphQLServlet mapped to [/graphql/*]
2018-12-02 19:23:57.545 INFO [venus,,,] 1 --- [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean : Servlet zuulServlet mapped to [/zuul/*]
2018-12-02 19:23:58.037 INFO [venus,,,] 1 --- [ main] o.f.core.internal.util.VersionPrinter : Flyway Community Edition 5.0.7 by Boxfuse
2018-12-02 19:23:58.052 INFO [venus,,,] 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2018-12-02 19:23:58.577 WARN [venus,,,] 1 --- [ main] unknown.jul.logger : SQLException occurred while connecting to mydbserver.postgres.database.azure.com:5432
org.postgresql.util.PSQLException: FATAL: no pg_hba.conf entry for host "40.12.13.14", user "postgres", database "mydb", SSL on
at org.postgresql.core.v3.ConnectionFactoryImpl.doAuthentication(ConnectionFactoryImpl.java:473)
at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:205)
at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:195)
at org.postgresql.Driver.makeConnection(Driver.java:452)
at org.postgresql.Driver.connect(Driver.java:254)
我不知道这个外部 IP 引用来自哪里。我确实为我的集群定义了几个公共 IP,但没有一个与这个 40.12.13.14 地址匹配。如果我在服务器设置中创建防火墙规则,此异常就会消失,并且我的微服务可以轻松访问其数据库。
如果需要这条规则,我显然可以添加它。问题是集群是通过 Python 部署脚本创建的,它无法为该 IP 地址创建防火墙,因为在发生异常之前它不知道该地址将是什么。每次我运行部署脚本创建新集群时,此异常中报告的 IP 地址都会更改。
有谁知道这个 IP 地址与什么相关联以及我如何确定它将是什么以便我可以创建所需的防火墙规则?
彼得
【问题讨论】:
-
您是否尝试访问 Azure 托管 Postgre?
-
是的,我应该说清楚。
-
您确定您正确配置了 vnet 访问权限?
-
如果你问我是否定义了任何我没有定义的 vnet 规则。我已经配置了特定的防火墙规则,这足以访问 Postgres 服务器。我只是用 vnet 规则做了一个快速测试,不幸的是我只有一个用于 db 服务器的“基本”级 sku,并且不允许使用 vnet 规则。
-
我应该补充一点,我还有一个 VM 作为我的安装的一部分,我从该 VM 访问 Postgres 服务器没有任何问题。唯一真正的区别是 VM 位于子网 10.0.0.0/24 中,而 Pod(容器)位于子网 10.0.2.0/24 中,两者都在同一个 vnet 下。用于 VM 的子网具有允许端口 22 (ssh) 访问的安全组,而容器的子网阻止端口 22。
标签: azure-aks azure-postgresql