Lightweight Worker Node Azure Deployment Troubleshooting
Overview
Troubleshoot failures when deploying a lightweight worker node in Azure from the OneTrust platform.
The deployment uses the main.bicep template, which is compiled to ARM for OneTrust platform deployment, and typically takes 20–30 minutes. It creates a VNet, a subnet, a NAT gateway, and a public IP address if a new VNet is created, an NSG, a network interface, a VM, and a CustomScript extension.
Prerequisites and IAM permissions
Required Azure permissions
You need one of the following options:
Option A – Built-in role (simplest)
Assign the Contributor role at the subscription or resource group scope. This role includes all the resource provider permissions required by the template.
|
Role |
Scope |
Covers |
|---|---|---|
|
|
Subscription or resource group |
All resource types, including everything listed in the custom role. |
Option B – Custom role (least privilege)
If you cannot use Contributor, create a custom role with the following resource provider permissions at the resource group scope.
|
Permission |
Used for |
|---|---|
|
|
ARM deployment operations |
|
|
VNet, subnet, NSG, network interface, NAT gateway, public IP, and security rules. |
|
|
VM, managed disk, and |
Do not assign both the Contributor and the custom role. Choose one. The Contributor role already includes all the resource provider permissions listed for the custom role.
Where to check permissions
Go to Azure Portal > Subscriptions > select the subscription > Access control (IAM) > View my access.
Verify that you have at least the Contributor role at the subscription or resource group level. If you use a custom role, verify the specific permissions listed above.
Azure subscription quotas
|
Resource |
Default limit |
Where to check |
|---|---|---|
|
VMs per region |
20000 |
Azure Portal > Subscriptions > Usage + quotas |
|
vCPUs per region (D-series) |
10–100 (varies) |
|
|
Public IPs (Standard) |
15 |
|
|
NAT gateways |
16 |
|
|
NSGs |
5000 |
|
|
VNet peering per VNet |
500 |
ARM template parameters explained
Basic parameters (always shown)
|
Parameter |
Default |
Description |
|---|---|---|
|
|
|
Admin username for SSH access to the VM. |
|
|
|
|
|
|
(user-provided) |
SSH public key or password, depending on the authentication type. |
|
|
(auto-populated) |
Base64-encoded OneTrust configuration data. Do not edit. |
Advanced parameters (shown when Advanced Options = Yes)
|
Parameter |
Default |
Description |
When to change |
|---|---|---|---|
|
|
|
Operating system for the VM. Options: |
Select the required operating system. |
|
|
|
Azure VM size. Also available: |
Use |
|
|
|
Use an existing VNet or create a new one. |
Set to |
|
|
(blank) |
Name of the existing VNet when |
Provide when using an existing VNet. |
|
|
(blank) |
Name of the existing subnet when |
Provide when using an existing VNet. |
|
|
|
Configure an HTTP proxy. |
Set to |
|
|
(blank) |
Proxy server IP address. |
Provide when |
|
|
|
Proxy server port. |
Provide when |
|
|
|
Enable AI Guard. This opens inbound port |
Set to |
Hidden parameters (not exposed in the UI)
|
Parameter |
Value |
Notes |
|---|---|---|
|
|
|
Hidden in the UI form. |
|
|
From OneTrust token |
Typically 512 GB. |
|
|
From OneTrust token |
Typically Standard LRS. |
Deployment scenarios
|
|
What happens |
|---|---|
|
|
Creates a new VNet ( |
|
|
Uses the existing VNet and subnet. No NAT gateway is created. The existing subnet must have outbound internet access. |
Failure catalog
Deployment validation failures
Deployment failed – resource provider not registered
Portal error:
Subscription is not registered for resource provider 'Microsoft.Network'.
Please register the provider and retry the deployment.
Where to check: Azure Portal > Subscriptions > select the subscription > Resource providers.
Root cause: The subscription does not have the required resource providers registered. This is rare. Microsoft.Compute and Microsoft.Network are automatically registered on most subscriptions, but they can be unregistered by policy or on recently created subscriptions.
Fix:
az provider register --namespace Microsoft.Compute
az provider register --namespace Microsoft.Network
Registration takes a few minutes. Verify the status:
az provider show --namespace Microsoft.Network --query registrationState
When both providers show Registered, retry the deployment from the OneTrust portal.
Validation error – SSH key format invalid
Portal error:
Invalid SSH public key format.
Provide an RSA or Ed25519 public key in OpenSSH format
(starting with 'ssh-rsa' or 'ssh-ed25519') or an RSA key in multi-line PEM format.
Where to check: Azure Portal > Custom deployment > validation banner.
Root cause: The SSH public key is not in the correct format. The template requires OpenSSH format.
Fix: Generate a proper SSH key:
ssh-keygen -t ed25519 -f ~/.ssh/onetrust_litenode
Copy the public key content:
cat ~/.ssh/onetrust_litenode.pub
Paste the public key into the SSH public key field in the portal. Multi-line PEM format is not supported for Ed25519 keys; it is supported only for RSA keys.
Validation error – resource group region mismatch
Portal error:
The location of the resource group is different from the location of the resources.
Root cause: The resource group is in a different region from the region where you are trying to deploy. The template uses resourceGroup().location for all resources.
Fix: Create a new resource group in the desired region: Azure Portal > Resource groups > Create. Select the new resource group in the deployment form. The VM region is automatically populated from the resource group location.
VM creation failures
VM creation failed – vCPU quota exceeded
Portal error:
Operation could not be completed as it results in exceeding approved Total Regional Cores quota.
Current usage: XX, Additional required: 16, Total Regional Quota: YY.
Where to check: Azure Portal > Subscriptions > select the subscription > Usage + quotas > filter by region.
Root cause: The subscription does not have enough vCPU quota for Standard_D16ads_v5, which requires 16 vCPUs.
Fix: Request a quota increase: Azure Portal > Subscriptions > Usage + quotas > Request increase. Alternatively, use Standard_D8ads_v5, which requires 8 vCPUs but is below the recommended minimum, or free up vCPUs by stopping or deallocating unused VMs in the region.
VM creation failed – VM size not available in region
Portal error:
The requested VM size Standard_D16ads_v5 is not available in the current region.
Where to check: Azure Portal > Virtual machines > Sizes > filter by region.
Root cause: Not all VM sizes are available in all Azure regions.
Fix: Check the available sizes in your region:
az vm list-skus --location <region> --size Standard_D --output table
Use an available D-series size with at least 16 vCPUs and 64 GB of RAM. If no suitable size is available, try a different region.
VM creation failed – image reference not found
Portal error:
The platform image referenced is not available in this region.
Publisher: Canonical, Offer: ubuntu-24_04-lts, SKU: pro-server
Where to check: Azure Portal > Virtual machines > Images > check marketplace availability.
Root cause: The operating system image, such as Ubuntu Pro or RHEL, is not available in the selected region, or the image reference in the OneTrust token is outdated.
Fix: Try a different operating system version, such as Ubuntu-2204 instead of Ubuntu-2404. Try a different region where the image is available. If you use RHEL, ensure that your subscription has RHEL access enabled in Azure Marketplace.
VM creation failed – disk size exceeds limits
Portal error:
The specified disk size 512 GB is not supported for the storage account type Standard_LRS.
Root cause: The disk type and size combination is not supported.
Fix: This should not happen with the default settings. If it does, contact OneTrust Support because the disk configuration comes from the OneTrust token.
Network resource failures
VNet creation failed – address space conflict
Portal error:
The virtual network address space '10.0.0.0/24' conflicts with an existing virtual network.
Where to check: Azure Portal > Virtual networks > check existing VNets in the resource group or region.
Root cause: The default VNet prefix 10.0.0.0/24 conflicts with an existing VNet in the subscription.
Fix: Use an existing VNet by setting useExistingVnet to Yes and providing the VNet and subnet names, or delete the conflicting VNet if it is unused. The template does not expose the VNet CIDR as a parameter. Contact OneTrust Support if you need a custom CIDR for a new VNet.
NSG creation failed – security rule conflict
Portal error:
Security rule validation failed.
Priority XXXX is already in use.
Root cause: There is an NSG rule priority conflict. The template uses priorities 1000 for SSH, 1010 for proxy, 1020 for HTTPS, 1030 for HTTP, and 1040 for AI Guard.
Fix: This should not happen with a new NSG. If it does, delete the existing NSG and retry the deployment.
NAT gateway creation failed – public IP unavailable
Portal error:
Cannot create public IP address.
Subscription is not registered for Microsoft.Network namespace.
Root cause: The resource provider is not registered, or the public IP quota has been exceeded.
Fix: Register the provider:
az provider register --namespace Microsoft.Network
Check the public IP quota: Azure Portal > Subscriptions > Usage + quotas. Alternatively, use an existing VNet with outbound connectivity so that no NAT gateway is created.
CustomScript extension failures
Extension provisioning failed – installer download timeout
Portal error:
VM extension 'SetWorkerNode' provisioning failed.
Error: Command execution finished with
exit code: 1.
Output: curl: (28) Connection timed out after 300 seconds.
Where to check: Azure Portal > Virtual machines > select the VM > Extensions > SetWorkerNode > detailed status. You can also SSH to the VM and run cat /home/onetrust/installer.log.
Root cause: The CustomScript extension runs curl to download installer.sh from <tenant>.onetrust.com. If the VM cannot reach the tenant URL because of a firewall, NSG, or proxy, the download times out.
Fix: Verify that NSG outbound rules allow HTTPS on port 443 to *.onetrust.com. If you use a proxy, ensure that enterProxy is set to Yes and that the proxy IP and port are correct. SSH to the VM and test connectivity:
curl -I https://<tenant>.onetrust.com
If access is blocked, update the NSG outbound rules or configure the proxy.
Extension provisioning failed – deploy.sh error
Portal error:
VM extension 'SetWorkerNode' provisioning failed.
Error: Command execution finished with
exit code: N.
Output: ...
Where to check: SSH to the VM and run cat /home/onetrust/installer.log.
Root causes:
-
K3s installation failed because of a network or dependency issue.
-
Helm deployment failed because of an image pull or pod startup issue.
-
There is insufficient disk space.
-
The proxy is not configured correctly in
.guided-envs.
Fix: Read installer.log for the specific error. If K3s failed, run sudo systemctl status k3s. If Helm failed, run kubectl get pods -n onetrust. See Lightweight Worker Node Troubleshooting and Administration for pod-level troubleshooting. If the issue is proxy-related, verify that /etc/profile.d/proxy.sh exists and contains the correct values.
Extension timeout – deployment exceeded 90 minutes
Portal error:
VM extension 'SetWorkerNode' provisioning timed out.
Root cause: The CustomScript extension has a default timeout. If the installer download, K3s setup, and Helm deployment take too long because of a slow network or large images, the extension times out.
Fix: SSH to the VM and check whether installation is still running:
ps aux | grep deploy.sh
If installation is still running, wait. The extension may time out in Azure while the installation continues. Check the OneTrust portal because the node may still become healthy even if the extension shows as failed.
If the installation truly failed, re-run it manually:
cd /home/onetrust/onetrust-dd-installer-*/data-discovery/litenode-deployment/
./deploy.sh install skip-prompt
RHEL-specific failures
RHEL LVM resize failed
Symptom: The RHEL VM deploys, but disk space is not expanded correctly.
Where to check: SSH to the VM and run df -h. Check whether /var, /tmp, and /home are resized.
Root cause: The template includes an RHEL LVM resize script that runs before the installer. If growpart or lvextend fails, the disk partitions are not expanded.
Fix: SSH to the VM and run the resize commands manually:
sudo pvresize /dev/sda3 # or the appropriate PV
sudo lvextend -l +100%FREE /dev/mapper/rootvg-varlv
sudo lvextend -l +100%FREE /dev/mapper/rootvg-tmplv
sudo lvextend -l +100%FREE /dev/mapper/rootvg-homelv
Re-run the installer.
AI Guard-specific failures
AI Guard inbound rule not created
Symptom: AI Guard is enabled, but port 4443 is unreachable.
Where to check: Azure Portal > Network Security Groups > find <vmName>-nsg > Inbound security rules.
Root cause: The AllowAIGuardInbound NSG rule with priority 1040 is created only when enableAIGov is set to Yes.
Fix: Verify that enableAIGov was set to Yes during deployment. If it was not, manually add an inbound rule: NSG > Inbound security rules > Add > port 4443, TCP, Allow. If the rule exists but the port is still unreachable, check that the source CIDR is correct. It defaults to sshAllowedIPs from the OneTrust token.
Post-deployment verification
Azure Portal
Go to Azure Portal > Resource groups and find the resource group. Verify that the following resources exist:
-
Virtual machine with a
Runningstatus. -
Network security group.
-
Network interface.
-
Virtual network, if a new VNet was created.
-
NAT gateway and public IP, if a new VNet is created.
-
Under VM > Extensions,
SetWorkerNodeshowsProvisioning succeeded.
SSH verification
ssh -i ~/.ssh/your-key onetrust@<vm-public-ip>
# Check K3s
sudo systemctl status k3s
# Check pods
kubectl get pods -n onetrust
# Expected: 18 pods Running (17 without AI Guard)
# Check installer log
cat ~/installer.log | tail -20
OneTrust portal
To check the status of the lightweight worker node, go to Data Discovery > Worker nodes. The status should transition to Healthy within 20–30 minutes. If it is still Awaiting activation after 30 minutes, SSH to the VM and check installer.log.
Cleanup and rollback
Delete a failed deployment
Go to Azure Portal > Resource groups and find the resource group. If a dedicated resource group was created, delete the resource group to delete all resources.
If an existing resource group was used, delete the individual resources:
-
Virtual machine > Delete.
-
Network interface > Delete.
-
Network security group > Delete.
-
VNet, if created > Delete.
-
NAT gateway and public IP (if created) > delete each.
-
Managed disk > Delete, if it was not automatically deleted with the VM.
OneTrust portal cleanup
To delete a lightweight worker node, see Managing Worker Node Details: To delete worker nodes.
The delete action removes the OneTrust resource but does not delete Azure cloud resources. You must manually clean up Azure resources.
Soft recovery without deleting the VM
If the VM is operating correctly but K3s or Helm is not working, SSH to the VM and uninstall K3s:
sudo /usr/local/bin/k3s-uninstall.sh
Re-download and install the lightweight worker node:
curl -L -o ~/installer.sh -H "Authorization: Bearer <TOKEN>" \
"https://<tenant>.onetrust.com/api/discovery-scan-config/v1/installer-config/<WN_ID>/download"
chmod +x ~/installer.sh
echo "1111" | ~/installer.sh extract-zip
cd ~/onetrust-dd-installer-*/data-discovery/litenode-deployment/
./deploy.sh install skip-prompt
Quick reference
|
Symptom |
Likely cause |
Where to look |
|---|---|---|
|
Validation error |
SSH key format |
Azure portal validation banner |
|
Deployment failed |
vCPU quota |
Subscriptions > Usage + quotas |
|
Deployment failed |
Image not available in the region |
VM > Images > check availability |
|
Extension failed |
Network blocking installer |
SSH > |
|
Extension timeout |
Slow download |
SSH > check whether |
|
Node in Awaiting activation status |
Bootstrap failure |
SSH > |
|
VNet conflict |
CIDR overlap |
Azure Portal > Virtual networks |
|
Node in Unhealthy status |
NATS blocked |
See Lightweight Worker Node Troubleshooting and Administration: Post-deployment troubleshooting. |