AWS Marketplace
Subscribe to and deploy NES for Ingress NGINX as a metered container from AWS Marketplace on Amazon EKS
NES for Ingress NGINX is available on AWS Marketplace as a metered container
product. You subscribe through AWS Marketplace and deploy the Helm chart that
AWS hosts in the Marketplace container registry (Amazon ECR). The chart and every
image it uses are served from that registry. You are billed per running
controller pod, per hour, on your existing AWS bill. No separate HeroDevs invoice
or registry.nes.herodevs.com access token is required for this delivery.
How this differs from the NES registry deployment
Most NES for Ingress NGINX customers deploy from the
NES registry (registry.nes.herodevs.com) using a
HeroDevs access token. The AWS Marketplace path is different in several ways.
Handle these specifically when deploying from AWS Marketplace:
| Topic | NES registry | AWS Marketplace |
|---|---|---|
| Source | registry.nes.herodevs.com chart and image | AWS Marketplace Amazon ECR (chart and all images) |
| Pull authentication | HeroDevs access token via an imagePullSecret | No token or imagePullSecret required. The kubelet uses the worker node IAM role to obtain ECR credentials and pull from the Marketplace repository. |
| Billing | NES subscription or contract | Metered per pod-hour on your AWS bill |
| Cluster IAM | None required | The controller uses IRSA to call aws-marketplace:RegisterUsage; AWS Marketplace then verifies the AWS account’s subscription. EKS Pod Identity is not supported by Marketplace metering. |
| Platform | Any Kubernetes distribution | Amazon EKS only |
Do not create a HeroDevs image pull secret for the Marketplace deployment
The AWS Marketplace deployment uses no HeroDevs access token and nodocker-registry imagePullSecret. Amazon EKS pulls the chart and images from
the Marketplace registry using the worker node's Amazon ECR permissions, and your
subscription authorizes the pull. Do not set imagePullSecrets.
How billing works
You are billed per running controller pod, per hour, metered to the second with a one-minute minimum and prorated. There is no upfront or annual commitment. Customers who need custom commercial terms can contact HeroDevs to request a custom quote and private offer through AWS Marketplace. The underlying compute (Amazon EC2 or AWS Fargate) and any other AWS resources are billed separately by AWS. Billing continues for as long as controller pods are running, even after you unsubscribe, until those pods are stopped.
At startup the controller verifies entitlement by calling the AWS Marketplace
Metering Service RegisterUsage API. Per-pod-hour metering is then handled
automatically by AWS. No metering sidecar or custom dimension configuration is
required.
Prerequisites
- An Amazon EKS cluster running a Kubernetes version in the currently supported matrix of the Support Policy. AWS Marketplace container metering requires EKS. It is not supported on other Kubernetes distributions.
kubectland Helm 3.8 or later (OCI registry support) configured against the cluster.- An active AWS Marketplace subscription to NES for Ingress NGINX.
- An IAM OIDC provider associated with the cluster (the IRSA prerequisite — see the Amazon EKS IRSA documentation).
- Permission to create an IAM role and configure IAM Roles for Service Accounts (IRSA).
- Worker nodes whose IAM role can read from Amazon ECR (included by default in
managed EKS node groups). Both
x86_64andarm64(AWS Graviton) nodes are supported; the Marketplace images are multi-architecture.
Step 1: Subscribe
Subscribe to NES for Ingress NGINX in AWS Marketplace. The subscription entitles your AWS account to pull the chart and images from the Marketplace registry and to run metered pods.
Step 2: Configure IAM Roles for Service Accounts (IRSA)
The controller pod must be able to call aws-marketplace:RegisterUsage. On EKS
this must be done with IAM Roles for Service Accounts (IRSA).
IRSA is required: Pod Identity is not supported
AWS Marketplace metering does not support EKS Pod Identity, the node instance role, or long-term access keys. The controller's Kubernetes service account must assume an IAM role via IRSA, or the controller will exit at startup.
Create an IAM role for the controller's service account and attach a policy that
grants RegisterUsage. The simplest option is the AWS managed policy
AWSMarketplaceMeteringRegisterUsage. An inline policy also works:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "aws-marketplace:RegisterUsage",
"Resource": "*"
}
]
}
AWSMarketplaceMeteringFullAccess is not enough
The AWS managed policy AWSMarketplaceMeteringFullAccess grants MeterUsage
but not RegisterUsage. Use AWSMarketplaceMeteringRegisterUsage or a
policy that grants aws-marketplace:RegisterUsage explicitly, as shown above.
AWS Marketplace Metering also does not support resource-level ARNs, so this permission requires "Resource": "*".
Associate the role with the service account using eksctl, the AWS console, or
your infrastructure-as-code tooling. The role ARN goes in the install values
below.
Step 3: Install the Helm chart
Follow the product Usage Instructions to install the chart from the AWS Marketplace registry. Authenticate Helm to the registry, then install the chart; the chart pulls every image from Marketplace ECR, so there is no external registry and no pull secret. Pass your IRSA role through the controller service account:
# config.yaml
serviceAccount:
create: true
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/<IRSA_ROLE>
aws ecr get-login-password --region us-east-1 \
| helm registry login --username AWS --password-stdin 709825985650.dkr.ecr.us-east-1.amazonaws.com
helm install ingress-nginx \
oci://709825985650.dkr.ecr.us-east-1.amazonaws.com/herodevs/ingress-nginx \
--version <chart-version> \
-n ingress-nginx --create-namespace \
-f config.yaml
The Marketplace registry lives in us-east-1 regardless of the region your
cluster runs in, so the helm registry login always targets us-east-1. Your
EKS cluster can run in any AWS Region.
Use the exact chart reference and version from the product Usage Instructions.
Customize the deployment through config.yaml as usual: replica count, resources,
ingressClassName, service annotations, and other supported chart values.
Migrating an existing ingress-nginx release
If you are replacing an existing upstream or NES-registry ingress-nginx Helm
release, your ingress rules, annotations, and values carry over unchanged —
export them as described in
Migrate an existing ingress-nginx Helm release to NES.
Before reusing a values file on the Marketplace chart, remove any
controller.image.* overrides and any imagePullSecrets: the Marketplace chart
already points at the Marketplace registry, and a leftover HeroDevs or upstream
image reference or pull secret will break the deployment.
Step 4: Verify
Confirm the controller pods are running and Ready:
kubectl get pods -n ingress-nginx
kubectl describe deployment ingress-nginx-controller -n ingress-nginx
On success, the controller logs aws-marketplace: entitlement verified and
continues normal startup. Usage charges appear in AWS Billing and Cost Management,
but billing data is not updated in real time.
Troubleshooting
If the AWS account has no active subscription, or IRSA is misconfigured, the controller cannot
verify entitlement and exits during startup. Kubernetes then restarts the pod until the problem is
resolved. Check the pod logs for a message prefixed aws-marketplace::
| Log message contains | Cause | Fix |
|---|---|---|
CustomerNotEntitled | The cluster's AWS account has no active subscription to the product | Subscribe in AWS Marketplace (or renew), then let the pod restart |
cannot load AWS config or AssumeRoleWithWebIdentity | The service account is missing the IRSA role annotation, or the role's trust policy does not match it | Verify the eks.amazonaws.com/role-arn annotation and the role's trust policy |
AccessDenied | The IAM role lacks aws-marketplace:RegisterUsage | Attach AWSMarketplaceMeteringRegisterUsage or the inline policy from Step 2 |
PlatformNotSupported | The image is running outside Amazon EKS | Marketplace images run only on EKS; use the NES registry elsewhere |
Throttling | Transient AWS API throttling | None; the AWS SDK retries and the pod registers on restart |
Upgrading
HeroDevs ships CVE patches and maintenance updates as new chart and image versions in the Marketplace registry — watch the release notes. To upgrade, authenticate Helm to the Marketplace registry as in Step 3, then upgrade the release in place with the new chart version from the product Usage Instructions:
helm upgrade ingress-nginx \
oci://709825985650.dkr.ecr.us-east-1.amazonaws.com/herodevs/ingress-nginx \
--version <new-chart-version> \
-n ingress-nginx \
-f config.yaml
Your ingress rules, annotations, and config.yaml values are preserved across
upgrades. The controller rolls out with the deployment's update strategy, and
metering follows the running pods automatically.
Uninstalling
Remove the release to stop the controller and the metering:
helm uninstall ingress-nginx -n ingress-nginx
Unsubscribing does not stop billing
Billing is driven by running pods, not by the subscription. Cancelling the AWS Marketplace subscription does not stop charges while controller pods are still running — uninstall the release (or scale the controller to zero) to stop metering.
License and support
NES for Ingress NGINX is provided under the NES license terms in the Subscription Agreement. Supported Kubernetes versions, testing and validation, security posture, and customer obligations are described in the Support Policy.
AWS Marketplace subscribers receive the same NES support as direct customers. Contact support@herodevs.com for help with usage, troubleshooting, or billing.