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
浙公网安备 33010602011771号