Skip to main content
Reference material for AWS clusters - the self-managed k3s or kubeadm lane on EC2. Amazon EKS is covered by the managed Kubernetes reference.
Closed beta. Self-managed AWS clusters are in closed beta and enabled per organisation on request; until then the aws cluster endpoints answer 404 and the commands are not served. Contact support to have it turned on for your organisation.

Cluster Configuration Options

POST /api/v1/clusters/aws answers {"cluster_id", "name", "kind": "aws", "state": "creating", "operation_id"}; track the operation to see provisioning progress.

Node groups

Each entry of node_groups:

Egress modes

Nodes never receive a public IP, so every private subnet must route 0.0.0.0/0 somewhere. Ankra never mixes modes on one cluster. Omitted, it resolves to nat_gateway for a created VPC. For an adopted VPC preflight resolves it: subnets with egress select existing; empty subnets without it select bastion_nat; subnets without egress that hold foreign instances are refused with a message naming them.

What Ankra creates

Everything Ankra creates carries three tags, and the credential’s write permissions are conditioned on them: Teardown deletes everything in this table that carries the cluster’s tags, the created network included (NAT gateways and their Elastic IPs, route tables, subnets, internet gateway, VPC), in reverse order. A stop keeps the network and its NAT gateways, which keep billing. In an adopted VPC, never created, modified or deleted: your VPC, subnets, internet gateway, NAT gateways, DHCP options set, and any route table Ankra did not create. In bastion_nat mode the node subnets’ association is moved to the Ankra route table and moved back at teardown; the route tables themselves are untouched.

IMDS guard

The hop limit of 3 on control planes is compensated by the IMDS guard: a cluster-wide network policy in the AWS cloud-provider stack that denies pod egress to 169.254.169.254 for every pod except the EBS CSI controller. It is rendered for Cilium and Calico. Flannel has no policy engine, so on a flannel cluster the guard is not installed, the create result reports imds_guard: unavailable, and a pod scheduled onto a control-plane node can reach the control-plane instance role - prefer Cilium (the default) or keep the control planes tainted.

Catalogs

Every catalog loads live from your credential - ankra cluster aws regions, vpcs, subnets, availability-zones, instance-types, images and pricing, or the endpoints in the catalog API. The tables below are orientation, not the offer.

Regions

Any region your credential can DescribeRegions is offered; opt-in regions appear once enabled in your account.

Instance types

Only amd64 types are offered. Prices are per region and per hour; ankra cluster aws pricing and the wizard show the live figure.
Burstable t3 types spend CPU credits under sustained load; use m6i/c6i/r6i for a control plane or workers that run flat out. ankra cluster aws instance-types lists what the region offers, with vCPUs, memory, architecture and network performance.

Images

The AMI ID is resolved from these public SSM parameters in the target region at create time, so every cluster boots the current stable image of its series. The images catalog (ankra cluster aws images, GET /api/v1/clusters/aws/images) answers ubuntu_series, architectures and default_series, and lists only the series whose AMI resolves in that region.

Limits


Catalog API

Every catalog takes credential_id and region as query parameters (subnets also takes vpc_id), and every answer is three-state: a value Ankra could not read says so rather than reading as empty or zero.

Cluster API

Node Group API Reference

Control Plane API

Node Actions API

See Restarting, Diagnosing and Repairing a Node and Bastion health and resize for usage examples.

Credential API

The bearer-token twins of the AWS credential onboarding, for scripts and the CLI. Connecting a credential from the dashboard is documented on AWS Credentials. Creating a cluster needs a keys credential, or a role credential whose scope is provisioning (the AnkraProvisioning role, which covers EKS and self-managed clusters) or self_managed (the EC2-only AnkraSelfManagedProvisioning role); a cost-scoped role is refused. The CLI wraps the three: ankra credentials aws onboarding [--scope cost|provisioning|self_managed] prints the external ID, trust principal, launch-stack URL and the follow-up command; ankra credentials aws create-role --name <name> --role-arn <arn> --external-id <id> [--region <region>] [--scope <scope>] stores the role; ankra credentials aws create-keys --name <name> --access-key-id <id> [--region <region>] stores access keys, asking for the secret on a masked prompt (never a flag); ankra credentials aws list shows what is connected.