【问题标题】:Why is this Azure firewall rule required?为什么需要此 Azure 防火墙规则?
【发布时间】: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


【解决方案1】:

在这种情况下,OP 通过升级 Postgre 层并实施 vnet 规则以允许流量来解决问题。

【讨论】:

  • 是的,这个解决方案现在已经到位并且工作正常。最大的问题是成本。必须使用 GP 层 Postgres 服务器每月花费 100 美元以上。基本层服务器可以低至 25 美元。当您有多个工程师独立工作时,这可以加起来。
【解决方案2】:

遗憾的是,无法以编程方式获取此 IP。

【讨论】:

  • 我找到了一个有点丑陋的方法来获取这个IP。我认为 kubernetes 内置的 dns pod 将具有相同的 IP,并尝试运行 kubectl exec kube-dns-nnn -n kube-system -c kubedns -- wget -qO- https://ipinfo.io/ip 并确定由此返回的 IP 与我在容器中获得的 IP 相同。
  • 如果您没有将外部 lb 连接到节点 - 此 ip 将不时更改。另外,考虑接受\upvoting我的回答;)
  • 完成。感谢您对此的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
相关资源
最近更新 更多