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

如何将Azure App Service加入基于两台Azure VM的Akka.Net集群?

解决Azure App Service加入Akka.Net集群的问题

一、先确认网络层面连通性

VM和App Service默认处于不同网络隔离环境,这是节点无法互通的核心原因之一:

  • 检查VM的网络安全组(NSG),确保Akka集群通信端口(默认2552,自定义端口对应调整)的入站/出站规则允许App Service的出站IP地址(可在App Service「属性」页面查看)。
  • 若VM部署在虚拟网络(VNet)内,建议将App Service集成到同一VNet:通过App Service「网络」->「VNet集成」功能完成配置,节点间可通过内网直接通信,避免公网端口暴露的问题。
  • 测试连通性:在App Service控制台执行Test-NetConnection <VM-IP> -Port <Akka-Port>,验证是否能建立TCP连接;VM侧也可反向测试App Service的出站IP。

二、Akka.Net集群配置细节

不管用种子节点还是服务发现模式,以下配置关键点必须落实:

1. 种子节点配置注意事项

若将App Service设为种子节点:

  • 种子列表必须填写App Service的公共域名(如yourapp.azurewebsites.net),不能用localhost或内网IP,VM无法直接访问App Service内网地址。
  • 必须显式配置akka.remote.dot-netty.tcp.public-hostname为App Service公共域名,public-port设为443(App Service对外暴露HTTPS端口,Akka通过TLS完成端口转发)。
  • 示例HOCON配置片段:
akka {
  remote {
    dot-netty.tcp {
      hostname = "0.0.0.0"  # App Service内部绑定需用0.0.0.0
      port = 0  # 让系统自动分配内部端口
      public-hostname = "yourapp.azurewebsites.net"
      public-port = 443
      enable-tls = true
    }
  }
  cluster {
    seed-nodes = ["akka.tcp://ClusterSystem@vm1-ip:2552", "akka.tcp://ClusterSystem@vm2-ip:2552", "akka.tcp://ClusterSystem@yourapp.azurewebsites.net:443"]
  }
}

2. Azure服务发现的正确配置

使用Akka.Discovery.Azure时:

  • 给所有集群节点(VM和App Service)添加相同的Azure资源标签(如akka-cluster-node:web-api),服务 discovery 会通过标签筛选节点。
  • 确保App Service的身份(系统分配/用户分配)拥有目标资源组的Reader权限,否则无法读取Azure资源信息。
  • 示例HOCON配置片段:
akka {
  discovery {
    method = azure
    azure {
      subscription-id = "你的订阅ID"
      resource-group = "你的资源组名称"
      tag-key = "akka-cluster-node"
      tag-value = "web-api"
      # 使用用户分配身份时需指定client-id
      # managed-identity-client-id = "你的客户端ID"
    }
  }
  cluster {
    seed-nodes = []
    discovery {
      join {
        discovery-method = azure
      }
    }
  }
}

三、App Service特殊配置调整

App Service的默认特性会影响Akka集群稳定性:

  • 开启「始终开启」:在App Service「配置」->「常规设置」中启用该选项,避免空闲实例休眠导致集群节点失联。
  • 关闭ARR亲和性:同样在「常规设置」中关闭,确保多实例App Service的请求可分发到任意节点。

四、故障排查步骤

  • 查看Akka日志:重点关注Cluster和Remote模块的日志,定位「无法连接种子节点」「服务发现未找到节点」等错误信息。
  • 检查应用日志:确认节点是否发起集群加入请求,以及连接失败的具体原因(超时、连接拒绝等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 18:41:02