Service Fabric: Cluster Stuck in UpgradeServiceUnreachable State — Certificate Renewal Issue

AzureCloud-3784 0 Reputation points
2026-08-28T19:52:22.92+00:00

Problem description

I am experiencing an issue with my Service Fabric cluster in the centralus region. After its primary certificate expired on 2026-08-21, I installed a new certificate on all nodes and updated the cluster's certificate settings at the ARM resource level. However, the cluster remains in the 'UpgradeServiceUnreachable' state, with the properties.certificate.thumbprint unchanged and the provisioning state stuck in 'Updating'. The cluster's upgrade cannot proceed because three of four VM scale set instances are waiting for approval to walk their update domains, but the Upgrade Service is unreachable. Diagnostic insights suggest missing seed nodes, which might be preventing quorum.

Environment

Region: centralus; Service: Service Fabric; Resource type: Cluster; Runtime version: not specified; Upgrade mode: Manual; Host shape: Four VM Scale Sets; Security: X.509 certificates stored in Azure Key Vault; Reliability tier: Silver or Gold.

What I've already tried

On 2026-08-21, the original cluster certificate expired. I obtained and installed a new certificate on each node's LocalMachine\My store, then updated the cluster's certificate properties in the ARM resource to reference the new thumbprint and Key Vault secret version. Despite this, the cluster resource's provisioning state remains 'Updating', and the properties.certificate.thumbprint does not change. The cluster state stays in 'UpgradeServiceUnreachable'. I examined VM scale set instances, and three of four are pending in update domains, blocked by the unreachable cluster. I ran diagnostic insights, which flagged missing seed nodes, possibly affecting quorum.

Current status

I am seeking guidance on how to resolve the issue where the cluster remains in 'UpgradeServiceUnreachable' state despite installing new certificates and updating the cluster resource. Specifically, I need to understand how to complete the certificate rollover and recover the cluster when the Upgrade Service is unreachable, and what supported steps are available to fix this situation.

Azure Service Fabric
Azure Service Fabric

An Azure service that is used to develop microservices and orchestrate containers on Windows and Linux.

0 comments No comments

2 answers

Sort by: Newest
  1. Ahamed Musthafa Careem 671 Reputation points
    2026-08-29T09:59:33.8233333+00:00

    Dear @AzureCloud-3784 ,

    Your cluster is in a known “blocked upgrade” scenario: the primary certificate expired, the ARM update started, but the Fabric Upgrade Service lost quorum (missing seed nodes) before it could apply the new certificate. In that state the cluster can’t complete the certificate rollover and stays in UpgradeServiceUnreachable with provisioningState Updating.

    Below are the supported steps to recover.

    1. Confirm certificate and ACLs on every node

    On each VM in the primary node type:

    1. RDP in and run certlm.mscLocal Computer → Personal.

    Verify:

    • The new cluster certificate is present and not expired.
      • The old/expired certificate is still present (the cluster may still be trying to use it).
    1. For the new certificate:
    • Right‑click → Manage Private Keys.
      • Ensure NETWORK SERVICE has Full Control.

    If the new cert is missing or not ACL’d to NETWORK SERVICE, the Upgrade Service can’t use it and the cluster will stay stuck.

    2. Restore seed‑node quorum

    Your diagnostics already indicate missing seed nodes. Until quorum is restored, no configuration upgrade (including certificate swap) can complete.

    Follow Microsoft’s guidance for missing seed nodes:

    In brief:

    1. Determine how many seed nodes are missing (from Service Fabric Explorer or diagnostics).
    2. Scale up the primary VM Scale Set to add enough nodes to replace the missing seed nodes (often +2 or more depending on reliability tier).
    3. Run the Microsoft troubleshooting script to “fake”/repair the missing seed node configuration so the ring can form quorum again.

    Once quorum is back, the cluster should move out of the pre‑safety‑check failure and allow upgrades to proceed.

    3. Use the expired‑certificate recovery guidance

    Because the cluster became unreachable after the primary certificate expired, also follow the dedicated recovery guide:

    Key points from that doc:

    • If the cluster is secured with thumbprint‑based self‑signed certs, you may need to temporarily set:
        "fabricSettings": [
        {
          "name": "Security",
          "parameters": [
            {
              "name": "AcceptExpiredPinnedClusterCertificate",
              "value": "true"
            }
          ]
        }
      

    ]

      
      via **https://resources.azure.com** on the Service Fabric cluster resource, then apply. This lets the cluster start even while it still references the expired cert, so you can connect and complete the rollover.
      
    - After you can connect with PowerShell (`Connect-ServiceFabricCluster`), run the provided **FixExpiredCert‑*.ps1*** script (or equivalent manual steps) to:
    
    - Update the cluster manifest with the new thumbprint.
    
    - Restart the FabricHostSvc service.
    
      - Force the Upgrade Service to pick up the new certificate state.
      
    Microsoft’s issue tracker also confirms that an expired cert can block the Upgrade Service specifically, and that deleting the expired certificate from all nodes and/or moving to **common‑name** based configuration is the long‑term fix.
    
    ## 4. If the cluster resource is stuck in “Updating”
    
    If, after restoring quorum and fixing certs, the ARM resource still shows:
    
    - `provisioningState: Updating`
    
    - `properties.certificate.thumbprint` unchanged
    
    then:
    
    1. Ensure **AcceptExpiredPinnedClusterCertificate = true** is set first (as above).
    
    1. Re‑apply the cluster ARM template with the **new certificate thumbprint** (or common name) only after the cluster is healthy enough to connect via PowerShell.
    
    1. Monitor upgrade status with:
    
       ```yaml
       Get-ServiceFabricClusterUpgrade
    

    and verify the upgrade completes instead of failing at PreSafetyCheck due to seed nodes.

    If the resource remains stuck despite a healthy cluster, open a support request (even with Basic support you can file a Subscription Management case) and reference:

    Help make this community better for everyone: if this answer resolved your issue, please accept it or leave an upvote. If not, share more details in a comment so we can continue the discussion and find the right solution.

    Was this answer helpful?

    0 comments No comments

  2. Deleted

    This answer has been deleted due to a violation of our Code of Conduct. The answer was manually reported or identified through automated detection before action was taken. Please refer to our Code of Conduct for more information.


    Comments have been turned off. Learn more

Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.