nats leaf node 部署一些问题

以前简单说过一些leaf node 的部署套路以及一些玩法,实际在如果希望提供公网能力的场景又有一些不同的玩法

一些问题

  • 结合场景,看看nats 的leaf node 是需要公网还是直接特定网络访问,如果提供公网能力,tls 以及leaf node得advertise 很重要,否则会有安全的问题以及访问部分请求可能会有timeout 的问题(因为leaf node 默认开启了advertise,no_advertise 可以规避暴露内网ip的问题,但是如果advertise 没有调整为符合业务场景访问的地址,也会有一些问题),如果公网还是推荐配置advertise 信息确保是一个安全可行的地址,后边在接入层通过智能dns解决负载访问的问题
  • 对于内网场景,可以直接提供暴露就可以了
  • 如果有特殊要求,同时公网也不能直接访问,通过vpn 是不错的选择
  • 如果leaf node 连接的是supercluster 的节点,推荐的玩法式对于多个remotes 每个cluster 配置都是一个集群的,核心还是提供灾备以及方便用户认证,如下(实际使用最好配置认证)
remotes [
  # Invalid configuration that will prevent the server from starting
  {urls: ["ws://hostname1:443", "nats://hostname2:7422"]}
]
  • 当前有一个比较有意思的问题,就是如果使用了同一个账户的creds 去链接supercluster 的各个集群,会有协议非法的问题,暂时还没确定具体的原因,使用不用的就没问题
  • leaf node 可以配置自己的认证模式,与cluster 可以不一样,尤其是在一些场景需要基于用户密码的认证场景尤其重要
  • leaf 与cluster 连接的账户权限还是很重要的,注意权限以及nats 的基于account 的多租户隔离,否则可能会出现各种测试消息访问问题,核心点是同名的account 以及account 权限是一致的

一个参考advertise 配置

  • 监听配置
leafnodes {
    port 7422
    advertise xxxxx:7422 # 需要暴露的ip 以及port
    no_advertise true # 就是上边的如果暴露都是可以直接访问的,提供no_advertise 是可以设置为false 
}
  • 连接配置

supercluster 模式的连接,好处是灾备能力比较强

leafnodes {
    remotes = [
        {
            urls: ["nats-leaf://xxxxx:7422","nats-leaf://x:7422"]xxxx
            creds: "/etc/nats-server/xxxxx.creds",
            account: xxxxxx
        },
        {
            urls: ["nats-leaf://xxxxx:7422","nats-leaf://xxxxx:7422","nats-leaf://x:7422"]xxxxx
            creds: "/etc/nats-server/x.creds",xxxx
            account: xxxxx
        }
    ]
   reconnect = 1 # 此参数可以加速故障的业务切换,当然应该结合自己的业务场景调整,默认有点大,适当减小还是比较有用的

}

说明

以上一些实践中的总结,大家可以结合自己的场景参考

参考资料

https://docs.nats.io/running-a-nats-service/configuration/leafnodes/leafnode_conf

posted on 2025-11-25 08:00  荣锋亮  阅读(0)  评论(0)    收藏  举报

导航