【问题标题】:From what source-IP range do outbound connections from Pods appear to come?来自 Pod 的出站连接似乎来自哪个源 IP 范围?
【发布时间】:2017-05-26 13:41:23
【问题描述】:

我想设置从 kubernetes 集群(通过 az acs create 创建,大部分默认设置)到 Azure Postgresql 实例的连接,我想知道在 postgres HBA 中输入什么源 IP 范围(这是Azure 在az postgres server 下调用firewall-rule)。

问题是,虽然我可以从控制台错误(使用psql 测试时)看到集群请求来自的当前 IP 是什么

FATAL:  no pg_hba.conf entry for host "x.x.x.x" [...]

...我只是在集群属性中的任何地方都看不到这个 IP 地址 - 无论如何,将这个 IP 地址列入白名单而不知道它是如何分配的似乎是一个非常脆弱的配置。

(在 Azure 门户中,我确实看到了一个与集群主服务器关联的“公共 IP”,但这与 postgres 看到的 IP 不同,而且我认为主要用于入口。)

那么理想情况下,ACS 是否允许我控制集群的出站 IP 地址?如果没有,我能否以编程方式确定允许的 IP 或 IP 范围?

【问题讨论】:

  • 您的意思是要连接 postgresql 和 ACS K8S pod?通过国际?
  • 是的,嗯,或多或少:Azure Postgresql 实例位于同一区域,所以我想可能有办法让它们共享一个 vnet?
  • 它们在同一个 Vnet 中吗?
  • 如果可能的话,那将是我们的完美解决方案。不过,我找不到任何有关此的文档-它必须是功能请求吗? (编辑:抱歉一直按回车键,期待换行 :) 想补充一下,为了清楚起见,我说的是 Azure Database for Postgresql docs.microsoft.com/en-us/cli/azure/postgres,所以不是 Azure VM 上的自配置 postgres。 )
  • 我明白了,这是一项服务,在互联网上工作。您想为 ACS k8s 添加 IP 范围吗?但是你不知道azure k8s的IP地址,对吧?

标签: azure kubernetes azure-container-service azure-database-postgresql


【解决方案1】:

它应该是调度 pod 的节点的外部 IP,例如在容器引擎上:

$ kubectl get no -o wide
NAME                              STATUS    AGE       VERSION   EXTERNAL-IP       OS-IMAGE                             KERNEL-VERSION
gke-cluster-1-node-1              Ready     58d       v1.5.4    <example node IP> Container-Optimized OS from Google   4.4.21+

$ ssh gke-cluster-1-node-1
$ curl icanhazip.com
<example node IP>

$ kubectl get po -o wide | grep node-1
example-pod-1                                     1/1       Running   0          11d       <pod IP>      gke-cluster-1-node-1
$ kubectl exec -it example-pod-1 curl icanhazip.com
<example node IP>

【讨论】:

  • 谢谢。 Azure ACS 上似乎缺少此信息 - 它也不在 kubectl describe node 输出中,只有一个私有地址。但除此之外,我还不清楚公共 IP 稳定的保证是什么(在某种意义上稳定“如果我以这种方式获取 IP,并将其写入 pg_hba.conf,我的连接明天还能工作吗? ")
  • (另外,我应该澄清一下,这可能是一个更多关于 Azure 容器服务细节的问题,而不是关于 Kubernetes。)
【解决方案2】:

ACS 是否允许我控制集群的出站 IP 地址?和 如果没有,我能否以编程方式确定要使用的 IP 或 IP 范围 允许吗?

据我所知,Azure 容器服务通过 Azure 负载均衡器向公众公开 docker 应用程序,负载均衡器将获得一个公共 IP 地址。
顺便说一句,我们无法指定哪个公共 IP 地址将关联到 Azure 负载均衡器。

在我们可以将应用程序公开到互联网后,我们可以将公共 IP 地址添加到您的 Postgresql 的 postgres HBA。

【讨论】:

  • 如果您需要进一步的帮助,请告诉我。
  • 谢谢 - 这是否也适用于出站连接?我在上面所做的测试是使用 kubectl exec 连接到 pod,然后从 pod 运行 psql,我认为这个连接显示为 postgres 服务器的 IP 与任何负载平衡器 IP 是分开的?
  • 您在集群属性中找不到哪个 IP 地址?是 167.220.255.8?
  • 谢谢,不是这个:no pg_hba.conf entry for host "23.97.169.xxx"(不幸的是,日志掩盖了最后一位数字)。
  • 您可以尝试从 Azure 数据中心启用所有 IP 范围,尽管这有点笨拙的解决方案,如果 pg_hba.conf 不支持 IP 范围,也很困难。 microsoft.com/en-za/download/details.aspx?id=41653
猜你喜欢
  • 2015-06-06
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多