For other Kubernetes clusters, see Resolve Satellite. For AWS ECS Fargate, see Satellite on AWS ECS.
Architecture
- Compute: A satellite pod installed with Helm in one AKS cluster (the host cluster)
- Identity: A user-assigned managed identity, federated with the satellite’s Kubernetes service account
- Authentication: kubelogin, bundled in the satellite image, exchanges the pod’s service account token for a short-lived Microsoft Entra token
- Authorization: A read-only ClusterRole bound to the managed identity on each cluster
- Cluster access: One Kubernetes integration per cluster, each with a kubeconfig that holds only the API server address and CA certificate
Installation
Step 1: Prepare Resources
Gather the following information before deployment. See Resource Setup Reference below for how to create each resource.The namespace and service account are bound into the federated credential. Choose them before creating the identity, and install the satellite with the same values.
Step 2: Create a Kubeconfig per Cluster
Each kubeconfig names one cluster and runs kubelogin to get a token. Give each cluster’s kubeconfig a different user name: the satellite caches tokens by user name.kubeconfig-prod-eastus.yaml
Step 3: Deploy with Helm
Bind the satellite to the federated service account, turn on workload identity for its pod, and add one Kubernetes integration per cluster.resolve-values.yaml
When you define a
kubernetes integration, the chart skips its default in-cluster k8s integration. List the host cluster explicitly, as above, to read it with workload identity.secretName instead of secret. See Secret Management.
Step 4: Monitor Deployment
Resource Setup Reference
The Helm chart does not create the following resources. They must exist before deployment.The examples use the Azure CLI and
kubectl. You can create the same resources with Terraform or another infrastructure-as-code tool: azurerm_user_assigned_identity for the managed identity, azurerm_federated_identity_credential for the federated credential (using the cluster’s oidc_issuer_url), and kubernetes_cluster_role_v1 and kubernetes_cluster_role_binding_v1 for the RBAC objects.1. AKS Clusters
- Host cluster: The OIDC issuer and workload identity must be enabled
- Every cluster the satellite reads: Microsoft Entra ID integration must be enabled. Local accounts can be disabled
2. Managed Identity
Create a user-assigned managed identity for the satellite.CLIENT_ID goes into the Helm values. OBJECT_ID is the user name Kubernetes RBAC sees for this identity.
3. Federated Credential
Federate the identity with the satellite’s service account on the host cluster. Only a pod running as this service account, in this namespace, on this cluster can use the identity.4. Kubernetes RBAC
Apply this ClusterRole and ClusterRoleBinding to each cluster the satellite reads, including the host cluster. ReplaceOBJECT_ID with the identity’s object ID. The role grants read access only and does not include Secrets.
resolve-satellite-reader.yaml
resolve-satellite-reader.yaml
az aks command invoke for clusters you reach only through Azure.
The built-in Azure Kubernetes Service RBAC Reader role is not enough on its own. It excludes cluster-scoped resources the satellite reads, such as nodes, persistent volumes, storage classes, and custom resource definitions. AKS with Azure RBAC still evaluates Kubernetes RBAC, so this binding also works on clusters that use Azure RBAC.
5. Ingest Token
The ingest token authenticates your satellite with Resolve SaaS. Generate it from Resolve UI > Admin > Tokens and store it in a Kubernetes Secret, as described in Secret Management.6. Network
- Outbound HTTPS: Required from the host cluster to Resolve SaaS
- API servers: The satellite pod must reach the API server of every cluster it reads. For private clusters, provide a route to the private endpoint, for example through VNet peering and private DNS
Configuration Reference
Helm Values
Kubeconfig Fields
Verification
1. Check Pod is Running
Running and ready.
2. Check Satellite Logs
Resolve Satellite Tool Request entries with "result":"success" for each Kubernetes integration.
3. Check Satellite in Resolve UI
- Log in to Resolve UI
- Navigate to Admin > Satellites
- Verify your satellite appears with status “Connected” and each Kubernetes integration is healthy
Adding a Cluster
- Apply the Kubernetes RBAC ClusterRole and ClusterRoleBinding on the new cluster
- Create a kubeconfig for it with a new user name (see Step 2)
- Add a
kubernetesintegration for it toresolve-values.yamland run thehelm upgradecommand from Step 3
Deleting the Satellite
Troubleshooting
No AZURE_ Variables in the Satellite Pod
kubelogin fails because the pod has no workload identity configuration.
Restart the pod after fixing the values.
kubelogin Fails with a Federated Credential Error
The token exchange is rejected by Microsoft Entra ID.Forbidden: Cannot List Resource Nodes
The identity authenticates but is not authorized. Check which user the cluster sees, using the kubeconfig of the failing integration:Timeouts Reaching Another Cluster
Requests to one cluster time out while others succeed.- Verify the host cluster allows egress to that cluster’s API server
- For private clusters, verify there is a route to the private endpoint, for example through VNet peering and private DNS

