首页 > 解决方案 > 通过入口在特定子域上公开 tcp 服务(端口 5432)

问题描述

我有一个 kubernetes 集群,它通过这个信息在端口 5432 上公开 Postgresql ,这就像一个魅力。我目前正在我的机器上对此进行测试,并且它适用于db.x.iox作为我的域)。但它也适用于localhost. 这似乎很公平,因为它只在端口 5432 上创建了与我的服务的绑定。

我怎样才能过滤子域?所以它只能通过db.x.io

标签: nginxkubernetestcpkubernetes-ingressnginx-ingress

解决方案


TCP协议在过滤方面没有太多内容。这是因为TCP协议只使用IP:Port组合,没有 HTTP 中的标头。在建立连接之前,您的子域将被解析DNS为地址。IP

根据Nginx文档,您可以执行以下操作:


您可以尝试通过添加到 nginx 配置来限制来自 localhost 的访问deny 127.0.0.1,但是它很可能会破坏 Postgresql。所以这是一个冒险的建议。

对于 Kubernetes 入口对象,它将是:

metadata:
  annotations:
    nginx.org/server-snippets: |
      deny 127.0.0.1;

基于Nginx文档。


推荐阅读