Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
aaronontheweb avatar

Akka Net Management

  • 329 installs
  • 1.1k repo stars
  • Updated July 3, 2026
  • aaronontheweb/dotnet-skills

akka-net-management is a Claude Code .NET skill that helps developers set up Akka.NET cluster management, node discovery, and health coordination for distributed actor-based .NET backend services.

About

akka-net-management is a .NET distributed systems skill from aaronontheweb/dotnet-skills focused on operating Akka.NET clusters in production backend services. It guides cluster management setup, node discovery configuration, and health coordination patterns so actor-based .NET services scale reliably across nodes. Developers reach for akka-net-management when implementing Akka.NET cluster bootstrapping, remoting topology, split-brain mitigation concerns, or health probes for actor systems during backend implementation of high-availability microservices.

  • Akka.NET cluster ops
  • Distributed actor discovery
  • Node health coordination
  • Production-ready .NET backend patterns
  • Integration-focused setup guidance

Akka Net Management by the numbers

  • 329 all-time installs (skills.sh)
  • Ranked #59 of 153 .NET & C# skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/aaronontheweb/dotnet-skills --skill akka-net-management

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs329
repo stars1.1k
Last updatedJuly 3, 2026
Repositoryaaronontheweb/dotnet-skills

How do you set up Akka.NET cluster management in .NET?

Set up Akka.NET cluster management, node discovery, and health coordination for distributed actor-based .NET services during backend implementation.

Who is it for?

.NET backend engineers deploying Akka.NET actor clusters who need discovery, management, and health coordination patterns.

Skip if: Single-node ASP.NET Core CRUD APIs with no actor model or distributed cluster requirements.

When should I use this skill?

User implements Akka.NET clusters, node discovery, remoting topology, or health coordination in distributed .NET services.

What you get

Akka.NET cluster config, node discovery setup, health coordination hooks, and distributed actor topology plan

  • cluster-configuration
  • discovery-setup
  • health-coordination-plan

Files

SKILL.mdMarkdownGitHub ↗

Akka.NET Management and Service Discovery

When to Use This Skill

Use this skill when:

  • Deploying Akka.NET clusters to Kubernetes or cloud environments
  • Replacing static seed nodes with dynamic service discovery
  • Configuring cluster bootstrap for auto-formation
  • Setting up health endpoints for load balancers
  • Integrating with Azure Table Storage, Kubernetes API, or config-based discovery

Reference Files

  • discovery-providers.md: Config, Kubernetes, and Azure discovery setup with full code and deployment YAML
  • configuration-reference.md: Strongly-typed configuration model classes

Overview

Akka.Management provides HTTP endpoints for cluster management and integrates with Akka.Cluster.Bootstrap to enable dynamic cluster formation using service discovery instead of static seed nodes.

Why Use Akka.Management?

ApproachProsCons
Static Seed NodesSimple, no dependenciesDoesn't scale, requires known IPs
Akka.ManagementDynamic discovery, scales to N nodesMore configuration, external dependencies

Use static seed nodes for: Development, single-node deployments, fixed infrastructure.

Use Akka.Management for: Kubernetes, auto-scaling groups, dynamic environments, production clusters.

---

Architecture

┌─────────────────────────────────────────────────────────────┐
│                    Cluster Bootstrap                         │
│  ┌─────────────┐    ┌─────────────┐    ┌─────────────┐     │
│  │  Node 1     │    │  Node 2     │    │  Node 3     │     │
│  │             │    │             │    │             │     │
│  │ Management  │◄──►│ Management  │◄──►│ Management  │     │
│  │ HTTP :8558  │    │ HTTP :8558  │    │ HTTP :8558  │     │
│  └──────┬──────┘    └──────┬──────┘    └──────┬──────┘     │
│         │                  │                  │             │
│         └──────────────────┼──────────────────┘             │
│                            │                                │
│                    ┌───────▼───────┐                        │
│                    │   Discovery   │                        │
│                    │   Provider    │                        │
│                    └───────────────┘                        │
│                            │                                │
└────────────────────────────┼────────────────────────────────┘
                             │
              ┌──────────────┼──────────────┐
              │              │              │
        ┌─────▼─────┐ ┌──────▼─────┐ ┌─────▼──────┐
        │ Kubernetes│ │   Azure    │ │   Config   │
        │    API    │ │   Tables   │ │   (HOCON)  │
        └───────────┘ └────────────┘ └────────────┘

---

Required NuGet Packages

<ItemGroup>
  <!-- Core management -->
  <PackageReference Include="Akka.Management" />
  <PackageReference Include="Akka.Management.Cluster.Bootstrap" />

  <!-- Choose ONE discovery provider -->
  <PackageReference Include="Akka.Discovery.KubernetesApi" />    <!-- For Kubernetes -->
  <PackageReference Include="Akka.Discovery.Azure" />            <!-- For Azure -->
  <PackageReference Include="Akka.Discovery.Config.Hosting" />   <!-- For static config -->
</ItemGroup>

---

Akka.Hosting Configuration

Basic Setup with Mode Selection

public static class AkkaConfiguration
{
    public static IServiceCollection ConfigureAkka(
        this IServiceCollection services,
        Action<AkkaConfigurationBuilder, IServiceProvider>? additionalConfig = null)
    {
        services.AddOptions<AkkaSettings>()
            .BindConfiguration("AkkaSettings")
            .ValidateDataAnnotations()
            .ValidateOnStart();

        return services.AddAkka("MySystem", (builder, sp) =>
        {
            var settings = sp.GetRequiredService<IOptions<AkkaSettings>>().Value;
            var configuration = sp.GetRequiredService<IConfiguration>();

            ConfigureNetwork(builder, settings, configuration);
            ConfigureHealthChecks(builder);

            additionalConfig?.Invoke(builder, sp);
        });
    }

    private static void ConfigureNetwork(
        AkkaConfigurationBuilder builder,
        AkkaSettings settings,
        IConfiguration configuration)
    {
        if (settings.ExecutionMode == AkkaExecutionMode.LocalTest)
            return;

        builder.WithRemoting(settings.RemoteOptions);

        if (settings.ClusterBootstrapOptions.Enabled)
            ConfigureAkkaManagement(builder, settings, configuration);
        else
            builder.WithClustering(settings.ClusterOptions);
    }
}

Akka.Management Configuration

private static void ConfigureAkkaManagement(
    AkkaConfigurationBuilder builder,
    AkkaSettings settings,
    IConfiguration configuration)
{
    var mgmtOptions = settings.AkkaManagementOptions;
    var bootstrapOptions = settings.ClusterBootstrapOptions;

    // IMPORTANT: Clear seed nodes when using Akka.Management
    settings.ClusterOptions.SeedNodes = [];

    builder
        .WithClustering(settings.ClusterOptions)
        .WithAkkaManagement(setup =>
        {
            setup.Http.HostName = mgmtOptions.HostName;
            setup.Http.Port = mgmtOptions.Port;
            setup.Http.BindHostName = "0.0.0.0";
            setup.Http.BindPort = mgmtOptions.Port;
        })
        .WithClusterBootstrap(options =>
        {
            options.ContactPointDiscovery.ServiceName = bootstrapOptions.ServiceName;
            options.ContactPointDiscovery.PortName = bootstrapOptions.PortName;
            options.ContactPointDiscovery.RequiredContactPointsNr = bootstrapOptions.RequiredContactPointsNr;
            options.ContactPointDiscovery.Interval = bootstrapOptions.ContactPointProbingInterval;
            options.ContactPointDiscovery.StableMargin = bootstrapOptions.StableMargin;
            options.ContactPointDiscovery.ContactWithAllContactPoints = bootstrapOptions.ContactWithAllContactPoints;
            options.ContactPoint.FilterOnFallbackPort = bootstrapOptions.FilterOnFallbackPort;
            options.ContactPoint.ProbeInterval = bootstrapOptions.BootstrapperDiscoveryPingInterval;
        });

    // Configure the discovery provider
    ConfigureDiscovery(builder, settings, configuration);
}

See discovery-providers.md for complete Config, Kubernetes, and Azure discovery setup code.

See configuration-reference.md for the full strongly-typed configuration model classes.

---

Health Endpoints

Akka.Management exposes health endpoints for load balancers and orchestrators:

EndpointPurposeReturns 200 When
/aliveLivenessActorSystem is running
/readyReadinessCluster member is Up
/cluster/membersDebugReturns cluster membership

ASP.NET Core Health Check Integration

// Register Akka health checks
builder.Services.AddHealthChecks();

// In Akka configuration
builder
    .WithActorSystemLivenessCheck()     // Adds "akka-liveness" health check
    .WithAkkaClusterReadinessCheck();   // Adds "akka-cluster-readiness" health check

// Map endpoints
app.MapHealthChecks("/health/live", new HealthCheckOptions
{
    Predicate = check => check.Tags.Contains("liveness")
});

app.MapHealthChecks("/health/ready", new HealthCheckOptions
{
    Predicate = check => check.Tags.Contains("readiness")
});

---

Troubleshooting

Cluster Won't Form

Symptoms: Nodes stay as separate single-node clusters.

Checklist: 1. All nodes use same ServiceName 2. RequiredContactPointsNr matches actual replica count 3. Discovery provider is configured correctly 4. Network allows traffic on management port (8558) 5. For Kubernetes: RBAC permissions are set

Split Brain

Symptoms: Multiple clusters form instead of one.

Solutions: 1. Set ContactWithAllContactPoints = true 2. Increase StableMargin for slower environments 3. For Aspire: Set FilterOnFallbackPort = false (dynamic ports) 4. For Kubernetes: Set FilterOnFallbackPort = true (fixed ports)

Azure Discovery Issues

Symptoms: Nodes can't find each other via Azure Tables.

Checklist: 1. Connection string is valid 2. Storage account allows table operations 3. All nodes use same ServiceName 4. Firewall allows access to Azure Storage

---

Aspire Integration

For detailed Aspire-specific patterns, see the akka-net-aspire-configuration skill.

Quick reference for Aspire:

// In AppHost
appBuilder
    .WithEndpoint(name: "remote", protocol: ProtocolType.Tcp,
        env: "AkkaSettings__RemoteOptions__Port")
    .WithEndpoint(name: "management", protocol: ProtocolType.Tcp,
        env: "AkkaSettings__AkkaManagementOptions__Port")
    .WithEnvironment("AkkaSettings__ClusterBootstrapOptions__Enabled", "true")
    .WithEnvironment("AkkaSettings__ClusterBootstrapOptions__DiscoveryMethod", "AzureTableStorage")
    .WithEnvironment("AkkaSettings__ClusterBootstrapOptions__FilterOnFallbackPort", "false");

---

Summary: When to Use What

ScenarioDiscovery MethodFilterOnFallbackPort
Local development (single node)None (use seed nodes)N/A
Aspire multi-nodeAzureTableStoragefalse
KubernetesKubernetestrue
Azure VMs/VMSSAzureTableStoragetrue
Fixed infrastructureConfigtrue
AWS ECS/EC2AWS discovery pluginstrue

Related skills

How it compares

Choose akka-net-management for Akka.NET cluster operations, not for general ASP.NET Core hosting or non-actor microservice patterns.

FAQ

What does akka-net-management help configure?

akka-net-management helps configure Akka.NET cluster management, node discovery, and health coordination so distributed actor-based .NET backend services can form clusters and operate reliably across multiple nodes.

When should .NET developers use akka-net-management?

Use akka-net-management during backend implementation when building Akka.NET actor clusters that require node discovery, cluster membership management, and health coordination rather than single-node ASP.NET APIs.

.NET & C#backendintegrations

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.