You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Nomad将服务暴露至公网?

问题分析

当前Nomad任务的端口默认绑定到了VPS的公网IP接口,导致只能通过公网IP访问容器,本地回环地址无法访问;而你需要实现仅允许VPS内部访问、禁止公网访问的效果。

解决方案

修改任务文件中的network配置,给指定端口添加bind_address = "127.0.0.1",让Nomad仅将端口转发到本地回环接口:

job "echo-app" {
  datacenters = ["dc1"]

  group "web" {
    count = 1

    network {
      port "appHttp" {
        to = 8080
        bind_address = "127.0.0.1" # 新增此行,限制端口绑定到回环接口
      }
    }

    service {
      provider = "nomad"
      port     = "appHttp"
      name     = "echo-web-http"
    }

    task "echo-server" {
      driver = "docker"
      config {
        image          = "mendhak/http-https-echo:26"
        ports          = [
          "appHttp"
        ]
      }

      resources {
        cpu    = 100
        memory = 200
      }
    }

  }
}

原理说明

  • 配置bind_address = "127.0.0.1"后,Nomad会将容器的8080端口映射到VPS的回环接口对应的端口,仅允许VPS内部通过127.0.0.1:<port>访问。
  • 公网接口不会绑定该端口,因此外部无法通过公网IP访问容器。
  • 若需要使用固定端口而非随机端口,可在port块中添加static = <你的端口号>(例如static = 8080),之后就能直接用127.0.0.1:8080访问容器。

补充防火墙兜底方案

如果Nomad配置修改后仍有问题,可通过VPS防火墙规则限制公网访问目标端口,以iptables为例:

# 替换<port>为实际端口,禁止外部访问该端口
iptables -A INPUT -p tcp --dport <port> -s 0.0.0.0/0 -j DROP
# 允许本地访问该端口
iptables -A INPUT -p tcp --dport <port> -s 127.0.0.1/32 -j ACCEPT

内容的提问来源于stack exchange,提问作者Nilan Saha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 06:32:45