> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ECS

> AWS ECS. Schedules containers defined by task definitions onto EC2 or Fargate capacity, grouped in a cluster where each service holds a desired task count.

**On this page**

* [Coverage by target cloud](#coverage-by-target-cloud)
* [How the targets compare](#how-the-targets-compare)
  * [Max adaptation](#max-adaptation)
  * [Infrastructure-only adaptation](#infrastructure-only-adaptation)
* [On Google Cloud](#on-google-cloud)
* [On Azure](#on-azure)
* [On OCI](#on-oci)
* [On Private Kubernetes](#on-private-kubernetes)

## Coverage by target cloud

| Target             | Available |
| ------------------ | --------- |
| Google Cloud       | ✓         |
| Azure              | ✓         |
| OCI                | ✓         |
| Private Kubernetes | ✓         |

## How the targets compare

Each row compares a capability of ECS with its adaptation on each target.
A dash means this row is not stated for that target.

### Max adaptation

| Capability                                                             | ECS                                              | Google Cloud                                                                                                                                                     | Azure                                                                                                                                              | OCI                                                                                                                                                      | Private Kubernetes                                                                                                                                      |
| ---------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cluster · ECS cluster → GKE cluster / namespace                        | ECS cluster + capacity providers                 | a regional GKE Standard cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (Google operates the control plane and nodes) | -                                                                                                                                                  | -                                                                                                                                                        | -                                                                                                                                                       |
| Workload configuration · desired count → replicas                      | always-on ECS service                            | Deployment replicas = desiredCount, continuously running; the DAEMON strategy → a DaemonSet                                                                      | Deployment replicas = desiredCount, continuously running; the DAEMON strategy → a DaemonSet                                                        | Deployment replicas = desiredCount, continuously running; the DAEMON strategy → a DaemonSet                                                              | Deployment replicas = desiredCount, continuously running (no scale-to-zero unless KEDA / Knative)                                                       |
| Compute sizing · Fargate cpu/mem → requests/limits                     | Fargate \{0.25 … 16 vCPU} with tied memory bands | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                                            | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                              | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                                    | -                                                                                                                                                       |
| Networking (awsvpc) · per-task ENI → per-Pod IP                        | awsvpc: a routable IP + security group per task  | a per-Pod IP (VPC-native) + NetworkPolicy: individually addressable, with network isolation between pods                                                         | a per-Pod IP (Azure CNI) + NetworkPolicy: individually addressable, with network isolation between pods                                            | a per-Pod IP (VCN-native, OCI\_VCN\_IP\_NATIVE) + NetworkPolicy: individually addressable, with network isolation between pods                           | -                                                                                                                                                       |
| Service Connect mesh · namespace mesh + metrics                        | Yes - injected proxy, aliases, metrics           | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                                | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                  | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                        | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                       |
| DAEMON strategy · one copy per host                                    | Yes - DAEMON scheduling strategy                 | Yes - a DaemonSet, one Pod per node                                                                                                                              | Yes - a DaemonSet, one Pod per node                                                                                                                | Yes - a DaemonSet, one Pod per node                                                                                                                      | Yes - a DaemonSet, one Pod per node                                                                                                                     |
| ECS Exec · shell into a task                                           | Yes - SSM interactive shell                      | Yes - kubectl exec into the Pod                                                                                                                                  | Yes - kubectl exec into the Pod                                                                                                                    | Yes - kubectl exec into the Pod                                                                                                                          | Yes - kubectl exec into the Pod                                                                                                                         |
| Workload identity (task role → WI) · keyless binding                   | Yes - taskRoleArn                                | Yes - GKE Workload Identity: keyless, a compile-time service-account binding                                                                                     | Yes - Azure Workload Identity, keyless                                                                                                             | -                                                                                                                                                        | -                                                                                                                                                       |
| Load balancing · service LB block → Service + Ingress                  | ALB / NLB target group                           | a Service (LoadBalancer) plus Ingress / Gateway (see the load-balancer service adapter pages)                                                                    | a Service (LoadBalancer) plus Ingress / Application Gateway (see the load-balancer service adapter pages)                                          | a Service (LoadBalancer) plus Ingress / Gateway (see the load-balancer service adapter pages)                                                            | a Service (LoadBalancer / ClusterIP) plus Ingress (see the load-balancer service adapter pages)                                                         |
| Secrets / logging · secrets → Secret Manager · awslogs → Cloud Logging | secrets, awslogs                                 | Google Secret Manager / External Secrets, Cloud Logging                                                                                                          | -                                                                                                                                                  | -                                                                                                                                                        | -                                                                                                                                                       |
| API coverage                                                           | full                                             | high                                                                                                                                                             | high                                                                                                                                               | high                                                                                                                                                     | high                                                                                                                                                    |
| Cluster · ECS cluster → AKS cluster / namespace                        | ECS cluster + capacity providers                 | -                                                                                                                                                                | an AKS cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (Microsoft operates the control plane and nodes) | -                                                                                                                                                        | -                                                                                                                                                       |
| Secrets / logging · secrets → Key Vault · awslogs → Log Analytics      | secrets, awslogs                                 | -                                                                                                                                                                | Azure Key Vault / External Secrets, Azure Monitor / Log Analytics                                                                                  | -                                                                                                                                                        | -                                                                                                                                                       |
| Cluster · ECS cluster → OKE cluster / namespace                        | ECS cluster + capacity providers                 | -                                                                                                                                                                | -                                                                                                                                                  | an enhanced OKE cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (Oracle operates the control plane and nodes) | -                                                                                                                                                       |
| Workload identity (task role → WI) · OCI-native analog                 | Yes - taskRoleArn                                | -                                                                                                                                                                | -                                                                                                                                                  | Partial - OKE Workload Identity, the OCI-native analog: IAM policies selecting a workload principal by cluster, namespace and service account            | -                                                                                                                                                       |
| Secrets / logging · secrets → OCI Vault · awslogs → OCI Logging        | secrets, awslogs                                 | -                                                                                                                                                                | -                                                                                                                                                  | OCI Vault / External Secrets, OCI Logging                                                                                                                | -                                                                                                                                                       |
| Cluster · ECS cluster → k8s cluster / namespace                        | ECS cluster + capacity providers                 | -                                                                                                                                                                | -                                                                                                                                                  | -                                                                                                                                                        | the cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (the target cluster owns the nodes)                      |
| Compute sizing · Fargate cpu/mem → requests/limits                     | Fargate \{0.25 … 16 vCPU}                        | -                                                                                                                                                                | -                                                                                                                                                  | -                                                                                                                                                        | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                                   |
| Autoscaling · Application Auto Scaling → HPA                           | target-tracking on CPU / memory / custom         | -                                                                                                                                                                | -                                                                                                                                                  | -                                                                                                                                                        | HorizontalPodAutoscaler on CPU / memory / custom, the closest faithful analog                                                                           |
| Identity / secrets / logging · task role → ServiceAccount + RBAC       | task role, secrets, awslogs                      | -                                                                                                                                                                | -                                                                                                                                                  | -                                                                                                                                                        | native Kubernetes ServiceAccount + RBAC (you own identity; no cloud workload-identity binding), k8s Secrets / External Secrets, the cluster's log stack |

### Infrastructure-only adaptation

| Capability                                                             | ECS                                              | Google Cloud                                                                                                                                                     | Azure                                                                                                                                              | OCI                                                                                                                                                      |
| ---------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cluster · ECS cluster → GKE cluster / namespace                        | ECS cluster + capacity providers                 | a regional GKE Standard cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (Google operates the control plane and nodes) | -                                                                                                                                                  | -                                                                                                                                                        |
| Workload configuration · desired count → replicas                      | always-on ECS service                            | Deployment replicas = desiredCount, continuously running; the DAEMON strategy → a DaemonSet                                                                      | Deployment replicas = desiredCount, continuously running; the DAEMON strategy → a DaemonSet                                                        | Deployment replicas = desiredCount, continuously running; the DAEMON strategy → a DaemonSet                                                              |
| Compute sizing · Fargate cpu/mem → requests/limits                     | Fargate \{0.25 … 16 vCPU} with tied memory bands | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                                            | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                              | Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                                                    |
| Networking (awsvpc) · per-task ENI → per-Pod IP                        | awsvpc: a routable IP + security group per task  | a per-Pod IP (VPC-native) + NetworkPolicy: individually addressable, with network isolation between pods                                                         | a per-Pod IP (Azure CNI) + NetworkPolicy: individually addressable, with network isolation between pods                                            | a per-Pod IP (VCN-native, OCI\_VCN\_IP\_NATIVE) + NetworkPolicy: individually addressable, with network isolation between pods                           |
| Service Connect mesh · namespace mesh + metrics                        | Yes - injected proxy, aliases, metrics           | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                                | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                  | Partial - a Service gives discovery; a service mesh (Istio / Linkerd) gives the proxy and metrics                                                        |
| DAEMON strategy · one copy per host                                    | Yes - DAEMON scheduling strategy                 | Yes - a DaemonSet, one Pod per node                                                                                                                              | Yes - a DaemonSet, one Pod per node                                                                                                                | Yes - a DaemonSet, one Pod per node                                                                                                                      |
| ECS Exec · shell into a task                                           | Yes - SSM interactive shell                      | Yes - kubectl exec into the Pod                                                                                                                                  | Yes - kubectl exec into the Pod                                                                                                                    | Yes - kubectl exec into the Pod                                                                                                                          |
| Workload identity (task role → WI) · keyless binding                   | Yes - taskRoleArn                                | Yes - GKE Workload Identity: keyless, a compile-time service-account binding                                                                                     | Yes - Azure Workload Identity, keyless                                                                                                             | -                                                                                                                                                        |
| Load balancing · service LB block → Service + Ingress                  | ALB / NLB target group                           | a Service (LoadBalancer) plus Ingress / Gateway (see the load-balancer service adapter pages)                                                                    | a Service (LoadBalancer) plus Ingress / Application Gateway (see the load-balancer service adapter pages)                                          | a Service (LoadBalancer) plus Ingress / Gateway (see the load-balancer service adapter pages)                                                            |
| Secrets / logging · secrets → Secret Manager · awslogs → Cloud Logging | secrets, awslogs                                 | Google Secret Manager / External Secrets, Cloud Logging                                                                                                          | -                                                                                                                                                  | -                                                                                                                                                        |
| API coverage                                                           | full                                             | high                                                                                                                                                             | high                                                                                                                                               | high                                                                                                                                                     |
| Cluster · ECS cluster → AKS cluster / namespace                        | ECS cluster + capacity providers                 | -                                                                                                                                                                | an AKS cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (Microsoft operates the control plane and nodes) | -                                                                                                                                                        |
| Secrets / logging · secrets → Key Vault · awslogs → Log Analytics      | secrets, awslogs                                 | -                                                                                                                                                                | Azure Key Vault / External Secrets, Azure Monitor / Log Analytics                                                                                  | -                                                                                                                                                        |
| Cluster · ECS cluster → OKE cluster / namespace                        | ECS cluster + capacity providers                 | -                                                                                                                                                                | -                                                                                                                                                  | an enhanced OKE cluster or a namespace; capacity providers → the cluster's node pools / cluster-autoscaler (Oracle operates the control plane and nodes) |
| Workload identity (task role → WI) · OCI-native analog                 | Yes - taskRoleArn                                | -                                                                                                                                                                | -                                                                                                                                                  | Partial - OKE Workload Identity, the OCI-native analog: IAM policies selecting a workload principal by cluster, namespace and service account            |
| Secrets / logging · secrets → OCI Vault · awslogs → OCI Logging        | secrets, awslogs                                 | -                                                                                                                                                                | -                                                                                                                                                  | OCI Vault / External Secrets, OCI Logging                                                                                                                |

## On Google Cloud

| Operation                                         | Area            | Support      | Depth        | Notes                                                                                                                                                          |
| ------------------------------------------------- | --------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Capacity providers / FARGATE\_SPOT                | Cluster         | Out of scope | Full surface | the cluster owns capacity via its node pools; FARGATE\_SPOT maps to a spot / preemptible node pool                                                             |
| Identity: task role                               | Identity        | Supported    | Common       | taskRoleArn → GKE Workload Identity, a keyless compile-time service-account binding; the execution role is not needed                                          |
| Secrets and environment                           | Identity        | Supported    | Common       | environment variables are set as-is; secrets map to Google Secret Manager                                                                                      |
| Load balancer: service LB block                   | Load balancer   | Supported    | Common       | ALB / NLB target group → a Service (type=LoadBalancer) plus Ingress / Gateway; See the load-balancer adapter pages for individual routing-rule support.        |
| Logging: awslogs                                  | Logging         | Supported    | Common       | awslogs → Cloud Logging; a FireLens sidecar stays a logging sidecar                                                                                            |
| Networking: awsvpc (per-task IP + security group) | Networking      | Supported    | Common       | per-task ENI + security group → per-Pod IP (VPC-native) + NetworkPolicy: individually addressable, with network isolation between pods                         |
| Networking: service discovery / Service Connect   | Networking      | Partial      | Most usage   | a Service + cluster DNS gives discovery natively; the injected mesh proxy and its metrics need an added service mesh (Istio / Linkerd)                         |
| ECS Exec                                          | Runtime         | Supported    | Most usage   | ECS Exec's interactive shell → kubectl exec into the Pod                                                                                                       |
| Task-metadata endpoint (runtime)                  | Runtime         | Supported    | Common       | 169.254.170.2 / ECS\_CONTAINER\_METADATA\_URI\_V4 served read-only, the ECS task-metadata API                                                                  |
| Scheduling: DAEMON strategy                       | Service         | Supported    | Full surface | one copy per host → a DaemonSet, one Pod per node                                                                                                              |
| Service: autoscaling                              | Service         | Supported    | Most usage   | Application Auto Scaling → a HorizontalPodAutoscaler on CPU / memory / custom                                                                                  |
| Service: deployment controller                    | Service         | Partial      | Most usage   | rolling update is native (maxSurge / maxUnavailable); weighted blue-green / canary requires release-management tooling (Gateway API / Argo Rollouts / Flagger) |
| Service: desired count                            | Service         | Supported    | Common       | desiredCount → Deployment desired replicas; ready count depends on scheduling and health                                                                       |
| Task definition: containers / sidecars            | Task definition | Supported    | Common       | multi-container task → a Pod with a main container plus sidecars, native                                                                                       |
| Task definition: cpu / memory                     | Task definition | Supported    | Common       | Fargate \{0.25 … 16 vCPU} with tied memory bands → Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations       |
| Task definition: image                            | Task definition | Supported    | Common       | Copies the container image to your registry during the build.                                                                                                  |

#### How it works

On AWS your service runs as an **ECS service**: a task definition describes the container image and its sizing, and the service keeps a desired number of copies running on Fargate behind a load balancer. Tensor9 reads that task definition and service and, at the build, turns them into native Kubernetes on **GKE**: a **Deployment** (or a **DaemonSet** for the DAEMON strategy) plus a **Service**, on a regional GKE Standard control plane that Google operates. Kubernetes schedules the same container image.

After deployment, clients reach your container through the target load balancer or cluster DNS. Tensor9 translates the stack during the build and does not proxy application traffic.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBHb29nbGUgQ2xvdWQgdGhlIHNhbWUgaW1hZ2UgcnVucyBhcyBhIG5hdGl2ZSBHS0UgRGVwbG95bWVudCAob3IgYSBEYWVtb25TZXQpIHBsdXMgYSBTZXJ2aWNlLCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQgYW5kIHJlYWNoZWQgYnkgR29vZ2xlJ3Mgb3duIGxvYWQgYmFsYW5jZXIuIFRlbnNvcjkgaXMgbm90IGluIHRoZSBzZXJ2aWNlJ3MgdHJhZmZpYyBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlZ2tlLWh3IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMzIiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODYiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5Zb3VyIGltYWdlPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Y29udGFpbmVyPC90ZXh0Pgo8bGluZSB4MT0iMTE0IiB5MT0iMTE2IiB4Mj0iMTQ2IiB5Mj0iMTE2IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlZ2tlLWh3KSIvPgo8cmVjdCB4PSIxNDgiIHk9Ijg2IiB3aWR0aD0iMTE0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjA1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5FQ1Mgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iMjA1IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5vbiBGYXJnYXRlPC90ZXh0Pgo8bGluZSB4MT0iMjYyIiB5MT0iMTE2IiB4Mj0iMjkwIiB5Mj0iMTE2IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlZ2tlLWh3KSIvPgo8cmVjdCB4PSIyOTIiIHk9Ijg2IiB3aWR0aD0iNzAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIzMjciIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5BTEI8L3RleHQ+Cjx0ZXh0IHg9IjMyNyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dHJhZmZpYzwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIzNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5jb21waWxlZCBhdCB0aGUgYnVpbGQ8L3RleHQ+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTMyIiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5PTiBHT09HTEUgQ0xPVUQgwrcgR0tFPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9IjgwIiB3aWR0aD0iODAiIGhlaWdodD0iNTYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MTYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPlNhbWUgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjUxNiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjU1NiIgeTE9IjEwOCIgeDI9IjU4NCIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS1odykiLz4KPHJlY3QgeD0iNTg4IiB5PSI4MCIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY2MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+TmF0aXZlIHdvcmtsb2FkPC90ZXh0Pgo8dGV4dCB4PSI2NjIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+RGVwbG95bWVudCBvciBEYWVtb25TZXQ8L3RleHQ+CjxsaW5lIHgxPSI3MzYiIHkxPSIxMDgiIHgyPSI3NjIiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vna2UtaHcpIi8+CjxyZWN0IHg9Ijc2NiIgeT0iODAiIHdpZHRoPSI1MiIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc5MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwcHgiPkdvb2dsZTwvdGV4dD4KPHRleHQgeD0iNzkyIiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5MQjwvdGV4dD4KPHRleHQgeD0iNjQzIiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+dGhlIGFkYXB0ZXIgaXMgbm90IGluIHRoaXMgcGF0aDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on Google Cloud the same image runs as a native GKE Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by Google's own load balancer. Tensor9 is not in the service's traffic path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBHb29nbGUgQ2xvdWQgdGhlIHNhbWUgaW1hZ2UgcnVucyBhcyBhIG5hdGl2ZSBHS0UgRGVwbG95bWVudCAob3IgYSBEYWVtb25TZXQpIHBsdXMgYSBTZXJ2aWNlLCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQgYW5kIHJlYWNoZWQgYnkgR29vZ2xlJ3Mgb3duIGxvYWQgYmFsYW5jZXIuIFRlbnNvcjkgaXMgbm90IGluIHRoZSBzZXJ2aWNlJ3MgdHJhZmZpYyBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlZ2tlLWh3IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMzIiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijg2IiB3aWR0aD0iODQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3MiIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+WW91ciBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNzIiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmNvbnRhaW5lcjwvdGV4dD4KPGxpbmUgeDE9IjExNCIgeTE9IjExNiIgeDI9IjE0NiIgeTI9IjExNiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS1odykiLz4KPHJlY3QgeD0iMTQ4IiB5PSI4NiIgd2lkdGg9IjExNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwNSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+RUNTIHNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjIwNSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+b24gRmFyZ2F0ZTwvdGV4dD4KPGxpbmUgeDE9IjI2MiIgeTE9IjExNiIgeDI9IjI5MCIgeTI9IjExNiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS1odykiLz4KPHJlY3QgeD0iMjkyIiB5PSI4NiIgd2lkdGg9IjcwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMzI3IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTFweCI+QUxCPC90ZXh0Pgo8dGV4dCB4PSIzMjciIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnRyYWZmaWM8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+Y29tcGlsZWQgYXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEzMiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPk9OIEdPT0dMRSBDTE9VRCDCtyBHS0U8L3RleHQ+CjxyZWN0IHg9IjQ3NiIgeT0iODAiIHdpZHRoPSI4MCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUxNiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+U2FtZSBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNTE2IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+dW5jaGFuZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNTU2IiB5MT0iMTA4IiB4Mj0iNTg0IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlZ2tlLWh3KSIvPgo8cmVjdCB4PSI1ODgiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjYyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5OYXRpdmUgd29ya2xvYWQ8L3RleHQ+Cjx0ZXh0IHg9IjY2MiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5EZXBsb3ltZW50IG9yIERhZW1vblNldDwvdGV4dD4KPGxpbmUgeDE9IjczNiIgeTE9IjEwOCIgeDI9Ijc2MiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS1odykiLz4KPHJlY3QgeD0iNzY2IiB5PSI4MCIgd2lkdGg9IjUyIiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzkyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTBweCI+R29vZ2xlPC90ZXh0Pgo8dGV4dCB4PSI3OTIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkxCPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj50aGUgYWRhcHRlciBpcyBub3QgaW4gdGhpcyBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on Google Cloud the same image runs as a native GKE Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by Google's own load balancer. Tensor9 is not in the service's traffic path." />
</div>

<p className="t9-caption">Your task definition and service are compiled into native Kubernetes on GKE at the build; afterward Google's own load balancer and runtime carry every request.</p>

#### The task definition and service

A **task definition** describes a main container and any helper containers (sidecars). Tensor9 translates them into a multi-container **Pod** and copies the image to your registry during the build. Fargate expresses compute as a CPU value in \{0.25 … 16} vCPU with tied memory bands; on GKE that becomes Pod `requests` and `limits`, which are not restricted to Fargate's fixed size combinations. Requested resources must fit node capacity, scheduler rules and quota.

An ECS service keeps a **desired count** of tasks always on. That maps directly to a Deployment's `replicas`, the desired replica count, not a guaranteed number of ready pods; scale-to-zero is not the default and is added only if you want it. **Application Auto Scaling** becomes a **HorizontalPodAutoscaler** on CPU, memory, or a custom metric, and a rolling update maps to the Deployment's own `RollingUpdate` with `maxSurge` and `maxUnavailable`. For other ECS operations, the **DAEMON** strategy becomes a **DaemonSet** (one Pod per node), and **ECS Exec** becomes `kubectl exec` into the Pod.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlZ2tlLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMwNTk2NjkiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OSI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1NjkiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIEdLRTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlZ2tlLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMyMGY3YjQiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIEdLRTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />
</div>

<p className="t9-caption">The task definition becomes a Pod spec and the service becomes a Deployment: containers and sizing land as requests and limits, desiredCount sets replicas, the DAEMON strategy becomes a DaemonSet, and ECS Exec becomes kubectl exec.</p>

#### Networking, discovery, and load balancing

ECS's **awsvpc** mode gives each task its own routable IP and security group. A **VPC-native** GKE cluster offers the same model: every Pod gets its own individually-addressable IP, and a per-task security group maps to a **NetworkPolicy** (enforced by GKE Dataplane V2) to preserve network isolation between tasks. **Service discovery** by name, whether Cloud Map or DNS, is repointed at the build to a Kubernetes **Service** with cluster DNS, which is exactly ECS's name-based model.

The service's `loadBalancer` block (the ALB or NLB target group its tasks register into) becomes a Kubernetes **Service** of type LoadBalancer (which provisions Google Cloud Load Balancing) plus an **Ingress** or a Gateway for host and path routing, with the target-group health check becoming the Pod's readiness probe. For supported routing rules, weights and certificates, see the [Application Load Balancer](/service-adapters/aws/networking-traffic/application-load-balancer) and [Network Load Balancer](/service-adapters/aws/networking-traffic/network-load-balancer) articles. This page places the Pod fleet behind that load balancer. For **ECS Service Connect**, a Service gives you name-based discovery, but Service Connect's injected mesh proxy and its built-in metrics are partial and need an added service mesh (Istio or Linkerd), which you configure separately.

#### The GKE control plane

This mapping selects a regional **GKE Standard** cluster: Google operates the control plane, and you configure node pools. **Autopilot** is a native alternative, not the selected adapter mapping; Google sizes its nodes and its workload billing model differs. On Standard, configured **node auto-provisioning** creates and resizes node pools to fit pending Pod requests, so an ECS **capacity provider** maps to that node-pool and cluster-autoscaler layer, and a `FARGATE_SPOT` preference maps to a spot (preemptible) node pool. Node upgrades and control-plane patching are Google's to run.

GKE offers **managed integrations** that you enable and configure for the translated ECS workload; they are not all installed by selecting this adapter. The managed **GKE Gateway controller** implements the Gateway API with weighted routes, so a weighted blue-green or canary split has a managed path rather than a hand-rolled one (automated canary analysis still uses Argo Rollouts or Flagger). Managed Service for Prometheus collects metrics, including a service mesh's when you add one for Service Connect; **Config Connector** lets the cluster manage Google Cloud resources as Kubernetes objects; **Backup for GKE** covers workload and volume backup; and the Compute Engine, Filestore, and Cloud Storage **CSI drivers** back any volumes your task declares. Identity uses GKE Workload Identity, covered in the next section.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUyIiB2aWV3Qm94PSIwIDAgODM2IDI1MiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgR0tFIGNvbnRyb2wgcGxhbmUsIG9wZXJhdGVkIGJ5IEdvb2dsZS4gUmVnaW9uYWwgR0tFIFN0YW5kYXJkIGlzIHNlbGVjdGVkIGZvciB0aGlzIG1hcHBpbmc7IHlvdSBjb25maWd1cmUgbm9kZSBwb29scy4gTmF0aXZlIEF1dG9waWxvdCBpcyBhbiBhbHRlcm5hdGl2ZSB3aGVyZSBHb29nbGUgc2l6ZXMgbm9kZXMsIG5vdCB0aGUgc2VsZWN0ZWQgbWFwcGluZy4gTm9kZSBhdXRvLXByb3Zpc2lvbmluZyBhbmQgbWFuYWdlZCBpbnRlZ3JhdGlvbnMgcmVxdWlyZSBjb25maWd1cmF0aW9uOiB0aGUgR0tFIEdhdGV3YXkgY29udHJvbGxlciBmb3IgR2F0ZXdheSBBUEksIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cywgQ29uZmlnIENvbm5lY3RvciwgQmFja3VwIGZvciBHS0UsIGFuZCB0aGUgQ29tcHV0ZSBFbmdpbmUsIEZpbGVzdG9yZSwgYW5kIENsb3VkIFN0b3JhZ2UgQ1NJIGRyaXZlcnMuIENhcGFjaXR5IHByb3ZpZGVycyBtYXAgdG8gbm9kZSBwb29scyBhbmQgRmFyZ2F0ZSBTcG90IHRvIGEgc3BvdCBub2RlIHBvb2wuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MCIgcng9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+R0tFIENPTlRST0wgUExBTkUgwrcgR09PR0xFLU9QRVJBVEVEIChSRUdJT05BTCk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI1OCIgd2lkdGg9IjI1MCIgaGVpZ2h0PSIzMCIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMTU1IiB5PSI3NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExcHgiPkF1dG9waWxvdCDCtyBuYXRpdmUgYWx0ZXJuYXRpdmU8L3RleHQ+CjxyZWN0IHg9IjI5MiIgeT0iNTgiIHdpZHRoPSIyNzAiIGhlaWdodD0iMzAiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjQyNyIgeT0iNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMXB4Ij5TdGFuZGFyZCDCtyBzZWxlY3RlZCBtYXBwaW5nPC90ZXh0Pgo8cmVjdCB4PSI1NzQiIHk9IjU4IiB3aWR0aD0iMjMyIiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI2OTAiIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTFweCI+Y29uZmlndXJlIG5vZGUgcG9vbHMgLyBhdXRvc2NhbGluZzwvdGV4dD4KPHRleHQgeD0iMjgiIHk9IjEyMiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+TUFOQUdFRCBJTlRFR1JBVElPTlMgwrcgQ09ORklHVVJFIEFTIE5FRURFRDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMTQ4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5HS0UgR2F0ZXdheSBjb250cm9sbGVyPC90ZXh0Pgo8dGV4dCB4PSIxNDgiIHk9IjE2NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkdhdGV3YXkgQVBJIMK3IHdlaWdodGVkIHJvdXRlczwvdGV4dD4KPHJlY3QgeD0iMjg4IiB5PSIxMzIiIHdpZHRoPSIyNTYiIGhlaWdodD0iNDAiIHJ4PSI5IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjQxNiIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+TWFuYWdlZCBTZXJ2aWNlIGZvciBQcm9tZXRoZXVzPC90ZXh0Pgo8dGV4dCB4PSI0MTYiIHk9IjE2NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm1ldHJpY3MgY29sbGVjdGlvbjwvdGV4dD4KPHJlY3QgeD0iNTU2IiB5PSIxMzIiIHdpZHRoPSIyNTYiIGhlaWdodD0iNDAiIHJ4PSI5IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjY4NCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+Q29uZmlnIENvbm5lY3RvcjwvdGV4dD4KPHRleHQgeD0iNjg0IiB5PSIxNjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5HQ1AgcmVzb3VyY2VzIGFzIEs4cyBvYmplY3RzPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMTgwIiB3aWR0aD0iMzg4IiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyMTQiIHk9IjE5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMC41cHgiPkJhY2t1cCBmb3IgR0tFPC90ZXh0Pgo8dGV4dCB4PSIyMTQiIHk9IjIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPndvcmtsb2FkIGFuZCB2b2x1bWUgYmFja3VwPC90ZXh0Pgo8cmVjdCB4PSI0MjAiIHk9IjE4MCIgd2lkdGg9IjM5MiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNjE2IiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5DU0kgZHJpdmVyczogUGVyc2lzdGVudCBEaXNrIMK3IEZpbGVzdG9yZSDCtyBDbG91ZCBTdG9yYWdlPC90ZXh0Pgo8dGV4dCB4PSI2MTYiIHk9IjIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm1hbmFnZWQgc3RvcmFnZSBjbGFzc2VzPC90ZXh0Pgo8dGV4dCB4PSIyOCIgeT0iMjQyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojOTRhM2I4Ij5DYXBhY2l0eSBwcm92aWRlcnMg4oaSIG5vZGUgcG9vbHMgLyBjbHVzdGVyLWF1dG9zY2FsZXIgwrcgRkFSR0FURV9TUE9UIOKGkiBhIHNwb3QgLyBwcmVlbXB0aWJsZSBub2RlIHBvb2w8L3RleHQ+Cjwvc3ZnPg==" alt="The GKE control plane, operated by Google. Regional GKE Standard is selected for this mapping; you configure node pools. Native Autopilot is an alternative where Google sizes nodes, not the selected mapping. Node auto-provisioning and managed integrations require configuration: the GKE Gateway controller for Gateway API, Managed Service for Prometheus, Config Connector, Backup for GKE, and the Compute Engine, Filestore, and Cloud Storage CSI drivers. Capacity providers map to node pools and Fargate Spot to a spot node pool." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUyIiB2aWV3Qm94PSIwIDAgODM2IDI1MiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgR0tFIGNvbnRyb2wgcGxhbmUsIG9wZXJhdGVkIGJ5IEdvb2dsZS4gUmVnaW9uYWwgR0tFIFN0YW5kYXJkIGlzIHNlbGVjdGVkIGZvciB0aGlzIG1hcHBpbmc7IHlvdSBjb25maWd1cmUgbm9kZSBwb29scy4gTmF0aXZlIEF1dG9waWxvdCBpcyBhbiBhbHRlcm5hdGl2ZSB3aGVyZSBHb29nbGUgc2l6ZXMgbm9kZXMsIG5vdCB0aGUgc2VsZWN0ZWQgbWFwcGluZy4gTm9kZSBhdXRvLXByb3Zpc2lvbmluZyBhbmQgbWFuYWdlZCBpbnRlZ3JhdGlvbnMgcmVxdWlyZSBjb25maWd1cmF0aW9uOiB0aGUgR0tFIEdhdGV3YXkgY29udHJvbGxlciBmb3IgR2F0ZXdheSBBUEksIE1hbmFnZWQgU2VydmljZSBmb3IgUHJvbWV0aGV1cywgQ29uZmlnIENvbm5lY3RvciwgQmFja3VwIGZvciBHS0UsIGFuZCB0aGUgQ29tcHV0ZSBFbmdpbmUsIEZpbGVzdG9yZSwgYW5kIENsb3VkIFN0b3JhZ2UgQ1NJIGRyaXZlcnMuIENhcGFjaXR5IHByb3ZpZGVycyBtYXAgdG8gbm9kZSBwb29scyBhbmQgRmFyZ2F0ZSBTcG90IHRvIGEgc3BvdCBub2RlIHBvb2wuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MCIgcng9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkdLRSBDT05UUk9MIFBMQU5FIMK3IEdPT0dMRS1PUEVSQVRFRCAoUkVHSU9OQUwpPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNTgiIHdpZHRoPSIyNTAiIGhlaWdodD0iMzAiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjE1NSIgeT0iNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMXB4Ij5BdXRvcGlsb3QgwrcgbmF0aXZlIGFsdGVybmF0aXZlPC90ZXh0Pgo8cmVjdCB4PSIyOTIiIHk9IjU4IiB3aWR0aD0iMjcwIiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI0MjciIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTFweCI+U3RhbmRhcmQgwrcgc2VsZWN0ZWQgbWFwcGluZzwvdGV4dD4KPHJlY3QgeD0iNTc0IiB5PSI1OCIgd2lkdGg9IjIzMiIgaGVpZ2h0PSIzMCIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNjkwIiB5PSI3NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExcHgiPmNvbmZpZ3VyZSBub2RlIHBvb2xzIC8gYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjI4IiB5PSIxMjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5NQU5BR0VEIElOVEVHUkFUSU9OUyDCtyBDT05GSUdVUkUgQVMgTkVFREVEPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIxNDgiIHk9IjE1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPkdLRSBHYXRld2F5IGNvbnRyb2xsZXI8L3RleHQ+Cjx0ZXh0IHg9IjE0OCIgeT0iMTY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+R2F0ZXdheSBBUEkgwrcgd2VpZ2h0ZWQgcm91dGVzPC90ZXh0Pgo8cmVjdCB4PSIyODgiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDE2IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTAuNXB4Ij5NYW5hZ2VkIFNlcnZpY2UgZm9yIFByb21ldGhldXM8L3RleHQ+Cjx0ZXh0IHg9IjQxNiIgeT0iMTY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bWV0cmljcyBjb2xsZWN0aW9uPC90ZXh0Pgo8cmVjdCB4PSI1NTYiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNjg0IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTAuNXB4Ij5Db25maWcgQ29ubmVjdG9yPC90ZXh0Pgo8dGV4dCB4PSI2ODQiIHk9IjE2NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkdDUCByZXNvdXJjZXMgYXMgSzhzIG9iamVjdHM8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSIxODAiIHdpZHRoPSIzODgiIGhlaWdodD0iNDAiIHJ4PSI5IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjIxNCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEwLjVweCI+QmFja3VwIGZvciBHS0U8L3RleHQ+Cjx0ZXh0IHg9IjIxNCIgeT0iMjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+d29ya2xvYWQgYW5kIHZvbHVtZSBiYWNrdXA8L3RleHQ+CjxyZWN0IHg9IjQyMCIgeT0iMTgwIiB3aWR0aD0iMzkyIiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI2MTYiIHk9IjE5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPkNTSSBkcml2ZXJzOiBQZXJzaXN0ZW50IERpc2sgwrcgRmlsZXN0b3JlIMK3IENsb3VkIFN0b3JhZ2U8L3RleHQ+Cjx0ZXh0IHg9IjYxNiIgeT0iMjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bWFuYWdlZCBzdG9yYWdlIGNsYXNzZXM8L3RleHQ+Cjx0ZXh0IHg9IjI4IiB5PSIyNDIiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjOTRhM2I4Ij5DYXBhY2l0eSBwcm92aWRlcnMg4oaSIG5vZGUgcG9vbHMgLyBjbHVzdGVyLWF1dG9zY2FsZXIgwrcgRkFSR0FURV9TUE9UIOKGkiBhIHNwb3QgLyBwcmVlbXB0aWJsZSBub2RlIHBvb2w8L3RleHQ+Cjwvc3ZnPg==" alt="The GKE control plane, operated by Google. Regional GKE Standard is selected for this mapping; you configure node pools. Native Autopilot is an alternative where Google sizes nodes, not the selected mapping. Node auto-provisioning and managed integrations require configuration: the GKE Gateway controller for Gateway API, Managed Service for Prometheus, Config Connector, Backup for GKE, and the Compute Engine, Filestore, and Cloud Storage CSI drivers. Capacity providers map to node pools and Fargate Spot to a spot node pool." />
</div>

<p className="t9-caption">The selected mapping uses regional GKE Standard and configured node pools. Autopilot is a native alternative. Gateway routing, monitoring, resource controllers, backups and storage drivers require the corresponding integration settings.</p>

#### Pod identity: the task role

An ECS task's **task role** is the same idea as EKS's IRSA: the identity the app's own code assumes, delivered as scoped cloud credentials with no static secret. On Kubernetes that shape is a **ServiceAccount federated to a cloud identity through the cluster's OIDC provider**, and on GKE that provider is **GKE Workload Identity**, which binds a Kubernetes ServiceAccount to a **Google service account** through the cluster's workload-identity pool (an IAM binding plus the `iam.gke.io/gcp-service-account` annotation), with the Pod reading its credentials from the **GKE metadata server**, no key to mount or rotate.

The AWS role and the Google identity stay consistent through a startup check: at boot the appliance fetches the Pod's real GKE workload identity and checks that the declared AWS task role is bound to it, failing closed if it does not. Inside the appliance the IAM surface then **reflects** that identity, so `aws sts get-caller-identity` and `iam:GetRole` answer as the task's own role, and calls to other AWS services use the Tensor9 adapters with that role. The **execution role** (the one ECS itself used to pull the image, fetch secrets, and write logs) is not needed, because GKE owns image pull and log delivery with its own identity.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBFQ1MgdGFzayByb2xlIGlzIHRoZSBzYW1lIGlkZWEgYXMgRUtTIElSU0E6IGEgS3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudCBmZWRlcmF0ZWQgdG8gYSBjbG91ZCBpZGVudGl0eSB0aHJvdWdoIHRoZSBjbHVzdGVyJ3MgT0lEQyBwcm92aWRlciwgc28gdGhlIHBvZCBnZXRzIHNjb3BlZCBjbG91ZCBjcmVkZW50aWFscyB3aXRoIG5vIHN0YXRpYyBzZWNyZXQuIE9uIEdLRSB0aGUgU2VydmljZUFjY291bnQgaXMgYm91bmQgdG8gYSBHb29nbGUgc2VydmljZSBhY2NvdW50IHRocm91Z2ggdGhlIGNsdXN0ZXIncyB3b3JrbG9hZC1pZGVudGl0eSBwb29sLCBhbmQgdGhlIHBvZCByZWFkcyBpdHMgY3JlZGVudGlhbHMgZnJvbSB0aGUgR0tFIG1ldGFkYXRhIHNlcnZlciwga2V5bGVzcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZWdrZS1pZCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjYiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxMTQiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkVDUyB0YXNrIHJvbGU8L3RleHQ+Cjx0ZXh0IHg9IjExNCIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmb250LXNpemU6MTBweDtmaWxsOiMzMzQxNTUiPnRhc2tSb2xlQXJuPC90ZXh0Pgo8dGV4dCB4PSIxMTQiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnRoZSBhcHAncyBvd24gaWRlbnRpdHk8L3RleHQ+CjxsaW5lIHgxPSIyMDgiIHkxPSI3NyIgeDI9IjI1MCIgeTI9Ijc3IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlZ2tlLWlkKSIvPgo8cmVjdCB4PSIyNTQiIHk9IjQ0IiB3aWR0aD0iMjE0IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMzYxIiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5LdWJlcm5ldGVzIFNlcnZpY2VBY2NvdW50PC90ZXh0Pgo8dGV4dCB4PSIzNjEiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Ym91bmQgdmlhIHRoZSB3b3JrbG9hZC1pZGVudGl0eSBwb29sPC90ZXh0Pgo8dGV4dCB4PSIzNjEiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmlhbS5na2UuaW8vZ2NwLXNlcnZpY2UtYWNjb3VudDwvdGV4dD4KPGxpbmUgeDE9IjQ2OCIgeTE9Ijc3IiB4Mj0iNTEwIiB5Mj0iNzciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vna2UtaWQpIi8+CjxyZWN0IHg9IjUxNCIgeT0iNDAiIHdpZHRoPSIzMDIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NjUiIHk9IjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+YSBHb29nbGUgc2VydmljZSBhY2NvdW50PC90ZXh0Pgo8dGV4dCB4PSI2NjUiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5zY29wZWQgY3JlZHMgZnJvbSB0aGUgR0tFIG1ldGFkYXRhIHNlcnZlcjwvdGV4dD4KPHRleHQgeD0iNjY1IiB5PSIxMDMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmtleWxlc3Mgwrcgbm8gc3RhdGljIHNlY3JldDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5UaGUgRUNTIHRhc2sgcm9sZSBpcyB0aGUgRUtTLUlSU0EgaWRlYTogYSBTZXJ2aWNlQWNjb3VudCBmZWRlcmF0ZWQgdG8gYSBjbG91ZCBpZGVudGl0eSB0aHJvdWdoIHRoZSBjbHVzdGVyJ3MgT0lEQyBwcm92aWRlci48L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+TmF0aXZlIGNsb3VkIGFjY2VzczsgQVdTIGNyZWRlbnRpYWxzIHVzZSB0aGUgaWRlbnRpdHkgYWRhcHRlci48L3RleHQ+Cjwvc3ZnPg==" alt="An ECS task role is the same idea as EKS IRSA: a Kubernetes ServiceAccount federated to a cloud identity through the cluster's OIDC provider, so the pod gets scoped cloud credentials with no static secret. On GKE the ServiceAccount is bound to a Google service account through the cluster's workload-identity pool, and the pod reads its credentials from the GKE metadata server, keyless." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBFQ1MgdGFzayByb2xlIGlzIHRoZSBzYW1lIGlkZWEgYXMgRUtTIElSU0E6IGEgS3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudCBmZWRlcmF0ZWQgdG8gYSBjbG91ZCBpZGVudGl0eSB0aHJvdWdoIHRoZSBjbHVzdGVyJ3MgT0lEQyBwcm92aWRlciwgc28gdGhlIHBvZCBnZXRzIHNjb3BlZCBjbG91ZCBjcmVkZW50aWFscyB3aXRoIG5vIHN0YXRpYyBzZWNyZXQuIE9uIEdLRSB0aGUgU2VydmljZUFjY291bnQgaXMgYm91bmQgdG8gYSBHb29nbGUgc2VydmljZSBhY2NvdW50IHRocm91Z2ggdGhlIGNsdXN0ZXIncyB3b3JrbG9hZC1pZGVudGl0eSBwb29sLCBhbmQgdGhlIHBvZCByZWFkcyBpdHMgY3JlZGVudGlhbHMgZnJvbSB0aGUgR0tFIG1ldGFkYXRhIHNlcnZlciwga2V5bGVzcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZWdrZS1pZCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjYiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxMTQiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkVDUyB0YXNrIHJvbGU8L3RleHQ+Cjx0ZXh0IHg9IjExNCIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6MTBweDtmaWxsOiAjYzljZmQ4Ij50YXNrUm9sZUFybjwvdGV4dD4KPHRleHQgeD0iMTE0IiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij50aGUgYXBwJ3Mgb3duIGlkZW50aXR5PC90ZXh0Pgo8bGluZSB4MT0iMjA4IiB5MT0iNzciIHgyPSIyNTAiIHkyPSI3NyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWdrZS1pZCkiLz4KPHJlY3QgeD0iMjU0IiB5PSI0NCIgd2lkdGg9IjIxNCIgaGVpZ2h0PSI2NiIgcng9IjEyIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjM2MSIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTFweCI+S3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudDwvdGV4dD4KPHRleHQgeD0iMzYxIiB5PSI5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmJvdW5kIHZpYSB0aGUgd29ya2xvYWQtaWRlbnRpdHkgcG9vbDwvdGV4dD4KPHRleHQgeD0iMzYxIiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5pYW0uZ2tlLmlvL2djcC1zZXJ2aWNlLWFjY291bnQ8L3RleHQ+CjxsaW5lIHgxPSI0NjgiIHkxPSI3NyIgeDI9IjUxMCIgeTI9Ijc3IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlZ2tlLWlkKSIvPgo8cmVjdCB4PSI1MTQiIHk9IjQwIiB3aWR0aD0iMzAyIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjY1IiB5PSI2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMS41cHgiPmEgR29vZ2xlIHNlcnZpY2UgYWNjb3VudDwvdGV4dD4KPHRleHQgeD0iNjY1IiB5PSI4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+c2NvcGVkIGNyZWRzIGZyb20gdGhlIEdLRSBtZXRhZGF0YSBzZXJ2ZXI8L3RleHQ+Cjx0ZXh0IHg9IjY2NSIgeT0iMTAzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5rZXlsZXNzIMK3IG5vIHN0YXRpYyBzZWNyZXQ8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+VGhlIEVDUyB0YXNrIHJvbGUgaXMgdGhlIEVLUy1JUlNBIGlkZWE6IGEgU2VydmljZUFjY291bnQgZmVkZXJhdGVkIHRvIGEgY2xvdWQgaWRlbnRpdHkgdGhyb3VnaCB0aGUgY2x1c3RlcidzIE9JREMgcHJvdmlkZXIuPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPk5hdGl2ZSBjbG91ZCBhY2Nlc3M7IEFXUyBjcmVkZW50aWFscyB1c2UgdGhlIGlkZW50aXR5IGFkYXB0ZXIuPC90ZXh0Pgo8L3N2Zz4=" alt="An ECS task role is the same idea as EKS IRSA: a Kubernetes ServiceAccount federated to a cloud identity through the cluster's OIDC provider, so the pod gets scoped cloud credentials with no static secret. On GKE the ServiceAccount is bound to a Google service account through the cluster's workload-identity pool, and the pod reads its credentials from the GKE metadata server, keyless." />
</div>

<p className="t9-caption">The task role is ECS's EKS-IRSA equivalent: a Kubernetes ServiceAccount federated to a Google service account through the cluster's workload-identity pool, so the pod gets scoped credentials from the metadata server with no static secret.</p>

#### AWS request authorization

The task role's AWS IAM policy supplies authorization rules for supported **AWS API** requests handled by Tensor9. The build prepares the declared rules, including supported action and resource wildcards. At runtime, the adapter evaluates the verified caller's role, requested action and resource; a denial overrides an allowance. Policy changes are delivered with integrity verification to the appliance.

Native Google Cloud permissions are granted separately to the Google service account. GKE Workload Identity supplies that identity; selecting it does not grant access to every Google resource or replace the AWS task-role policy.

#### Secrets and logging

The container's `environment` variables are kept as-is, and its `secrets` references resolve from **Google Secret Manager** (often via the External Secrets Operator), the same store the SSM equivalence uses. The `awslogs` log driver becomes **Cloud Logging**, with stdout and stderr delivered automatically; a custom FireLens log router can run as a sidecar; configure its destination and credentials for the target logging service.

#### Limitations

Review the remaining service, deployment and networking differences below.

△ Where it diverges

* **ECS Service Connect's mesh is partial:** a Service handles name-based discovery, but the injected mesh proxy and its built-in metrics need an added service mesh (Istio / Linkerd); its metrics can then flow into Managed Service for Prometheus.
* **Weighted blue-green or canary releases require extra tooling:** a plain rolling update is native; weighted traffic splitting is handled by the managed GKE Gateway controller (Gateway API), and automated canary analysis uses Argo Rollouts or Flagger.
* **Capacity providers and Fargate Spot are the cluster's own:** the cluster owns capacity via its node pools, so a capacity-provider strategy maps to node pools / node auto-provisioning and a Spot preference to a spot (preemptible) node pool.
* **The task-metadata endpoint is served read-only.** `169.254.170.2` (`ECS_CONTAINER_METADATA_URI_V4`), the ECS task-metadata API, is served read-only; other AWS calls use their corresponding adapters.

#### Other considerations

Plan persistent storage, cluster capacity, logging, and secret access before deployment.

* **Migrate mounted volumes separately:** a task definition and service hold no data, and the image is already a container image pulled into your own registry at the build, so adoption is a redeploy; any volume a task mounts (EFS, EBS) moves under its own service card.
* **Plan node-pool capacity.** ECS on Fargate exposed no nodes, but on Google Cloud the workload lands on a GKE cluster whose selected Standard node pools require capacity planning, while Google operates and patches the control plane.
* **Costs include continuously running nodes.** `desiredCount` becomes always-on replicas billed as running nodes in the selected GKE Standard deployment, so capacity is sized for steady state rather than metered per Fargate task.
* **Telemetry and secrets move to Google Cloud's stores:** logs land in Cloud Logging and `secrets` resolve from Google Secret Manager, so dashboards, alerts, and secret access follow the target services.

#### Runtime task execution

The runtime ECS adapter accepts task-definition and task-lifecycle calls from the AWS SDK. It translates supported task definitions into Kubernetes workload configuration and maps RunTask, DescribeTasks, ListTasks and StopTask to the corresponding task state and execution. Registering a definition does not start its containers; a task can be pending while images are pulled or capacity is unavailable. Check task status and container exit information separately from API acceptance.

Service deployment, scaling, task execution and workload credentials are distinct concerns. The target cluster schedules and runs the containers. The selected identity integration must provide credentials for calls made by those containers; a Kubernetes ServiceAccount does not by itself supply AWS credentials. Review task and service features against their specific rows, including network policy, Service Connect, storage and execution settings.

## On Azure

| Operation                                         | Area            | Support      | Depth        | Notes                                                                                                                                                          |
| ------------------------------------------------- | --------------- | ------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Capacity providers / FARGATE\_SPOT                | Cluster         | Out of scope | Full surface | the cluster owns capacity via its node pools; FARGATE\_SPOT maps to a Spot node pool                                                                           |
| Identity: task role                               | Identity        | Supported    | Common       | taskRoleArn → Azure Workload Identity (a per-workload user-assigned managed identity + federated credential), keyless; the execution role is not needed        |
| Secrets and environment                           | Identity        | Supported    | Common       | environment variables are set as-is; secrets map to Azure Key Vault                                                                                            |
| Load balancer: service LB block                   | Load balancer   | Supported    | Common       | ALB / NLB target group → a Service (type=LoadBalancer) plus Ingress / Gateway; See the load-balancer adapter pages for individual routing-rule support.        |
| Logging: awslogs                                  | Logging         | Supported    | Common       | awslogs → Azure Monitor / Log Analytics; a FireLens sidecar stays a logging sidecar                                                                            |
| Networking: awsvpc (per-task IP + security group) | Networking      | Supported    | Common       | per-task ENI + security group → per-Pod IP (Azure CNI) + NetworkPolicy: individually addressable, with network isolation between pods                          |
| Networking: service discovery / Service Connect   | Networking      | Partial      | Most usage   | a Service + cluster DNS gives discovery natively; the injected mesh proxy and its metrics need an added service mesh (Istio / Linkerd)                         |
| ECS Exec                                          | Runtime         | Supported    | Most usage   | ECS Exec's interactive shell → kubectl exec into the Pod                                                                                                       |
| Task-metadata endpoint (runtime)                  | Runtime         | Supported    | Common       | 169.254.170.2 / ECS\_CONTAINER\_METADATA\_URI\_V4 served read-only, the ECS task-metadata API                                                                  |
| Scheduling: DAEMON strategy                       | Service         | Supported    | Full surface | one copy per host → a DaemonSet, one Pod per node                                                                                                              |
| Service: autoscaling                              | Service         | Supported    | Most usage   | Application Auto Scaling → a HorizontalPodAutoscaler on CPU / memory / custom                                                                                  |
| Service: deployment controller                    | Service         | Partial      | Most usage   | rolling update is native (maxSurge / maxUnavailable); weighted blue-green / canary requires release-management tooling (Gateway API / Argo Rollouts / Flagger) |
| Service: desired count                            | Service         | Supported    | Common       | desiredCount → Deployment desired replicas; ready count depends on scheduling and health                                                                       |
| Task definition: containers / sidecars            | Task definition | Supported    | Common       | multi-container task → a Pod with a main container plus sidecars, native                                                                                       |
| Task definition: cpu / memory                     | Task definition | Supported    | Common       | Fargate \{0.25 … 16 vCPU} with tied memory bands → Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations       |
| Task definition: image                            | Task definition | Supported    | Common       | Copies the container image to your registry during the build.                                                                                                  |

#### How it works

On AWS your service runs as an **ECS service**: a task definition describes the container image and its sizing, and the service keeps a desired number of copies running on Fargate behind a load balancer. Tensor9 reads that task definition and service and, at the build, turns them into native Kubernetes on **AKS**: a **Deployment** (or a **DaemonSet** for the DAEMON strategy) plus a **Service**, on a control plane that Microsoft operates. Kubernetes schedules the same container image.

After deployment, clients reach your container through the target load balancer or cluster DNS. Tensor9 translates the stack during the build and does not proxy application traffic.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBBenVyZSB0aGUgc2FtZSBpbWFnZSBydW5zIGFzIGEgbmF0aXZlIEFLUyBEZXBsb3ltZW50IChvciBhIERhZW1vblNldCkgcGx1cyBhIFNlcnZpY2UsIHByb3Zpc2lvbmVkIGF0IHRoZSBidWlsZCBhbmQgcmVhY2hlZCBieSBBenVyZSdzIG93biBsb2FkIGJhbGFuY2VyLiBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgc2VydmljZSdzIHRyYWZmaWMgcGF0aC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZWFrcy1odyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTMyIiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijg2IiB3aWR0aD0iODQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3MiIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+WW91ciBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNzIiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmNvbnRhaW5lcjwvdGV4dD4KPGxpbmUgeDE9IjExNCIgeTE9IjExNiIgeDI9IjE0NiIgeTI9IjExNiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy1odykiLz4KPHJlY3QgeD0iMTQ4IiB5PSI4NiIgd2lkdGg9IjExNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwNSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+RUNTIHNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjIwNSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+b24gRmFyZ2F0ZTwvdGV4dD4KPGxpbmUgeDE9IjI2MiIgeTE9IjExNiIgeDI9IjI5MCIgeTI9IjExNiIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy1odykiLz4KPHJlY3QgeD0iMjkyIiB5PSI4NiIgd2lkdGg9IjcwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMzI3IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTFweCI+QUxCPC90ZXh0Pgo8dGV4dCB4PSIzMjciIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnRyYWZmaWM8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+Y29tcGlsZWQgYXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEzMiIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gQVpVUkUgwrcgQUtTPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9IjgwIiB3aWR0aD0iODAiIGhlaWdodD0iNTYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MTYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPlNhbWUgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjUxNiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjU1NiIgeTE9IjEwOCIgeDI9IjU4NCIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy1odykiLz4KPHJlY3QgeD0iNTg4IiB5PSI4MCIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY2MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+TmF0aXZlIHdvcmtsb2FkPC90ZXh0Pgo8dGV4dCB4PSI2NjIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+RGVwbG95bWVudCBvciBEYWVtb25TZXQ8L3RleHQ+CjxsaW5lIHgxPSI3MzYiIHkxPSIxMDgiIHgyPSI3NjIiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vha3MtaHcpIi8+CjxyZWN0IHg9Ijc2NiIgeT0iODAiIHdpZHRoPSI1MiIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc5MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwcHgiPkF6dXJlPC90ZXh0Pgo8dGV4dCB4PSI3OTIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkxCPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj50aGUgYWRhcHRlciBpcyBub3QgaW4gdGhpcyBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on Azure the same image runs as a native AKS Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by Azure's own load balancer. Tensor9 is not in the service's traffic path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBBenVyZSB0aGUgc2FtZSBpbWFnZSBydW5zIGFzIGEgbmF0aXZlIEFLUyBEZXBsb3ltZW50IChvciBhIERhZW1vblNldCkgcGx1cyBhIFNlcnZpY2UsIHByb3Zpc2lvbmVkIGF0IHRoZSBidWlsZCBhbmQgcmVhY2hlZCBieSBBenVyZSdzIG93biBsb2FkIGJhbGFuY2VyLiBUZW5zb3I5IGlzIG5vdCBpbiB0aGUgc2VydmljZSdzIHRyYWZmaWMgcGF0aC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZWFrcy1odyIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIxNiIgeT0iNDYiIHdpZHRoPSIzNTgiIGhlaWdodD0iMTMyIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIzMCIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4NiIgd2lkdGg9Ijg0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzIiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMS41cHgiPllvdXIgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5jb250YWluZXI8L3RleHQ+CjxsaW5lIHgxPSIxMTQiIHkxPSIxMTYiIHgyPSIxNDYiIHkyPSIxMTYiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vha3MtaHcpIi8+CjxyZWN0IHg9IjE0OCIgeT0iODYiIHdpZHRoPSIxMTQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMDUiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMS41cHgiPkVDUyBzZXJ2aWNlPC90ZXh0Pgo8dGV4dCB4PSIyMDUiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm9uIEZhcmdhdGU8L3RleHQ+CjxsaW5lIHgxPSIyNjIiIHkxPSIxMTYiIHgyPSIyOTAiIHkyPSIxMTYiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vha3MtaHcpIi8+CjxyZWN0IHg9IjI5MiIgeT0iODYiIHdpZHRoPSI3MCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMyNyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkFMQjwvdGV4dD4KPHRleHQgeD0iMzI3IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij50cmFmZmljPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjM0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMzIiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBBWlVSRSDCtyBBS1M8L3RleHQ+CjxyZWN0IHg9IjQ3NiIgeT0iODAiIHdpZHRoPSI4MCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUxNiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+U2FtZSBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNTE2IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+dW5jaGFuZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNTU2IiB5MT0iMTA4IiB4Mj0iNTg0IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlYWtzLWh3KSIvPgo8cmVjdCB4PSI1ODgiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjYyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5OYXRpdmUgd29ya2xvYWQ8L3RleHQ+Cjx0ZXh0IHg9IjY2MiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5EZXBsb3ltZW50IG9yIERhZW1vblNldDwvdGV4dD4KPGxpbmUgeDE9IjczNiIgeTE9IjEwOCIgeDI9Ijc2MiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy1odykiLz4KPHJlY3QgeD0iNzY2IiB5PSI4MCIgd2lkdGg9IjUyIiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzkyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTBweCI+QXp1cmU8L3RleHQ+Cjx0ZXh0IHg9Ijc5MiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+TEI8L3RleHQ+Cjx0ZXh0IHg9IjY0MyIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPnRoZSBhZGFwdGVyIGlzIG5vdCBpbiB0aGlzIHBhdGg8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on Azure the same image runs as a native AKS Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by Azure's own load balancer. Tensor9 is not in the service's traffic path." />
</div>

<p className="t9-caption">Your task definition and service are compiled into native Kubernetes on AKS at the build; afterward Azure's own load balancer and runtime carry every request.</p>

#### The task definition and service

A **task definition** describes a main container and any helper containers (sidecars). Tensor9 translates them into a multi-container **Pod** and copies the image to your registry during the build. Fargate expresses compute as a CPU value in \{0.25 … 16} vCPU with tied memory bands; on AKS that becomes Pod `requests` and `limits`, which are not restricted to Fargate's fixed size combinations. Requested resources must fit node capacity, scheduler rules and quota.

An ECS service keeps a **desired count** of tasks always on. That maps directly to a Deployment's `replicas`, the desired replica count, not a guaranteed number of ready pods; scale-to-zero is not the default and is added only if you want it (AKS ships a managed way to, covered below). **Application Auto Scaling** becomes a **HorizontalPodAutoscaler** on CPU, memory, or a custom metric, and a rolling update maps to the Deployment's own `RollingUpdate` with `maxSurge` and `maxUnavailable`. For other ECS operations, the **DAEMON** strategy becomes a **DaemonSet** (one Pod per node), and **ECS Exec** becomes `kubectl exec` into the Pod.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlYWtzLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMwNTk2NjkiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OSI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1NjkiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIEFLUzwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlYWtzLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMyMGY3YjQiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIEFLUzwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />
</div>

<p className="t9-caption">The task definition becomes a Pod spec and the service becomes a Deployment: containers and sizing become requests and limits, desiredCount becomes replicas, the DAEMON strategy becomes a DaemonSet, and ECS Exec becomes kubectl exec.</p>

#### Networking, discovery, and load balancing

ECS's **awsvpc** mode gives each task its own routable IP and security group. On AKS **Azure CNI** provides the same natively: every Pod gets its own individually-addressable VNet IP, and a per-task security group maps to a **NetworkPolicy** to preserve network isolation between tasks. **Service discovery** by name, whether Cloud Map or DNS, is repointed at the build to a Kubernetes **Service** with cluster DNS, which is exactly ECS's name-based model.

The service's `loadBalancer` block (the ALB or NLB target group its tasks register into) becomes a Kubernetes **Service** of type LoadBalancer (which provisions an Azure Load Balancer) plus an **Ingress** for host and path routing, with the target-group health check becoming the Pod's readiness probe. For supported routing rules, weights and certificates, see the [Application Load Balancer](/service-adapters/aws/networking-traffic/application-load-balancer) and [Network Load Balancer](/service-adapters/aws/networking-traffic/network-load-balancer) articles. This page places the Pod fleet behind that load balancer. For **ECS Service Connect**, a Service provides name-based discovery, but Service Connect's injected mesh proxy and its built-in metrics are partial and need an added service mesh (Istio or Linkerd), surfaced rather than silently skipped.

#### The AKS control plane

Microsoft operates the control plane, and nodes come as **system and user node pools** of different VM sizes with a cluster autoscaler; a capacity provider maps to that node-pool layer, and a `FARGATE_SPOT` preference maps to a **Spot node pool**. Node image upgrades and control-plane patching are Microsoft's to run.

Beyond fixed nodes, AKS can burst Pods onto **virtual nodes** backed by **Azure Container Instances**, a serverless capacity tier with the same elastic, pay-per-pod character as the origin's own on-demand compute.

AKS offers **managed add-ons and cluster extensions**. The managed KEDA addon adds scale-to-zero and event-driven autoscaling as a managed option; the **Application Routing** addon provides a managed NGINX ingress for the Service-plus-Ingress mapping; the **Azure Key Vault Provider for Secrets Store CSI Driver** mounts Key Vault secrets into Pods; and **Container Insights** is the managed Azure Monitor path for container logs and metrics. As cluster extensions, **Dapr**, **GitOps with Flux**, and Azure Policy are available too. Identity federates to Microsoft Entra Workload ID, covered in the next section.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUyIiB2aWV3Qm94PSIwIDAgODM2IDI1MiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgQUtTIGNvbnRyb2wgcGxhbmUsIG9wZXJhdGVkIGJ5IE1pY3Jvc29mdC4gTm9kZXMgY29tZSBhcyBzeXN0ZW0gYW5kIHVzZXIgbm9kZSBwb29scyBvZiBkaWZmZXJlbnQgVk0gc2l6ZXMsIHdpdGggYSBjbHVzdGVyIGF1dG9zY2FsZXIsIGFuZCBQb2RzIGNhbiBidXJzdCBvbnRvIHZpcnR1YWwgbm9kZXMgYmFja2VkIGJ5IEF6dXJlIENvbnRhaW5lciBJbnN0YW5jZXMuIFRoZSBjb250cm9sIHBsYW5lIHNoaXBzIG1hbmFnZWQgYWRkb25zIGFuZCBjbHVzdGVyIGV4dGVuc2lvbnM6IHRoZSBtYW5hZ2VkIEtFREEgYWRkb24gZm9yIGV2ZW50LWRyaXZlbiBhdXRvc2NhbGluZywgdGhlIEFwcGxpY2F0aW9uIFJvdXRpbmcgbWFuYWdlZCBpbmdyZXNzLCB0aGUgQXp1cmUgS2V5IFZhdWx0IFNlY3JldHMgU3RvcmUgQ1NJIGFkZG9uLCBDb250YWluZXIgSW5zaWdodHMsIERhcHIsIEdpdE9wcyB3aXRoIEZsdXgsIGFuZCBBenVyZSBQb2xpY3kuIENhcGFjaXR5IHByb3ZpZGVycyBtYXAgdG8gbm9kZSBwb29scyBhbmQgRmFyZ2F0ZSBTcG90IHRvIGEgU3BvdCBub2RlIHBvb2wuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MCIgcng9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+QUtTIENPTlRST0wgUExBTkUgwrcgTUlDUk9TT0ZULU9QRVJBVEVEPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNTgiIHdpZHRoPSIyMzgiIGhlaWdodD0iMzAiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjE0OSIgeT0iNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMXB4Ij5zeXN0ZW0gKyB1c2VyIG5vZGUgcG9vbHM8L3RleHQ+CjxyZWN0IHg9IjI4MCIgeT0iNTgiIHdpZHRoPSIyMzgiIGhlaWdodD0iMzAiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjM5OSIgeT0iNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMXB4Ij5jbHVzdGVyIGF1dG9zY2FsZXI8L3RleHQ+CjxyZWN0IHg9IjUzMCIgeT0iNTgiIHdpZHRoPSIyNzYiIGhlaWdodD0iMzAiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjY2OCIgeT0iNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMXB4Ij52aXJ0dWFsIG5vZGVzIOKGkiBBenVyZSBDb250YWluZXIgSW5zdGFuY2VzPC90ZXh0Pgo8dGV4dCB4PSIyOCIgeT0iMTIyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5NQU5BR0VEIEFERE9OUyArIENMVVNURVIgRVhURU5TSU9OUzwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMTQ4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5tYW5hZ2VkIEtFREEgYWRkb248L3RleHQ+Cjx0ZXh0IHg9IjE0OCIgeT0iMTY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZXZlbnQtZHJpdmVuIGF1dG9zY2FsaW5nPC90ZXh0Pgo8cmVjdCB4PSIyODgiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDE2IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5BcHBsaWNhdGlvbiBSb3V0aW5nPC90ZXh0Pgo8dGV4dCB4PSI0MTYiIHk9IjE2NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm1hbmFnZWQgTkdJTlggaW5ncmVzczwvdGV4dD4KPHJlY3QgeD0iNTU2IiB5PSIxMzIiIHdpZHRoPSIyNTYiIGhlaWdodD0iNDAiIHJ4PSI5IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjY4NCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+S2V5IFZhdWx0IFNlY3JldHMgU3RvcmUgQ1NJPC90ZXh0Pgo8dGV4dCB4PSI2ODQiIHk9IjE2NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnNlY3JldHMgaW50byBQb2RzPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMTgwIiB3aWR0aD0iMzg4IiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIyMTQiIHk9IjE5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMC41cHgiPkNvbnRhaW5lciBJbnNpZ2h0czwvdGV4dD4KPHRleHQgeD0iMjE0IiB5PSIyMTMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5BenVyZSBNb25pdG9yIGZvciBjb250YWluZXJzPC90ZXh0Pgo8cmVjdCB4PSI0MjAiIHk9IjE4MCIgd2lkdGg9IjM5MiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNjE2IiB5PSIxOTgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5EYXByIMK3IEdpdE9wcyAoRmx1eCkgwrcgQXp1cmUgUG9saWN5PC90ZXh0Pgo8dGV4dCB4PSI2MTYiIHk9IjIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmNsdXN0ZXIgZXh0ZW5zaW9uczwvdGV4dD4KPHRleHQgeD0iMjgiIHk9IjI0MiIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6Izk0YTNiOCI+Q2FwYWNpdHkgcHJvdmlkZXJzIOKGkiBub2RlIHBvb2xzIC8gY2x1c3Rlci1hdXRvc2NhbGVyIMK3IEZBUkdBVEVfU1BPVCDihpIgYSBTcG90IG5vZGUgcG9vbDwvdGV4dD4KPC9zdmc+" alt="The AKS control plane, operated by Microsoft. Nodes come as system and user node pools of different VM sizes, with a cluster autoscaler, and Pods can burst onto virtual nodes backed by Azure Container Instances. The control plane ships managed addons and cluster extensions: the managed KEDA addon for event-driven autoscaling, the Application Routing managed ingress, the Azure Key Vault Secrets Store CSI addon, Container Insights, Dapr, GitOps with Flux, and Azure Policy. Capacity providers map to node pools and Fargate Spot to a Spot node pool." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjUyIiB2aWV3Qm94PSIwIDAgODM2IDI1MiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgQUtTIGNvbnRyb2wgcGxhbmUsIG9wZXJhdGVkIGJ5IE1pY3Jvc29mdC4gTm9kZXMgY29tZSBhcyBzeXN0ZW0gYW5kIHVzZXIgbm9kZSBwb29scyBvZiBkaWZmZXJlbnQgVk0gc2l6ZXMsIHdpdGggYSBjbHVzdGVyIGF1dG9zY2FsZXIsIGFuZCBQb2RzIGNhbiBidXJzdCBvbnRvIHZpcnR1YWwgbm9kZXMgYmFja2VkIGJ5IEF6dXJlIENvbnRhaW5lciBJbnN0YW5jZXMuIFRoZSBjb250cm9sIHBsYW5lIHNoaXBzIG1hbmFnZWQgYWRkb25zIGFuZCBjbHVzdGVyIGV4dGVuc2lvbnM6IHRoZSBtYW5hZ2VkIEtFREEgYWRkb24gZm9yIGV2ZW50LWRyaXZlbiBhdXRvc2NhbGluZywgdGhlIEFwcGxpY2F0aW9uIFJvdXRpbmcgbWFuYWdlZCBpbmdyZXNzLCB0aGUgQXp1cmUgS2V5IFZhdWx0IFNlY3JldHMgU3RvcmUgQ1NJIGFkZG9uLCBDb250YWluZXIgSW5zaWdodHMsIERhcHIsIEdpdE9wcyB3aXRoIEZsdXgsIGFuZCBBenVyZSBQb2xpY3kuIENhcGFjaXR5IHByb3ZpZGVycyBtYXAgdG8gbm9kZSBwb29scyBhbmQgRmFyZ2F0ZSBTcG90IHRvIGEgU3BvdCBub2RlIHBvb2wuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MCIgcng9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkFLUyBDT05UUk9MIFBMQU5FIMK3IE1JQ1JPU09GVC1PUEVSQVRFRDwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjU4IiB3aWR0aD0iMjM4IiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIxNDkiIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTFweCI+c3lzdGVtICsgdXNlciBub2RlIHBvb2xzPC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9IjU4IiB3aWR0aD0iMjM4IiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIzOTkiIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTFweCI+Y2x1c3RlciBhdXRvc2NhbGVyPC90ZXh0Pgo8cmVjdCB4PSI1MzAiIHk9IjU4IiB3aWR0aD0iMjc2IiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI2NjgiIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTFweCI+dmlydHVhbCBub2RlcyDihpIgQXp1cmUgQ29udGFpbmVyIEluc3RhbmNlczwvdGV4dD4KPHRleHQgeD0iMjgiIHk9IjEyMiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPk1BTkFHRUQgQURET05TICsgQ0xVU1RFUiBFWFRFTlNJT05TPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMTMyIiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIxNDgiIHk9IjE1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPm1hbmFnZWQgS0VEQSBhZGRvbjwvdGV4dD4KPHRleHQgeD0iMTQ4IiB5PSIxNjUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5ldmVudC1kcml2ZW4gYXV0b3NjYWxpbmc8L3RleHQ+CjxyZWN0IHg9IjI4OCIgeT0iMTMyIiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0MTYiIHk9IjE1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPkFwcGxpY2F0aW9uIFJvdXRpbmc8L3RleHQ+Cjx0ZXh0IHg9IjQxNiIgeT0iMTY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bWFuYWdlZCBOR0lOWCBpbmdyZXNzPC90ZXh0Pgo8cmVjdCB4PSI1NTYiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MCIgcng9IjkiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNjg0IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTAuNXB4Ij5LZXkgVmF1bHQgU2VjcmV0cyBTdG9yZSBDU0k8L3RleHQ+Cjx0ZXh0IHg9IjY4NCIgeT0iMTY1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+c2VjcmV0cyBpbnRvIFBvZHM8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSIxODAiIHdpZHRoPSIzODgiIGhlaWdodD0iNDAiIHJ4PSI5IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjIxNCIgeT0iMTk4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEwLjVweCI+Q29udGFpbmVyIEluc2lnaHRzPC90ZXh0Pgo8dGV4dCB4PSIyMTQiIHk9IjIxMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkF6dXJlIE1vbml0b3IgZm9yIGNvbnRhaW5lcnM8L3RleHQ+CjxyZWN0IHg9IjQyMCIgeT0iMTgwIiB3aWR0aD0iMzkyIiBoZWlnaHQ9IjQwIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI2MTYiIHk9IjE5OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPkRhcHIgwrcgR2l0T3BzIChGbHV4KSDCtyBBenVyZSBQb2xpY3k8L3RleHQ+Cjx0ZXh0IHg9IjYxNiIgeT0iMjEzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Y2x1c3RlciBleHRlbnNpb25zPC90ZXh0Pgo8dGV4dCB4PSIyOCIgeT0iMjQyIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzk0YTNiOCI+Q2FwYWNpdHkgcHJvdmlkZXJzIOKGkiBub2RlIHBvb2xzIC8gY2x1c3Rlci1hdXRvc2NhbGVyIMK3IEZBUkdBVEVfU1BPVCDihpIgYSBTcG90IG5vZGUgcG9vbDwvdGV4dD4KPC9zdmc+" alt="The AKS control plane, operated by Microsoft. Nodes come as system and user node pools of different VM sizes, with a cluster autoscaler, and Pods can burst onto virtual nodes backed by Azure Container Instances. The control plane ships managed addons and cluster extensions: the managed KEDA addon for event-driven autoscaling, the Application Routing managed ingress, the Azure Key Vault Secrets Store CSI addon, Container Insights, Dapr, GitOps with Flux, and Azure Policy. Capacity providers map to node pools and Fargate Spot to a Spot node pool." />
</div>

<p className="t9-caption">AKS runs the control plane over system and user node pools, with virtual-node burst to a serverless capacity tier, and ships managed addons the ECS workload can use: managed KEDA, Application Routing, the Key Vault CSI addon, Container Insights, Dapr, Flux, and Azure Policy.</p>

#### Pod identity: the task role

An ECS task's **task role** is the same idea as EKS's IRSA: the identity the app's own code assumes, delivered as scoped cloud credentials with no static secret. On Kubernetes that shape is a **ServiceAccount federated to a cloud identity through the cluster's OIDC provider**, and on AKS that provider is **Microsoft Entra Workload ID**: the cluster's **AKS OIDC issuer** and a **federated identity credential** federate a Kubernetes ServiceAccount to a **user-assigned managed identity** (or an Entra app registration), the mutating admission webhook injects a token into the Pod, and the app exchanges it for a scoped Entra token, with no key to mount or rotate.

The AWS role and the Entra identity stay consistent through a startup check: at boot the appliance fetches the Pod's real AKS workload identity and checks that the declared AWS task role is bound to it, failing closed if it does not. Inside the appliance the IAM surface then **reflects** that identity, so `aws sts get-caller-identity` and `iam:GetRole` answer as the task's own role, and calls to other AWS services use the Tensor9 adapters with that role. The **execution role** (the one ECS itself used to pull the image, fetch secrets, and write logs) is not needed, because AKS owns image pull and log delivery with its own identity.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBFQ1MgdGFzayByb2xlIGlzIHRoZSBzYW1lIGlkZWEgYXMgRUtTIElSU0E6IGEgS3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudCBmZWRlcmF0ZWQgdG8gYSBjbG91ZCBpZGVudGl0eSB0aHJvdWdoIHRoZSBjbHVzdGVyJ3MgT0lEQyBwcm92aWRlciwgc28gdGhlIHBvZCBnZXRzIHNjb3BlZCBjbG91ZCBjcmVkZW50aWFscyB3aXRoIG5vIHN0YXRpYyBzZWNyZXQuIE9uIEFLUyB0aGUgU2VydmljZUFjY291bnQgaXMgZmVkZXJhdGVkIHRvIGEgTWljcm9zb2Z0IEVudHJhIGlkZW50aXR5IChhIHVzZXItYXNzaWduZWQgbWFuYWdlZCBpZGVudGl0eSBvciBhcHAgcmVnaXN0cmF0aW9uKSB0aHJvdWdoIHRoZSBBS1MgT0lEQyBpc3N1ZXIgd2l0aCBhIGZlZGVyYXRlZCBpZGVudGl0eSBjcmVkZW50aWFsLCBhbmQgdGhlIHBvZCBleGNoYW5nZXMgaXRzIFNlcnZpY2VBY2NvdW50IHRva2VuIGZvciBhbiBFbnRyYSB0b2tlbiwga2V5bGVzcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZWFrcy1pZCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMDU5NjY5Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjYiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxMTQiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkVDUyB0YXNrIHJvbGU8L3RleHQ+Cjx0ZXh0IHg9IjExNCIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5OyBmb250LXNpemU6MTBweDtmaWxsOiMzMzQxNTUiPnRhc2tSb2xlQXJuPC90ZXh0Pgo8dGV4dCB4PSIxMTQiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnRoZSBhcHAncyBvd24gaWRlbnRpdHk8L3RleHQ+CjxsaW5lIHgxPSIyMDgiIHkxPSI3NyIgeDI9IjI1MCIgeTI9Ijc3IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlYWtzLWlkKSIvPgo8cmVjdCB4PSIyNTQiIHk9IjQ0IiB3aWR0aD0iMjE0IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiLz4KPHRleHQgeD0iMzYxIiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5LdWJlcm5ldGVzIFNlcnZpY2VBY2NvdW50PC90ZXh0Pgo8dGV4dCB4PSIzNjEiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZmVkZXJhdGVkIHZpYSB0aGUgQUtTIE9JREMgaXNzdWVyPC90ZXh0Pgo8dGV4dCB4PSIzNjEiIHk9IjEyMyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmZlZGVyYXRlZCBpZGVudGl0eSBjcmVkZW50aWFsPC90ZXh0Pgo8bGluZSB4MT0iNDY4IiB5MT0iNzciIHgyPSI1MTAiIHkyPSI3NyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy1pZCkiLz4KPHJlY3QgeD0iNTE0IiB5PSI0MCIgd2lkdGg9IjMwMiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY2NSIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5hIE1pY3Jvc29mdCBFbnRyYSBpZGVudGl0eTwvdGV4dD4KPHRleHQgeD0iNjY1IiB5PSI4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+dXNlci1hc3NpZ25lZCBtYW5hZ2VkIGlkZW50aXR5IG9yIGFwcDwvdGV4dD4KPHRleHQgeD0iNjY1IiB5PSIxMDMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmtleWxlc3Mgwrcgbm8gc3RhdGljIHNlY3JldDwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5UaGUgRUNTIHRhc2sgcm9sZSBpcyB0aGUgRUtTLUlSU0EgaWRlYTogYSBTZXJ2aWNlQWNjb3VudCBmZWRlcmF0ZWQgdG8gYSBjbG91ZCBpZGVudGl0eSB0aHJvdWdoIHRoZSBjbHVzdGVyJ3MgT0lEQyBwcm92aWRlci48L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+TmF0aXZlIGNsb3VkIGFjY2VzczsgQVdTIGNyZWRlbnRpYWxzIHVzZSB0aGUgaWRlbnRpdHkgYWRhcHRlci48L3RleHQ+Cjwvc3ZnPg==" alt="An ECS task role is the same idea as EKS IRSA: a Kubernetes ServiceAccount federated to a cloud identity through the cluster's OIDC provider, so the pod gets scoped cloud credentials with no static secret. On AKS the ServiceAccount is federated to a Microsoft Entra identity (a user-assigned managed identity or app registration) through the AKS OIDC issuer with a federated identity credential, and the pod exchanges its ServiceAccount token for an Entra token, keyless." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBbiBFQ1MgdGFzayByb2xlIGlzIHRoZSBzYW1lIGlkZWEgYXMgRUtTIElSU0E6IGEgS3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudCBmZWRlcmF0ZWQgdG8gYSBjbG91ZCBpZGVudGl0eSB0aHJvdWdoIHRoZSBjbHVzdGVyJ3MgT0lEQyBwcm92aWRlciwgc28gdGhlIHBvZCBnZXRzIHNjb3BlZCBjbG91ZCBjcmVkZW50aWFscyB3aXRoIG5vIHN0YXRpYyBzZWNyZXQuIE9uIEFLUyB0aGUgU2VydmljZUFjY291bnQgaXMgZmVkZXJhdGVkIHRvIGEgTWljcm9zb2Z0IEVudHJhIGlkZW50aXR5IChhIHVzZXItYXNzaWduZWQgbWFuYWdlZCBpZGVudGl0eSBvciBhcHAgcmVnaXN0cmF0aW9uKSB0aHJvdWdoIHRoZSBBS1MgT0lEQyBpc3N1ZXIgd2l0aCBhIGZlZGVyYXRlZCBpZGVudGl0eSBjcmVkZW50aWFsLCBhbmQgdGhlIHBvZCBleGNoYW5nZXMgaXRzIFNlcnZpY2VBY2NvdW50IHRva2VuIGZvciBhbiBFbnRyYSB0b2tlbiwga2V5bGVzcy4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0iZWFrcy1pZCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjMjBmN2I0Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSIyMCIgeT0iNDQiIHdpZHRoPSIxODgiIGhlaWdodD0iNjYiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxMTQiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkVDUyB0YXNrIHJvbGU8L3RleHQ+Cjx0ZXh0IHg9IjExNCIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6MTBweDtmaWxsOiAjYzljZmQ4Ij50YXNrUm9sZUFybjwvdGV4dD4KPHRleHQgeD0iMTE0IiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij50aGUgYXBwJ3Mgb3duIGlkZW50aXR5PC90ZXh0Pgo8bGluZSB4MT0iMjA4IiB5MT0iNzciIHgyPSIyNTAiIHkyPSI3NyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWFrcy1pZCkiLz4KPHJlY3QgeD0iMjU0IiB5PSI0NCIgd2lkdGg9IjIxNCIgaGVpZ2h0PSI2NiIgcng9IjEyIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjM2MSIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTFweCI+S3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudDwvdGV4dD4KPHRleHQgeD0iMzYxIiB5PSI5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmZlZGVyYXRlZCB2aWEgdGhlIEFLUyBPSURDIGlzc3VlcjwvdGV4dD4KPHRleHQgeD0iMzYxIiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5mZWRlcmF0ZWQgaWRlbnRpdHkgY3JlZGVudGlhbDwvdGV4dD4KPGxpbmUgeDE9IjQ2OCIgeTE9Ijc3IiB4Mj0iNTEwIiB5Mj0iNzciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vha3MtaWQpIi8+CjxyZWN0IHg9IjUxNCIgeT0iNDAiIHdpZHRoPSIzMDIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NjUiIHk9IjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+YSBNaWNyb3NvZnQgRW50cmEgaWRlbnRpdHk8L3RleHQ+Cjx0ZXh0IHg9IjY2NSIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPnVzZXItYXNzaWduZWQgbWFuYWdlZCBpZGVudGl0eSBvciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjY2NSIgeT0iMTAzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5rZXlsZXNzIMK3IG5vIHN0YXRpYyBzZWNyZXQ8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+VGhlIEVDUyB0YXNrIHJvbGUgaXMgdGhlIEVLUy1JUlNBIGlkZWE6IGEgU2VydmljZUFjY291bnQgZmVkZXJhdGVkIHRvIGEgY2xvdWQgaWRlbnRpdHkgdGhyb3VnaCB0aGUgY2x1c3RlcidzIE9JREMgcHJvdmlkZXIuPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPk5hdGl2ZSBjbG91ZCBhY2Nlc3M7IEFXUyBjcmVkZW50aWFscyB1c2UgdGhlIGlkZW50aXR5IGFkYXB0ZXIuPC90ZXh0Pgo8L3N2Zz4=" alt="An ECS task role is the same idea as EKS IRSA: a Kubernetes ServiceAccount federated to a cloud identity through the cluster's OIDC provider, so the pod gets scoped cloud credentials with no static secret. On AKS the ServiceAccount is federated to a Microsoft Entra identity (a user-assigned managed identity or app registration) through the AKS OIDC issuer with a federated identity credential, and the pod exchanges its ServiceAccount token for an Entra token, keyless." />
</div>

<p className="t9-caption">The task role is ECS's EKS-IRSA equivalent: a Kubernetes ServiceAccount federated through the AKS OIDC issuer to a Microsoft Entra identity, so the pod exchanges its ServiceAccount token for a scoped Entra token with no static secret.</p>

#### AWS request authorization

For supported AWS API calls, Tensor9 evaluates the task role's IAM policy against the verified caller, action and resource; a denial overrides an allowance. See [AWS request authorization](/service-adapters/aws/compute-containers/ecs#aws-request-authorization) for policy preparation, wildcard support and verified policy delivery.

Native Azure permissions are granted separately to the managed identity in Azure. Entra Workload ID supplies identity tokens, not the resource grants or an AWS role session.

#### Secrets and logging

The container's `environment` variables are set as-is, and its `secrets` references resolve from **Azure Key Vault** (through the managed Key Vault Secrets Store CSI addon or the External Secrets Operator), the same store the SSM equivalence uses. The `awslogs` log driver becomes **Azure Monitor / Log Analytics** (Container Insights), with stdout and stderr delivered automatically; a custom FireLens log router can run as a sidecar; configure its destination and credentials for the target logging service.

#### Limitations

Review the remaining service, deployment and networking differences below.

△ Where it diverges

* **ECS Service Connect's mesh is partial:** a Service provides name-based discovery, but the injected mesh proxy and its built-in metrics need an added service mesh (Istio / Linkerd).
* **Weighted blue-green or canary releases require extra tooling:** a plain rolling update is native; a weighted traffic split uses Gateway API, Argo Rollouts, or Flagger.
* **Capacity providers and Fargate Spot are the cluster's own:** the cluster owns capacity via its node pools, so a capacity-provider strategy maps to node pools (or virtual-node burst to Azure Container Instances) and a Spot preference to a Spot node pool.
* **The task-metadata endpoint is served read-only.** `169.254.170.2` (`ECS_CONTAINER_METADATA_URI_V4`), the ECS task-metadata API, is served read-only; other AWS calls use their corresponding adapters.

#### Other considerations

Plan persistent storage, cluster capacity, logging, and secret access before deployment.

* **Migrate mounted volumes separately:** a task definition and service hold no data, and the image is already a container image pulled into your own registry at the build, so adoption is a redeploy; any volume a task mounts (EFS, EBS) moves under its own service card.
* **Plan node-pool capacity.** The origin exposed no nodes, but on AKS the workload lands on a cluster whose node pools (or a serverless virtual-node burst tier) are an operational surface, while Microsoft operates and patches the control plane.
* **Costs include continuously running nodes.** `desiredCount` becomes always-on replicas billed as running nodes, so the node pool is sized for steady state rather than metered per Fargate task.
* **Telemetry and secrets move to Azure's stores:** logs land in Container Insights and `secrets` resolve from Azure Key Vault, so dashboards, alerts, and secret access follow the target services.

#### Runtime tasks on AKS

AKS schedules the translated tasks on configured node pools. Task acceptance, container readiness and exit status remain separate; native Azure grants and AWS task-role credentials also remain separate. See [runtime task execution](/service-adapters/aws/compute-containers/ecs#runtime-task-execution) for supported task-definition and task-lifecycle calls.

## On OCI

| Operation                                         | Area            | Support      | Depth        | Notes                                                                                                                                                                               |
| ------------------------------------------------- | --------------- | ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Capacity providers / FARGATE\_SPOT                | Cluster         | Out of scope | Full surface | the cluster owns capacity via its node pools; FARGATE\_SPOT maps to a preemptible node pool                                                                                         |
| Identity: task role                               | Identity        | Partial      | Common       | taskRoleArn → OKE Workload Identity, the OCI-native analog: IAM policies selecting a workload principal by cluster, namespace and service account; the execution role is not needed |
| Secrets and environment                           | Identity        | Supported    | Common       | environment variables are set as-is; secrets map to OCI Vault                                                                                                                       |
| Load balancer: service LB block                   | Load balancer   | Supported    | Common       | ALB / NLB target group → a Service (type=LoadBalancer) plus Ingress / Gateway; See the load-balancer adapter pages for individual routing-rule support.                             |
| Logging: awslogs                                  | Logging         | Supported    | Common       | awslogs → OCI Logging; a FireLens sidecar stays a logging sidecar                                                                                                                   |
| Networking: awsvpc (per-task IP + security group) | Networking      | Supported    | Common       | per-task ENI + security group → per-Pod IP (VCN-native) + NetworkPolicy: individually addressable, with network isolation between pods                                              |
| Networking: service discovery / Service Connect   | Networking      | Partial      | Most usage   | a Service + cluster DNS gives discovery natively; the injected mesh proxy and its metrics need an added service mesh (Istio / Linkerd)                                              |
| ECS Exec                                          | Runtime         | Supported    | Most usage   | ECS Exec's interactive shell → kubectl exec into the Pod                                                                                                                            |
| Task-metadata endpoint (runtime)                  | Runtime         | Supported    | Common       | 169.254.170.2 / ECS\_CONTAINER\_METADATA\_URI\_V4 served read-only, the ECS task-metadata API                                                                                       |
| Scheduling: DAEMON strategy                       | Service         | Supported    | Full surface | one copy per host → a DaemonSet, one Pod per node                                                                                                                                   |
| Service: autoscaling                              | Service         | Supported    | Most usage   | Application Auto Scaling → a HorizontalPodAutoscaler on CPU / memory / custom                                                                                                       |
| Service: deployment controller                    | Service         | Partial      | Most usage   | rolling update is native (maxSurge / maxUnavailable); weighted blue-green / canary requires release-management tooling (Gateway API / Argo Rollouts / Flagger)                      |
| Service: desired count                            | Service         | Supported    | Common       | desiredCount → Deployment desired replicas; ready count depends on scheduling and health                                                                                            |
| Task definition: containers / sidecars            | Task definition | Supported    | Common       | multi-container task → a Pod with a main container plus sidecars, native                                                                                                            |
| Task definition: cpu / memory                     | Task definition | Supported    | Common       | Fargate \{0.25 … 16 vCPU} with tied memory bands → Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                            |
| Task definition: image                            | Task definition | Supported    | Common       | Copies the container image to your registry during the build.                                                                                                                       |

#### How it works

On AWS your service runs as an **ECS service**: a task definition describes the container image and its sizing, and the service keeps a desired number of copies running on Fargate behind a load balancer. Tensor9 reads that task definition and service and, at the build, turns them into native Kubernetes on **OKE**: a **Deployment** (or a **DaemonSet** for the DAEMON strategy) plus a **Service**, on an enhanced OKE control plane that Oracle operates, with VCN-native pod networking. Kubernetes schedules the same container image.

After deployment, clients reach your container through the target load balancer or cluster DNS. Tensor9 translates the stack during the build and does not proxy application traffic.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBPcmFjbGUgQ2xvdWQgdGhlIHNhbWUgaW1hZ2UgcnVucyBhcyBhIG5hdGl2ZSBPS0UgRGVwbG95bWVudCAob3IgYSBEYWVtb25TZXQpIHBsdXMgYSBTZXJ2aWNlLCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQgYW5kIHJlYWNoZWQgYnkgT0NJJ3Mgb3duIGxvYWQgYmFsYW5jZXIuIFRlbnNvcjkgaXMgbm90IGluIHRoZSBzZXJ2aWNlJ3MgdHJhZmZpYyBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlb2tlLWh3IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMzIiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODYiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5Zb3VyIGltYWdlPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+Y29udGFpbmVyPC90ZXh0Pgo8bGluZSB4MT0iMTE0IiB5MT0iMTE2IiB4Mj0iMTQ2IiB5Mj0iMTE2IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlb2tlLWh3KSIvPgo8cmVjdCB4PSIxNDgiIHk9Ijg2IiB3aWR0aD0iMTE0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjA1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5FQ1Mgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iMjA1IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5vbiBGYXJnYXRlPC90ZXh0Pgo8bGluZSB4MT0iMjYyIiB5MT0iMTE2IiB4Mj0iMjkwIiB5Mj0iMTE2IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlb2tlLWh3KSIvPgo8cmVjdCB4PSIyOTIiIHk9Ijg2IiB3aWR0aD0iNzAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIzMjciIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5BTEI8L3RleHQ+Cjx0ZXh0IHg9IjMyNyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dHJhZmZpYzwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIzNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj5jb21waWxlZCBhdCB0aGUgYnVpbGQ8L3RleHQ+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTMyIiByeD0iMTQiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5PTiBPUkFDTEUgQ0xPVUQgwrcgT0tFPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9IjgwIiB3aWR0aD0iODAiIGhlaWdodD0iNTYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MTYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPlNhbWUgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjUxNiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjU1NiIgeTE9IjEwOCIgeDI9IjU4NCIgeTI9IjEwOCIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS1odykiLz4KPHJlY3QgeD0iNTg4IiB5PSI4MCIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY2MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExLjVweCI+TmF0aXZlIHdvcmtsb2FkPC90ZXh0Pgo8dGV4dCB4PSI2NjIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+RGVwbG95bWVudCBvciBEYWVtb25TZXQ8L3RleHQ+CjxsaW5lIHgxPSI3MzYiIHkxPSIxMDgiIHgyPSI3NjIiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vva2UtaHcpIi8+CjxyZWN0IHg9Ijc2NiIgeT0iODAiIHdpZHRoPSI1MiIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc5MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwcHgiPk9DSTwvdGV4dD4KPHRleHQgeD0iNzkyIiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5MQjwvdGV4dD4KPHRleHQgeD0iNjQzIiB5PSIxNjQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtd2VpZ2h0OjcwMCI+dGhlIGFkYXB0ZXIgaXMgbm90IGluIHRoaXMgcGF0aDwvdGV4dD4KPC9zdmc+" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on Oracle Cloud the same image runs as a native OKE Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by OCI's own load balancer. Tensor9 is not in the service's traffic path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBPcmFjbGUgQ2xvdWQgdGhlIHNhbWUgaW1hZ2UgcnVucyBhcyBhIG5hdGl2ZSBPS0UgRGVwbG95bWVudCAob3IgYSBEYWVtb25TZXQpIHBsdXMgYSBTZXJ2aWNlLCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQgYW5kIHJlYWNoZWQgYnkgT0NJJ3Mgb3duIGxvYWQgYmFsYW5jZXIuIFRlbnNvcjkgaXMgbm90IGluIHRoZSBzZXJ2aWNlJ3MgdHJhZmZpYyBwYXRoLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlb2tlLWh3IiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjE2IiB5PSI0NiIgd2lkdGg9IjM1OCIgaGVpZ2h0PSIxMzIiIHJ4PSIxNCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5NGEzYjgiPk9OIEFXUyBUT0RBWTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9Ijg2IiB3aWR0aD0iODQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3MiIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+WW91ciBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNzIiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPmNvbnRhaW5lcjwvdGV4dD4KPGxpbmUgeDE9IjExNCIgeTE9IjExNiIgeDI9IjE0NiIgeTI9IjExNiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS1odykiLz4KPHJlY3QgeD0iMTQ4IiB5PSI4NiIgd2lkdGg9IjExNCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjIwNSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+RUNTIHNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjIwNSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+b24gRmFyZ2F0ZTwvdGV4dD4KPGxpbmUgeDE9IjI2MiIgeTE9IjExNiIgeDI9IjI5MCIgeTI9IjExNiIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS1odykiLz4KPHJlY3QgeD0iMjkyIiB5PSI4NiIgd2lkdGg9IjcwIiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMzI3IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTFweCI+QUxCPC90ZXh0Pgo8dGV4dCB4PSIzMjciIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnRyYWZmaWM8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMzQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtd2VpZ2h0OjcwMCI+Y29tcGlsZWQgYXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSI0NjIiIHk9IjQ2IiB3aWR0aD0iMzYyIiBoZWlnaHQ9IjEzMiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNDc2IiB5PSI2NCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPk9OIE9SQUNMRSBDTE9VRCDCtyBPS0U8L3RleHQ+CjxyZWN0IHg9IjQ3NiIgeT0iODAiIHdpZHRoPSI4MCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjUxNiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+U2FtZSBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNTE2IiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+dW5jaGFuZ2VkPC90ZXh0Pgo8bGluZSB4MT0iNTU2IiB5MT0iMTA4IiB4Mj0iNTg0IiB5Mj0iMTA4IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlb2tlLWh3KSIvPgo8cmVjdCB4PSI1ODgiIHk9IjgwIiB3aWR0aD0iMTQ4IiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iNjYyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5OYXRpdmUgd29ya2xvYWQ8L3RleHQ+Cjx0ZXh0IHg9IjY2MiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5EZXBsb3ltZW50IG9yIERhZW1vblNldDwvdGV4dD4KPGxpbmUgeDE9IjczNiIgeTE9IjEwOCIgeDI9Ijc2MiIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS1odykiLz4KPHJlY3QgeD0iNzY2IiB5PSI4MCIgd2lkdGg9IjUyIiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzkyIiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTBweCI+T0NJPC90ZXh0Pgo8dGV4dCB4PSI3OTIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkxCPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj50aGUgYWRhcHRlciBpcyBub3QgaW4gdGhpcyBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on Oracle Cloud the same image runs as a native OKE Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by OCI's own load balancer. Tensor9 is not in the service's traffic path." />
</div>

<p className="t9-caption">Your task definition and service are compiled into native Kubernetes on OKE at the build; afterward OCI's own load balancer and runtime carry every request.</p>

#### The task definition and service

A **task definition** describes a main container and any helper containers (sidecars). Tensor9 translates them into a multi-container **Pod** and copies the image to your registry during the build. Fargate expresses compute as a CPU value in \{0.25 … 16} vCPU with tied memory bands; on OKE that becomes Pod `requests` and `limits`, which are not restricted to Fargate's fixed size combinations. Requested resources must fit node capacity, scheduler rules and quota.

An ECS service keeps a **desired count** of tasks always on. That maps directly to a Deployment's `replicas`, the desired replica count, not a guaranteed number of ready pods; scale-to-zero is not the default and is added only if you want it. **Application Auto Scaling** becomes a **HorizontalPodAutoscaler** on CPU, memory, or a custom metric, and a rolling update maps to the Deployment's own `RollingUpdate` with `maxSurge` and `maxUnavailable`. For other ECS operations, the **DAEMON** strategy becomes a **DaemonSet** (one Pod per node), and **ECS Exec** becomes `kubectl exec` into the Pod.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlb2tlLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMwNTk2NjkiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OSI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1NjkiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIE9LRTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlb2tlLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMyMGY3YjQiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIE9LRTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />
</div>

<p className="t9-caption">The task definition becomes a Pod spec and the service becomes a Deployment: containers and sizing land as requests and limits, desiredCount sets replicas, the DAEMON strategy becomes a DaemonSet, and ECS Exec becomes kubectl exec.</p>

#### Networking, discovery, and load balancing

ECS's **awsvpc** mode gives each task its own routable IP and security group. OKE offers the same model through **VCN-native pod networking** (`OCI_VCN_IP_NATIVE`): every Pod gets its own individually-addressable VCN IP, and a per-task security group maps to a **NetworkPolicy** to preserve network isolation between tasks. **Service discovery** by name, whether Cloud Map or DNS, is repointed at the build to a Kubernetes **Service** with cluster DNS, which is exactly ECS's name-based model.

The service's `loadBalancer` block (the ALB or NLB target group its tasks register into) becomes a Kubernetes **Service** of type LoadBalancer (which provisions an OCI Load Balancer) plus an **Ingress** for host and path routing, with the target-group health check becoming the Pod's readiness probe. For supported routing rules, weights and certificates, see the [Application Load Balancer](/service-adapters/aws/networking-traffic/application-load-balancer) and [Network Load Balancer](/service-adapters/aws/networking-traffic/network-load-balancer) articles. This page places the Pod fleet behind that load balancer. For **ECS Service Connect**, a Service gives you name-based discovery, but Service Connect's injected mesh proxy and its built-in metrics are partial and need an added service mesh (Istio or Linkerd), which you configure separately.

#### The OKE control plane

Oracle operates an **enhanced cluster** control plane, and nodes come three ways: **managed node pools** (Oracle manages the node lifecycle on your compute), serverless **virtual node pools**, and **self-managed nodes**, with a cluster autoscaler. An ECS **capacity provider** maps to that node-pool layer, and a `FARGATE_SPOT` preference maps to a preemptible node pool . Control-plane patching is Oracle's to run.

Oracle manages **cluster add-ons** through the OKE add-ons API: the **cluster autoscaler** scales node pools, the **OCI Native Ingress Controller** backs the Service-plus-Ingress mapping with an OCI Load Balancer, and the **VCN-native pod-networking CNI** is what gives each Pod its routable VCN IP. Enhanced clusters are also what include OKE Workload Identity, the identity binding covered in the next section. A weighted blue-green or canary split still uses a progressive-delivery layer you add (Argo Rollouts or Flagger); a plain rolling update is native.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQ2IiB2aWV3Qm94PSIwIDAgODM2IDI0NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgT0tFIGNvbnRyb2wgcGxhbmUsIG9wZXJhdGVkIGJ5IE9yYWNsZSBhcyBhbiBlbmhhbmNlZCBjbHVzdGVyLiBOb2RlcyBjb21lIGFzIG1hbmFnZWQgbm9kZSBwb29scywgc2VydmVybGVzcyB2aXJ0dWFsIG5vZGUgcG9vbHMsIG9yIHNlbGYtbWFuYWdlZCBub2Rlcywgd2l0aCBhIGNsdXN0ZXIgYXV0b3NjYWxlci4gT3JhY2xlIG1hbmFnZXMgY2x1c3RlciBhZGRvbnMgdGhyb3VnaCB0aGUgT0tFIGFkZG9ucyBBUEk6IHRoZSBjbHVzdGVyIGF1dG9zY2FsZXIsIHRoZSBPQ0kgTmF0aXZlIEluZ3Jlc3MgQ29udHJvbGxlciwgYW5kIHRoZSBWQ04tbmF0aXZlIHBvZC1uZXR3b3JraW5nIENOSS4gQ2FwYWNpdHkgcHJvdmlkZXJzIG1hcCB0byBub2RlIHBvb2xzIGFuZCBGYXJnYXRlIFNwb3QgdG8gYSBwcmVlbXB0aWJsZSBub2RlIHBvb2wuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MCIgcng9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T0tFIENPTlRST0wgUExBTkUgwrcgT1JBQ0xFLU9QRVJBVEVEIChFTkhBTkNFRCBDTFVTVEVSKTwvdGV4dD4KPHJlY3QgeD0iMzAiIHk9IjU4IiB3aWR0aD0iMjM4IiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIxNDkiIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTFweCI+bWFuYWdlZCBub2RlIHBvb2xzPC90ZXh0Pgo8cmVjdCB4PSIyODAiIHk9IjU4IiB3aWR0aD0iMjM4IiBoZWlnaHQ9IjMwIiByeD0iOCIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjYTdmM2QwIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIzOTkiIHk9Ijc3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTFweCI+dmlydHVhbCBub2RlIHBvb2xzIChzZXJ2ZXJsZXNzKTwvdGV4dD4KPHJlY3QgeD0iNTMwIiB5PSI1OCIgd2lkdGg9IjI3NiIgaGVpZ2h0PSIzMCIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iNjY4IiB5PSI3NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExcHgiPnNlbGYtbWFuYWdlZCBub2RlcyDCtyBjbHVzdGVyIGF1dG9zY2FsZXI8L3RleHQ+Cjx0ZXh0IHg9IjI4IiB5PSIxMjIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiM5NGEzYjgiPkNMVVNURVIgQURET05TIMK3IE1BTkFHRUQgVEhST1VHSCBUSEUgT0tFIEFERE9OUyBBUEk8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSIxMzIiIHdpZHRoPSIyNTYiIGhlaWdodD0iNDIiIHJ4PSI5IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjE0OCIgeT0iMTUxIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+Y2x1c3RlciBhdXRvc2NhbGVyPC90ZXh0Pgo8dGV4dCB4PSIxNDgiIHk9IjE2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm5vZGUtcG9vbCBzY2FsaW5nPC90ZXh0Pgo8cmVjdCB4PSIyODgiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MiIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDE2IiB5PSIxNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5PQ0kgTmF0aXZlIEluZ3Jlc3MgQ29udHJvbGxlcjwvdGV4dD4KPHRleHQgeD0iNDE2IiB5PSIxNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5TZXJ2aWNlICsgSW5ncmVzcyDihpIgT0NJIExCPC90ZXh0Pgo8cmVjdCB4PSI1NTYiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MiIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNjg0IiB5PSIxNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5WQ04tbmF0aXZlIHBvZCBuZXR3b3JraW5nIENOSTwvdGV4dD4KPHRleHQgeD0iNjg0IiB5PSIxNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5wZXItUG9kIFZDTiBJUDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjE4NCIgd2lkdGg9Ijc5MiIgaGVpZ2h0PSIzNCIgcng9IjkiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDE2IiB5PSIyMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5FbmhhbmNlZCBjbHVzdGVycyBpbmNsdWRlIHRoZSBhZGRvbnMsIHZpcnR1YWwgbm9kZXMsIGFuZCBPS0UgV29ya2xvYWQgSWRlbnRpdHkgwrcgdGhlIGlkZW50aXR5IGVkZ2UgY292ZXJlZCBuZXh0LjwvdGV4dD4KPHRleHQgeD0iMjgiIHk9IjIzOCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGI7IGZpbGw6Izk0YTNiOCI+Q2FwYWNpdHkgcHJvdmlkZXJzIOKGkiBub2RlIHBvb2xzIC8gY2x1c3Rlci1hdXRvc2NhbGVyIMK3IEZBUkdBVEVfU1BPVCDihpIgYSBwcmVlbXB0aWJsZSBub2RlIHBvb2w8L3RleHQ+Cjwvc3ZnPg==" alt="The OKE control plane, operated by Oracle as an enhanced cluster. Nodes come as managed node pools, serverless virtual node pools, or self-managed nodes, with a cluster autoscaler. Oracle manages cluster addons through the OKE addons API: the cluster autoscaler, the OCI Native Ingress Controller, and the VCN-native pod-networking CNI. Capacity providers map to node pools and Fargate Spot to a preemptible node pool." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQ2IiB2aWV3Qm94PSIwIDAgODM2IDI0NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJUaGUgT0tFIGNvbnRyb2wgcGxhbmUsIG9wZXJhdGVkIGJ5IE9yYWNsZSBhcyBhbiBlbmhhbmNlZCBjbHVzdGVyLiBOb2RlcyBjb21lIGFzIG1hbmFnZWQgbm9kZSBwb29scywgc2VydmVybGVzcyB2aXJ0dWFsIG5vZGUgcG9vbHMsIG9yIHNlbGYtbWFuYWdlZCBub2Rlcywgd2l0aCBhIGNsdXN0ZXIgYXV0b3NjYWxlci4gT3JhY2xlIG1hbmFnZXMgY2x1c3RlciBhZGRvbnMgdGhyb3VnaCB0aGUgT0tFIGFkZG9ucyBBUEk6IHRoZSBjbHVzdGVyIGF1dG9zY2FsZXIsIHRoZSBPQ0kgTmF0aXZlIEluZ3Jlc3MgQ29udHJvbGxlciwgYW5kIHRoZSBWQ04tbmF0aXZlIHBvZC1uZXR3b3JraW5nIENOSS4gQ2FwYWNpdHkgcHJvdmlkZXJzIG1hcCB0byBub2RlIHBvb2xzIGFuZCBGYXJnYXRlIFNwb3QgdG8gYSBwcmVlbXB0aWJsZSBub2RlIHBvb2wuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MCIgcng9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPk9LRSBDT05UUk9MIFBMQU5FIMK3IE9SQUNMRS1PUEVSQVRFRCAoRU5IQU5DRUQgQ0xVU1RFUik8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI1OCIgd2lkdGg9IjIzOCIgaGVpZ2h0PSIzMCIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMTQ5IiB5PSI3NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExcHgiPm1hbmFnZWQgbm9kZSBwb29sczwvdGV4dD4KPHJlY3QgeD0iMjgwIiB5PSI1OCIgd2lkdGg9IjIzOCIgaGVpZ2h0PSIzMCIgcng9IjgiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNjY1MyIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMzk5IiB5PSI3NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExcHgiPnZpcnR1YWwgbm9kZSBwb29scyAoc2VydmVybGVzcyk8L3RleHQ+CjxyZWN0IHg9IjUzMCIgeT0iNTgiIHdpZHRoPSIyNzYiIGhlaWdodD0iMzAiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjY2OCIgeT0iNzciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMXB4Ij5zZWxmLW1hbmFnZWQgbm9kZXMgwrcgY2x1c3RlciBhdXRvc2NhbGVyPC90ZXh0Pgo8dGV4dCB4PSIyOCIgeT0iMTIyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+Q0xVU1RFUiBBRERPTlMgwrcgTUFOQUdFRCBUSFJPVUdIIFRIRSBPS0UgQURET05TIEFQSTwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjEzMiIgd2lkdGg9IjI1NiIgaGVpZ2h0PSI0MiIgcng9IjkiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMTQ4IiB5PSIxNTEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTAuNXB4Ij5jbHVzdGVyIGF1dG9zY2FsZXI8L3RleHQ+Cjx0ZXh0IHg9IjE0OCIgeT0iMTY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bm9kZS1wb29sIHNjYWxpbmc8L3RleHQ+CjxyZWN0IHg9IjI4OCIgeT0iMTMyIiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjQyIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0MTYiIHk9IjE1MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPk9DSSBOYXRpdmUgSW5ncmVzcyBDb250cm9sbGVyPC90ZXh0Pgo8dGV4dCB4PSI0MTYiIHk9IjE2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlNlcnZpY2UgKyBJbmdyZXNzIOKGkiBPQ0kgTEI8L3RleHQ+CjxyZWN0IHg9IjU1NiIgeT0iMTMyIiB3aWR0aD0iMjU2IiBoZWlnaHQ9IjQyIiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI2ODQiIHk9IjE1MSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPlZDTi1uYXRpdmUgcG9kIG5ldHdvcmtpbmcgQ05JPC90ZXh0Pgo8dGV4dCB4PSI2ODQiIHk9IjE2NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPnBlci1Qb2QgVkNOIElQPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMTg0IiB3aWR0aD0iNzkyIiBoZWlnaHQ9IjM0IiByeD0iOSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0MTYiIHk9IjIwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPkVuaGFuY2VkIGNsdXN0ZXJzIGluY2x1ZGUgdGhlIGFkZG9ucywgdmlydHVhbCBub2RlcywgYW5kIE9LRSBXb3JrbG9hZCBJZGVudGl0eSDCtyB0aGUgaWRlbnRpdHkgZWRnZSBjb3ZlcmVkIG5leHQuPC90ZXh0Pgo8dGV4dCB4PSIyOCIgeT0iMjM4IiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkODsgZmlsbDogIzk0YTNiOCI+Q2FwYWNpdHkgcHJvdmlkZXJzIOKGkiBub2RlIHBvb2xzIC8gY2x1c3Rlci1hdXRvc2NhbGVyIMK3IEZBUkdBVEVfU1BPVCDihpIgYSBwcmVlbXB0aWJsZSBub2RlIHBvb2w8L3RleHQ+Cjwvc3ZnPg==" alt="The OKE control plane, operated by Oracle as an enhanced cluster. Nodes come as managed node pools, serverless virtual node pools, or self-managed nodes, with a cluster autoscaler. Oracle manages cluster addons through the OKE addons API: the cluster autoscaler, the OCI Native Ingress Controller, and the VCN-native pod-networking CNI. Capacity providers map to node pools and Fargate Spot to a preemptible node pool." />
</div>

<p className="t9-caption">OKE runs an enhanced control plane over managed, virtual, or self-managed node pools, and manages cluster addons through its addons API: the cluster autoscaler, the OCI Native Ingress Controller, and the VCN-native pod-networking CNI.</p>

#### Pod identity: the task role

The ECS task role identifies the application's AWS API calls. The Max credential path supplies the corresponding AWS role session. Native OCI access uses [OKE workload identity](https://docs.oracle.com/en-us/iaas/Content/ContEng/Tasks/contenggrantingworkloadaccesstoresources.htm): IAM policies match a workload principal's cluster, namespace and service account. This is separate from dynamic groups used for compute-instance principals.

The AWS role and the OCI identity still stay consistent through a startup check: at boot the appliance fetches the Pod's real OKE workload identity and proves the declared AWS task role binds to it, failing closed if it does not. Inside the appliance the IAM surface then **reflects** that identity, so `aws sts get-caller-identity` and `iam:GetRole` answer as the task's own role, and calls to other AWS services use the Tensor9 adapters with that role. The **execution role** (the one ECS itself used to pull the image, fetch secrets, and write logs) is not needed, because OKE owns image pull and log delivery with its own identity.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJGb3IgbmF0aXZlIE9DSSBhY2Nlc3MsIElBTSBwb2xpY2llcyBtYXRjaCB0aGUgd29ya2xvYWQgcHJpbmNpcGFsIGJ5IGNsdXN0ZXIsIG5hbWVzcGFjZSBhbmQgc2VydmljZSBhY2NvdW50LiBBV1MgYWRhcHRlciBjYWxscyBzZXBhcmF0ZWx5IHVzZSB0aGUgY29uZmlndXJlZCB0YXNrIHJvbGUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVva2UtaWQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iI2Y1OWUwYiIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTE0IiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5FQ1MgdGFzayByb2xlPC90ZXh0Pgo8dGV4dCB4PSIxMTQiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZm9udC1zaXplOjEwcHg7ZmlsbDojMzM0MTU1Ij50YXNrUm9sZUFybjwvdGV4dD4KPHRleHQgeD0iMTE0IiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj50aGUgYXBwJ3Mgb3duIGlkZW50aXR5PC90ZXh0Pgo8bGluZSB4MT0iMjA4IiB5MT0iNzciIHgyPSIyNTAiIHkyPSI3NyIgc3Ryb2tlPSIjZjU5ZTBiIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS1pZCkiLz4KPHJlY3QgeD0iMjU0IiB5PSI0NCIgd2lkdGg9IjIxNCIgaGVpZ2h0PSI2NiIgcng9IjEyIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40Ii8+Cjx0ZXh0IHg9IjM2MSIgeT0iNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTFweCI+S3ViZXJuZXRlcyBTZXJ2aWNlQWNjb3VudDwvdGV4dD4KPHRleHQgeD0iMzYxIiB5PSI5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPklBTSBwb2xpY3kgc2VsZWN0cyB0aGU8L3RleHQ+Cjx0ZXh0IHg9IjM2MSIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+d29ya2xvYWQgcHJpbmNpcGFsPC90ZXh0Pgo8bGluZSB4MT0iNDY4IiB5MT0iNzciIHgyPSI1MTAiIHkyPSI3NyIgc3Ryb2tlPSIjZjU5ZTBiIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZW9rZS1pZCkiLz4KPHJlY3QgeD0iNTE0IiB5PSI0MCIgd2lkdGg9IjMwMiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZmZmYmViIiBzdHJva2U9IiNmNTllMGIiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY2NSIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OjcwMCAxMS41cHggSW50ZXI7ZmlsbDojYjQ1MzA5Ij5hbiBPQ0kgcHJpbmNpcGFsIChPS0UgV29ya2xvYWQgSWRlbnRpdHkpPC90ZXh0Pgo8dGV4dCB4PSI2NjUiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YjsgZmlsbDojYjQ1MzA5Ij5jbHVzdGVyIC8gbmFtZXNwYWNlIC8gc2VydmljZS1hY2NvdW50IHBvbGljeTwvdGV4dD4KPHRleHQgeD0iNjY1IiB5PSIxMDMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiNiNDUzMDkiPuKWsyBhIHRyYWRlb2ZmLCBub3QgYW4gZXhhY3QgbWF0Y2g8L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTUwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+TmF0aXZlIE9DSSBhY2Nlc3MgYW5kIEFXUyBhZGFwdGVyIHNlc3Npb25zIHVzZSBzZXBhcmF0ZSBjcmVkZW50aWFsIHBhdGhzLjwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIxNzAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5PQ0kgSUFNIHBvbGljaWVzIHNlbGVjdCB0aGUgd29ya2xvYWQgcHJpbmNpcGFsLjwvdGV4dD4KPC9zdmc+" alt="For native OCI access, IAM policies match the workload principal by cluster, namespace and service account. AWS adapter calls separately use the configured task role." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJGb3IgbmF0aXZlIE9DSSBhY2Nlc3MsIElBTSBwb2xpY2llcyBtYXRjaCB0aGUgd29ya2xvYWQgcHJpbmNpcGFsIGJ5IGNsdXN0ZXIsIG5hbWVzcGFjZSBhbmQgc2VydmljZSBhY2NvdW50LiBBV1MgYWRhcHRlciBjYWxscyBzZXBhcmF0ZWx5IHVzZSB0aGUgY29uZmlndXJlZCB0YXNrIHJvbGUuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVva2UtaWQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iI2Y1OWUwYiIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTE0IiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5FQ1MgdGFzayByb2xlPC90ZXh0Pgo8dGV4dCB4PSIxMTQiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjEwcHg7ZmlsbDogI2M5Y2ZkOCI+dGFza1JvbGVBcm48L3RleHQ+Cjx0ZXh0IHg9IjExNCIgeT0iMTIzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGhlIGFwcCdzIG93biBpZGVudGl0eTwvdGV4dD4KPGxpbmUgeDE9IjIwOCIgeTE9Ijc3IiB4Mj0iMjUwIiB5Mj0iNzciIHN0cm9rZT0iI2Y1OWUwYiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vva2UtaWQpIi8+CjxyZWN0IHg9IjI1NCIgeT0iNDQiIHdpZHRoPSIyMTQiIGhlaWdodD0iNjYiIHJ4PSIxMiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIvPgo8dGV4dCB4PSIzNjEiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkt1YmVybmV0ZXMgU2VydmljZUFjY291bnQ8L3RleHQ+Cjx0ZXh0IHg9IjM2MSIgeT0iOTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5JQU0gcG9saWN5IHNlbGVjdHMgdGhlPC90ZXh0Pgo8dGV4dCB4PSIzNjEiIHk9IjEwNiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPndvcmtsb2FkIHByaW5jaXBhbDwvdGV4dD4KPGxpbmUgeDE9IjQ2OCIgeTE9Ijc3IiB4Mj0iNTEwIiB5Mj0iNzciIHN0cm9rZT0iI2Y1OWUwYiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2Vva2UtaWQpIi8+CjxyZWN0IHg9IjUxNCIgeT0iNDAiIHdpZHRoPSIzMDIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzMxMmQxYSIgc3Ryb2tlPSIjZjU5ZTBiIiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NjUiIHk9IjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDo3MDAgMTEuNXB4IEludGVyO2ZpbGw6ICNkZWIyOTAiPmFuIE9DSSBwcmluY2lwYWwgKE9LRSBXb3JrbG9hZCBJZGVudGl0eSk8L3RleHQ+Cjx0ZXh0IHg9IjY2NSIgeT0iODYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj5jbHVzdGVyIC8gbmFtZXNwYWNlIC8gc2VydmljZS1hY2NvdW50IHBvbGljeTwvdGV4dD4KPHRleHQgeD0iNjY1IiB5PSIxMDMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4OyBmaWxsOiAjZGViMjkwIj7ilrMgYSB0cmFkZW9mZiwgbm90IGFuIGV4YWN0IG1hdGNoPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPk5hdGl2ZSBPQ0kgYWNjZXNzIGFuZCBBV1MgYWRhcHRlciBzZXNzaW9ucyB1c2Ugc2VwYXJhdGUgY3JlZGVudGlhbCBwYXRocy48L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+T0NJIElBTSBwb2xpY2llcyBzZWxlY3QgdGhlIHdvcmtsb2FkIHByaW5jaXBhbC48L3RleHQ+Cjwvc3ZnPg==" alt="For native OCI access, IAM policies match the workload principal by cluster, namespace and service account. AWS adapter calls separately use the configured task role." />
</div>

<p className="t9-caption">Native OCI permissions use workload-principal policies; AWS adapter requests use the configured task role.</p>

#### AWS request authorization

For supported AWS API calls, Tensor9 evaluates the task role's IAM policy against the verified caller, action and resource; a denial overrides an allowance. See [AWS request authorization](/service-adapters/aws/compute-containers/ecs#aws-request-authorization) for policy preparation, wildcard support and verified policy delivery.

Native OCI permissions are granted separately through OCI workload-principal policies. OKE workload identity selects the principal; it does not replace the AWS task-role policy or its credential exchange.

#### Secrets and logging

The container's `environment` variables are kept as-is, and its `secrets` references resolve from **OCI Vault** (often via the External Secrets Operator), the same store the SSM equivalence uses. The `awslogs` log driver becomes **OCI Logging**, with stdout and stderr delivered automatically; a custom FireLens log router remains a sidecar, with its destination and credentials configured for the target.

#### Limitations

Review the remaining service, deployment and networking differences below.

△ Where it diverges

* **Native OCI access uses workload-principal policies.** Scope those permissions to the cluster, namespace and service account separately from the AWS task-role policy.
* **ECS Service Connect's mesh is partial:** a Service handles name-based discovery, but the injected mesh proxy and its built-in metrics need an added service mesh (Istio / Linkerd).
* **Weighted blue-green or canary releases require extra tooling:** a plain rolling update is native; a weighted traffic split uses Argo Rollouts or Flagger.
* **Capacity providers and Fargate Spot are the cluster's own:** the cluster owns capacity via its node pools, so a capacity-provider strategy maps to node pools and a Spot preference to a preemptible node pool.
* **The task-metadata endpoint is served read-only.** `169.254.170.2` (`ECS_CONTAINER_METADATA_URI_V4`), the ECS task-metadata API, is served read-only; other AWS calls use their corresponding adapters.

#### Other considerations

Plan persistent storage, cluster capacity, logging, and secret access before deployment.

* **Migrate mounted volumes separately:** a task definition and service hold no data, and the image is already a container image pulled into your own registry at the build, so adoption is a redeploy; any volume a task mounts (EFS, EBS) moves under its own service card.
* **Plan node-pool capacity.** ECS on Fargate exposed no nodes, but on Oracle Cloud the workload lands on an OKE cluster whose managed, virtual, or self-managed node pools are an operational surface, while Oracle operates and patches the enhanced control plane.
* **Costs include continuously running nodes.** `desiredCount` becomes always-on replicas billed as running nodes (or serverless virtual nodes), so capacity is sized for steady state rather than metered per Fargate task.
* **Telemetry and secrets move to OCI's stores:** logs land in OCI Logging and `secrets` resolve from OCI Vault, so dashboards, alerts, and secret access follow the target services.

#### Runtime tasks on OKE

OKE schedules tasks on the selected node pools. OCI workload-principal policy controls native OCI access; it does not replace AWS task-role credentials or remove pending-image and capacity conditions. See [runtime task execution](/service-adapters/aws/compute-containers/ecs#runtime-task-execution) for supported task-definition and task-lifecycle calls.

## On Private Kubernetes

| Operation                                         | Area            | Support      | Depth        | Notes                                                                                                                                                                         |
| ------------------------------------------------- | --------------- | ------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Capacity providers / FARGATE\_SPOT                | Cluster         | Out of scope | Full surface | the cluster owns capacity via its node pools; FARGATE\_SPOT maps to the cluster's spot node pools                                                                             |
| Identity: task role                               | Identity        | Supported    | Common       | taskRoleArn → the target's workload identity, keyless; execution role is not needed                                                                                           |
| Secrets and environment                           | Identity        | Supported    | Common       | environment variables are set as-is; secrets map to the target's secret store                                                                                                 |
| Load balancer: service LB block                   | Load balancer   | Supported    | Common       | ALB / NLB target group → the cluster's own LB backend; See the load-balancer adapter pages for individual routing-rule support.                                               |
| Logging: awslogs                                  | Logging         | Supported    | Common       | awslogs → the target's logging; a FireLens sidecar stays a logging sidecar                                                                                                    |
| Networking: Service Connect                       | Networking      | Partial      | Most usage   | a Service gives discovery natively; the injected mesh proxy and its metrics need an added service mesh (Istio / Linkerd)                                                      |
| Networking: awsvpc (per-task IP + security group) | Networking      | Supported    | Common       | per-task ENI + security group → per-Pod IP + NetworkPolicy: individually addressable, with network isolation between pods; Cloud Map name → the cluster's own Service name    |
| ECS Exec                                          | Runtime         | Supported    | Most usage   | ECS Exec's interactive shell → kubectl exec into the Pod                                                                                                                      |
| Task-metadata endpoint (runtime)                  | Runtime         | Supported    | Common       | 169.254.170.2 / ECS\_CONTAINER\_METADATA\_URI\_V4 served read-only, the ECS task-metadata API                                                                                 |
| DAEMON scheduling strategy                        | Service         | Supported    | Full surface | one copy per host → a DaemonSet, one Pod per node                                                                                                                             |
| Service: autoscaling                              | Service         | Supported    | Most usage   | Application Auto Scaling → a HorizontalPodAutoscaler on CPU / memory / custom                                                                                                 |
| Service: deployment controller                    | Service         | Partial      | Most usage   | rolling update is native (maxSurge / maxUnavailable); weighted blue-green / canary requires release-management tooling (Gateway API / Argo Rollouts / Flagger / service mesh) |
| Service: desired count                            | Service         | Supported    | Common       | desiredCount → Deployment desired replicas; HPA minimum is configured separately                                                                                              |
| Task definition: containers / sidecars            | Task definition | Supported    | Common       | multi-container task → main container plus sidecars, native on every target                                                                                                   |
| Task definition: cpu / memory                     | Task definition | Supported    | Common       | Fargate \{0.25 … 16 vCPU} with tied memory bands → Pod requests / limits: values within node capacity and quota, without Fargate fixed-size combinations                      |
| Task definition: image                            | Task definition | Supported    | Common       | Copies the container image to your registry during the build.                                                                                                                 |

#### How it works

On AWS your service runs as an **ECS service**: a task definition describes the container image and its sizing, and the service keeps a desired number of copies running on Fargate behind a load balancer. Tensor9 reads that task definition and service and, at the build, turns them into native Kubernetes on **a cluster you already operate**: a **Deployment** (or a **DaemonSet** for the DAEMON strategy) plus a **Service**. Kubernetes schedules the same container image.

After deployment, clients reach your container through the target load balancer or cluster DNS. Tensor9 translates the stack during the build and does not proxy application traffic.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBhIEt1YmVybmV0ZXMgY2x1c3RlciB5b3UgYWxyZWFkeSBvcGVyYXRlIHRoZSBzYW1lIGltYWdlIHJ1bnMgYXMgYSBuYXRpdmUgRGVwbG95bWVudCAob3IgYSBEYWVtb25TZXQpIHBsdXMgYSBTZXJ2aWNlLCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQgYW5kIHJlYWNoZWQgYnkgdGhlIGNsdXN0ZXIncyBvd24gbG9hZCBiYWxhbmNlci4gVGVuc29yOSBpcyBub3QgaW4gdGhlIHNlcnZpY2UncyB0cmFmZmljIHBhdGguIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVrOHMtaHciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEzMiIgcng9IjE0IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojOTRhM2I4Ij5PTiBBV1MgVE9EQVk8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI4NiIgd2lkdGg9Ijg0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNzIiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPllvdXIgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjcyIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5jb250YWluZXI8L3RleHQ+CjxsaW5lIHgxPSIxMTQiIHkxPSIxMTYiIHgyPSIxNDYiIHkyPSIxMTYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VrOHMtaHcpIi8+CjxyZWN0IHg9IjE0OCIgeT0iODYiIHdpZHRoPSIxMTQiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIyMDUiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMS41cHgiPkVDUyBzZXJ2aWNlPC90ZXh0Pgo8dGV4dCB4PSIyMDUiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm9uIEZhcmdhdGU8L3RleHQ+CjxsaW5lIHgxPSIyNjIiIHkxPSIxMTYiIHgyPSIyOTAiIHkyPSIxMTYiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VrOHMtaHcpIi8+CjxyZWN0IHg9IjI5MiIgeT0iODYiIHdpZHRoPSI3MCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMyNyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkFMQjwvdGV4dD4KPHRleHQgeD0iMzI3IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj50cmFmZmljPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjM0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXdlaWdodDo3MDAiPmNvbXBpbGVkIGF0IHRoZSBidWlsZDwvdGV4dD4KPHJlY3QgeD0iNDYyIiB5PSI0NiIgd2lkdGg9IjM2MiIgaGVpZ2h0PSIxMzIiIHJ4PSIxNCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjQ3NiIgeT0iNjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIEEgQ0xVU1RFUiBZT1UgT1BFUkFURTwvdGV4dD4KPHJlY3QgeD0iNDc2IiB5PSI4MCIgd2lkdGg9IjgwIiBoZWlnaHQ9IjU2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNTE2IiB5PSIxMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTEuNXB4Ij5TYW1lIGltYWdlPC90ZXh0Pgo8dGV4dCB4PSI1MTYiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij51bmNoYW5nZWQ8L3RleHQ+CjxsaW5lIHgxPSI1NTYiIHkxPSIxMDgiIHgyPSI1ODQiIHkyPSIxMDgiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VrOHMtaHcpIi8+CjxyZWN0IHg9IjU4OCIgeT0iODAiIHdpZHRoPSIxNDgiIGhlaWdodD0iNTYiIHJ4PSIxMSIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI2NjIiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMS41cHgiPk5hdGl2ZSB3b3JrbG9hZDwvdGV4dD4KPHRleHQgeD0iNjYyIiB5PSIxMjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPkRlcGxveW1lbnQgb3IgRGFlbW9uU2V0PC90ZXh0Pgo8bGluZSB4MT0iNzM2IiB5MT0iMTA4IiB4Mj0iNzYyIiB5Mj0iMTA4IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlazhzLWh3KSIvPgo8cmVjdCB4PSI3NjYiIHk9IjgwIiB3aWR0aD0iNTIiIGhlaWdodD0iNTYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI3OTIiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMHB4Ij5DbHVzdGVyPC90ZXh0Pgo8dGV4dCB4PSI3OTIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPkxCPC90ZXh0Pgo8dGV4dCB4PSI2NDMiIHk9IjE2NCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC13ZWlnaHQ6NzAwIj50aGUgYWRhcHRlciBpcyBub3QgaW4gdGhpcyBwYXRoPC90ZXh0Pgo8L3N2Zz4=" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on a Kubernetes cluster you already operate the same image runs as a native Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by the cluster's own load balancer. Tensor9 is not in the service's traffic path." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJCZWZvcmU6IG9uIEFXUyB5b3VyIGNvbnRhaW5lciBpbWFnZSBydW5zIGFzIGFuIEVDUyBzZXJ2aWNlIG9uIEZhcmdhdGUgYmVoaW5kIGFuIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIEFmdGVyOiBvbiBhIEt1YmVybmV0ZXMgY2x1c3RlciB5b3UgYWxyZWFkeSBvcGVyYXRlIHRoZSBzYW1lIGltYWdlIHJ1bnMgYXMgYSBuYXRpdmUgRGVwbG95bWVudCAob3IgYSBEYWVtb25TZXQpIHBsdXMgYSBTZXJ2aWNlLCBwcm92aXNpb25lZCBhdCB0aGUgYnVpbGQgYW5kIHJlYWNoZWQgYnkgdGhlIGNsdXN0ZXIncyBvd24gbG9hZCBiYWxhbmNlci4gVGVuc29yOSBpcyBub3QgaW4gdGhlIHNlcnZpY2UncyB0cmFmZmljIHBhdGguIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVrOHMtaHciIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMTYiIHk9IjQ2IiB3aWR0aD0iMzU4IiBoZWlnaHQ9IjEzMiIgcng9IjE0IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMzAiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzk0YTNiOCI+T04gQVdTIFRPREFZPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iODYiIHdpZHRoPSI4NCIgaGVpZ2h0PSI2MCIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjcyIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTEuNXB4Ij5Zb3VyIGltYWdlPC90ZXh0Pgo8dGV4dCB4PSI3MiIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Y29udGFpbmVyPC90ZXh0Pgo8bGluZSB4MT0iMTE0IiB5MT0iMTE2IiB4Mj0iMTQ2IiB5Mj0iMTE2IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlazhzLWh3KSIvPgo8cmVjdCB4PSIxNDgiIHk9Ijg2IiB3aWR0aD0iMTE0IiBoZWlnaHQ9IjYwIiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMjA1IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTEuNXB4Ij5FQ1Mgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iMjA1IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5vbiBGYXJnYXRlPC90ZXh0Pgo8bGluZSB4MT0iMjYyIiB5MT0iMTE2IiB4Mj0iMjkwIiB5Mj0iMTE2IiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlazhzLWh3KSIvPgo8cmVjdCB4PSIyOTIiIHk9Ijg2IiB3aWR0aD0iNzAiIGhlaWdodD0iNjAiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIzMjciIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5BTEI8L3RleHQ+Cjx0ZXh0IHg9IjMyNyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dHJhZmZpYzwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIzNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC13ZWlnaHQ6NzAwIj5jb21waWxlZCBhdCB0aGUgYnVpbGQ8L3RleHQ+CjxyZWN0IHg9IjQ2MiIgeT0iNDYiIHdpZHRoPSIzNjIiIGhlaWdodD0iMTMyIiByeD0iMTQiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI0NzYiIHk9IjY0IiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+T04gQSBDTFVTVEVSIFlPVSBPUEVSQVRFPC90ZXh0Pgo8cmVjdCB4PSI0NzYiIHk9IjgwIiB3aWR0aD0iODAiIGhlaWdodD0iNTYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI1MTYiIHk9IjEwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMS41cHgiPlNhbWUgaW1hZ2U8L3RleHQ+Cjx0ZXh0IHg9IjUxNiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnVuY2hhbmdlZDwvdGV4dD4KPGxpbmUgeDE9IjU1NiIgeTE9IjEwOCIgeDI9IjU4NCIgeTI9IjEwOCIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWs4cy1odykiLz4KPHJlY3QgeD0iNTg4IiB5PSI4MCIgd2lkdGg9IjE0OCIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjY2MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+TmF0aXZlIHdvcmtsb2FkPC90ZXh0Pgo8dGV4dCB4PSI2NjIiIHk9IjEyMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+RGVwbG95bWVudCBvciBEYWVtb25TZXQ8L3RleHQ+CjxsaW5lIHgxPSI3MzYiIHkxPSIxMDgiIHgyPSI3NjIiIHkyPSIxMDgiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VrOHMtaHcpIi8+CjxyZWN0IHg9Ijc2NiIgeT0iODAiIHdpZHRoPSI1MiIgaGVpZ2h0PSI1NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9Ijc5MiIgeT0iMTA0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEwcHgiPkNsdXN0ZXI8L3RleHQ+Cjx0ZXh0IHg9Ijc5MiIgeT0iMTIwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+TEI8L3RleHQ+Cjx0ZXh0IHg9IjY0MyIgeT0iMTY0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXdlaWdodDo3MDAiPnRoZSBhZGFwdGVyIGlzIG5vdCBpbiB0aGlzIHBhdGg8L3RleHQ+Cjwvc3ZnPg==" alt="Before: on AWS your container image runs as an ECS service on Fargate behind an Application Load Balancer. After: on a Kubernetes cluster you already operate the same image runs as a native Deployment (or a DaemonSet) plus a Service, provisioned at the build and reached by the cluster's own load balancer. Tensor9 is not in the service's traffic path." />
</div>

<p className="t9-caption">Your task definition and service are compiled into native Kubernetes on a cluster you operate at the build; afterward the cluster's own load balancer and runtime carry every request.</p>

#### The task definition and service

A **task definition** describes a main container and any helper containers (sidecars). Tensor9 translates them into a multi-container **Pod** and copies the image to your registry during the build. Fargate expresses compute as a CPU value in \{0.25 … 16} vCPU with tied memory bands; on the target cluster that becomes Pod `requests` and `limits`, which are not restricted to Fargate's fixed size combinations. Requested resources must fit node capacity, scheduler rules and quota.

An ECS service keeps a **desired count** of tasks always on. That maps directly to a Deployment's `replicas`, the desired replica count, not a guaranteed number of ready pods; scale-to-zero is not the default and is added only if you want it (KEDA or Knative). **Application Auto Scaling** becomes a **HorizontalPodAutoscaler** on CPU, memory, or a custom metric, and a rolling update maps to the Deployment's own `RollingUpdate` with `maxSurge` and `maxUnavailable`. For other ECS operations, the **DAEMON** strategy becomes a **DaemonSet** (one Pod per node), and **ECS Exec** becomes `kubectl exec` into the Pod.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlazhzLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMwNTk2NjkiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OSI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM0NzU1NjkiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNDc1NTY5Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWs4cy10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIHRoZSB0YXJnZXQgY2x1c3RlcjwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjMyIiB2aWV3Qm94PSIwIDAgODM2IDIzMiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJBIHRhc2sgZGVmaW5pdGlvbiB3aXRoIG9uZSBvciBtb3JlIGNvbnRhaW5lcnMsIGFuIGltYWdlLCBhbmQgYSBjcHUtYW5kLW1lbW9yeSBzaXppbmcgYmVjb21lcyBhIEt1YmVybmV0ZXMgUG9kIHNwZWMsIGFuZCBhbiBFQ1Mgc2VydmljZSB3aXRoIGEgZGVzaXJlZCBjb3VudCBiZWNvbWVzIGEgRGVwbG95bWVudCB3aXRoIHRoYXQgbWFueSByZXBsaWNhcy4gRmFyZ2F0ZSBjcHUgYW5kIG1lbW9yeSBiZWNvbWUgUG9kIHJlcXVlc3RzIGFuZCBsaW1pdHMgd2l0aGluIG5vZGUgY2FwYWNpdHkgYW5kIHF1b3RhLiBUaGUgREFFTU9OIHN0cmF0ZWd5IGJlY29tZXMgYSBEYWVtb25TZXQgYW5kIEVDUyBFeGVjIGJlY29tZXMga3ViZWN0bCBleGVjLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJlazhzLXRkIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiMyMGY3YjQiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjI0IiB5PSIzMCIgd2lkdGg9IjI4NiIgaGVpZ2h0PSIxMjAiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSIxNjciIHk9IjUyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExLjVweCI+dGFzayBkZWZpbml0aW9uICsgc2VydmljZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9Ijc4IiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkOCI+Y29udGFpbmVycyDCtyBpbWFnZTwvdGV4dD4KPHRleHQgeD0iNDIiIHk9IjEwMCIgc3R5bGU9ImZvbnQ6IDExcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDgiPmNwdTogMTAyNCDCtyBtZW1vcnk6IDIwNDg8L3RleHQ+Cjx0ZXh0IHg9IjQyIiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMXB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4Ij5kZXNpcmVkQ291bnQ6IDMgwrcgYXV0b3NjYWxpbmc8L3RleHQ+Cjx0ZXh0IHg9IjE2NyIgeT0iMTQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGhlIHVuaXQgdGhhdCBpcyB0cmFuc2xhdGVkPC90ZXh0Pgo8bGluZSB4MT0iMzEwIiB5MT0iOTAiIHgyPSIzNzIiIHkyPSI5MCIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWs4cy10ZCkiLz4KPHRleHQgeD0iMzQxIiB5PSI4MiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjlweCI+YXQgdGhlIGJ1aWxkPC90ZXh0Pgo8cmVjdCB4PSIzNzYiIHk9IjMwIiB3aWR0aD0iNDM2IiBoZWlnaHQ9IjEyMCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS42Ii8+Cjx0ZXh0IHg9IjU5NCIgeT0iNTIiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTEuNXB4Ij5hIERlcGxveW1lbnQgKyBTZXJ2aWNlIG9uIHRoZSB0YXJnZXQgY2x1c3RlcjwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSI3OCIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+UG9kIHNwZWMgwrcgZXZlcnkgY29udGFpbmVyLCBuYXRpdmU8L3RleHQ+Cjx0ZXh0IHg9IjM5NCIgeT0iMTAwIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5jcHUgwrcgbWVtb3J5IOKGkiByZXF1ZXN0cyAvIGxpbWl0cyB3aXRoaW4gY2x1c3RlciBjYXBhY2l0eTwvdGV4dD4KPHRleHQgeD0iMzk0IiB5PSIxMjIiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmRlc2lyZWRDb3VudCDihpIgcmVwbGljYXMgPSAzIMK3IGF1dG9zY2FsaW5nIOKGkiBIUEE8L3RleHQ+CjxyZWN0IHg9IjI0IiB5PSIxNjYiIHdpZHRoPSIzODYiIGhlaWdodD0iNDYiIHJ4PSIxMCIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSIyMTciIHk9IjE4NSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5EQUVNT04gc3RyYXRlZ3kg4oaSIGEgRGFlbW9uU2V0PC90ZXh0Pgo8dGV4dCB4PSIyMTciIHk9IjIwMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPm9uZSBjb3B5IHBlciBob3N0IOKGkiBvbmUgUG9kIHBlciBub2RlPC90ZXh0Pgo8cmVjdCB4PSI0MjYiIHk9IjE2NiIgd2lkdGg9IjM4NiIgaGVpZ2h0PSI0NiIgcng9IjEwIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYxOSIgeT0iMTg1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjExcHgiPkVDUyBFeGVjIOKGkiBrdWJlY3RsIGV4ZWM8L3RleHQ+Cjx0ZXh0IHg9IjYxOSIgeT0iMjAyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YW4gaW50ZXJhY3RpdmUgc2hlbGwgaW50byB0aGUgcnVubmluZyBQb2Q8L3RleHQ+Cjwvc3ZnPg==" alt="A task definition with one or more containers, an image, and a cpu-and-memory sizing becomes a Kubernetes Pod spec, and an ECS service with a desired count becomes a Deployment with that many replicas. Fargate cpu and memory become Pod requests and limits within node capacity and quota. The DAEMON strategy becomes a DaemonSet and ECS Exec becomes kubectl exec." />
</div>

<p className="t9-caption">The task definition becomes a Pod spec and the service becomes a Deployment: containers and sizing become requests and limits, desiredCount becomes replicas, the DAEMON strategy becomes a DaemonSet, and ECS Exec becomes kubectl exec.</p>

#### Networking, discovery, and load balancing

ECS's **awsvpc** mode gives each task its own routable IP and security group. On the target cluster your CNI provides the same natively: every Pod gets its own individually-addressable IP, and a per-task security group maps to a **NetworkPolicy** to preserve network isolation between tasks. **Service discovery** by name, whether Cloud Map or DNS, is repointed at the build to a Kubernetes **Service** with cluster DNS, which is exactly ECS's name-based model; a ClusterIP Service plus DNS resolves the name the way Cloud Map did.

The service's `loadBalancer` block (the ALB or NLB target group its tasks register into) becomes a Kubernetes **Service** (type LoadBalancer or ClusterIP) plus an **Ingress** for host and path routing, with the target-group health check becoming the Pod's readiness probe. For supported routing rules, weights and certificates, see the [Application Load Balancer](/service-adapters/aws/networking-traffic/application-load-balancer) and [Network Load Balancer](/service-adapters/aws/networking-traffic/network-load-balancer) articles. This page places the Pod fleet behind that load balancer. For ECS Service Connect : a Service provides name-based discovery, but Service Connect's injected mesh proxy and its built-in metrics are partial and need an added service mesh (Istio or Linkerd), which you configure separately.

#### The cluster you operate

The compiled Deployment and Service run on a cluster **you already operate** (kubeadm, k3s, or kops, or a managed cluster you bring), and it runs on any deployment target the appliance does, including fully disconnected environments. For a self-operated cluster, the customer maintains the **control plane and nodes**, including API server, etcd, upgrades and availability. For a customer-provided managed cluster, its provider retains those responsibilities, and an ECS **capacity provider** maps to your own node pools and cluster-autoscaler, with a `FARGATE_SPOT` preference mapping to your spot node pools.

For a self-operated cluster, install and operate the required add-ons; for a customer-provided managed cluster, use its supported managed services. Required components include the ingress controller behind the Service-plus-Ingress mapping, the cluster autoscaler, the metrics or Prometheus stack, and the service mesh that hosts Service Connect's proxy. Confirm which components you operate and which are supplied by the cluster provider. Identity is native Kubernetes ServiceAccount and RBAC, covered next.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQ0IiB2aWV3Qm94PSIwIDAgODM2IDI0NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJVc2UgYW4gZXhpc3Rpbmcgc2VsZi1vcGVyYXRlZCBvciBtYW5hZ2VkIGNsdXN0ZXIuIENvbmZpcm0gd2hvIG9wZXJhdGVzIGl0cyBjb250cm9sIHBsYW5lLCBub2RlcywgaW5ncmVzcywgYXV0b3NjYWxpbmcsIG1ldHJpY3MsIEdhdGV3YXkgQVBJIGFuZCBzZWNyZXRzIGludGVncmF0aW9ucy4gRGlzY29ubmVjdGVkIG9wZXJhdGlvbiByZXF1aXJlcyB0aGVzZSBkZXBlbmRlbmNpZXMgdG8gYmUgYXZhaWxhYmxlIGxvY2FsbHkuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MiIgcng9IjEzIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+QU4gRVhJU1RJTkcgQ0xVU1RFUiDCtyBTRUxGLU9QRVJBVEVEIE9SIE1BTkFHRUQ8L3RleHQ+CjxyZWN0IHg9IjMwIiB5PSI1OCIgd2lkdGg9IjM2NiIgaGVpZ2h0PSIzMiIgcng9IjgiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2E3ZjNkMCIgc3Ryb2tlLXdpZHRoPSIxLjMiLz4KPHRleHQgeD0iMjEzIiB5PSI3OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjExcHgiPmNvbnRyb2wgcGxhbmUgwrcgeW91IG9yIHlvdXIgcHJvdmlkZXI8L3RleHQ+CjxyZWN0IHg9IjQwOCIgeT0iNTgiIHdpZHRoPSIzOTgiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjZmZmIiBzdHJva2U9IiNhN2YzZDAiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjYwNyIgeT0iNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMXB4Ij5jb25maXJtIG5vZGUgYW5kIHVwZ3JhZGUgcmVzcG9uc2liaWxpdGllczwvdGV4dD4KPHRleHQgeD0iMjgiIHk9IjEyNCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6Izk0YTNiOCI+UkVRVUlSRUQgQURELU9OUyDCtyBTRUxGLU9QRVJBVEVEIE9SIFBST1ZJREVSLU1BTkFHRUQ8L3RleHQ+CjxyZWN0IHg9IjIwIiB5PSIxMzQiIHdpZHRoPSIxOTIiIGhlaWdodD0iMzgiIHJ4PSI5IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjExNiIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweCI+aW5ncmVzcyBjb250cm9sbGVyPC90ZXh0Pgo8cmVjdCB4PSIyMjQiIHk9IjEzNCIgd2lkdGg9IjE5MiIgaGVpZ2h0PSIzOCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMzIwIiB5PSIxNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5jbHVzdGVyIGF1dG9zY2FsZXI8L3RleHQ+CjxyZWN0IHg9IjQyOCIgeT0iMTM0IiB3aWR0aD0iMTkyIiBoZWlnaHQ9IjM4IiByeD0iOSIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI1MjQiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMC41cHgiPm1ldHJpY3MgLyBQcm9tZXRoZXVzPC90ZXh0Pgo8cmVjdCB4PSI2MzIiIHk9IjEzNCIgd2lkdGg9IjE4MCIgaGVpZ2h0PSIzOCIgcng9IjkiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNzIyIiB5PSIxNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTAuNXB4Ij5HYXRld2F5IC8gbWVzaDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjE4MiIgd2lkdGg9Ijc5MiIgaGVpZ2h0PSIzNiIgcng9IjkiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iNDE2IiB5PSIyMDQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5PcGVyYXRlIHRoZSBjbHVzdGVyIGNvbXBvbmVudHMgb3IgdXNlIHNlcnZpY2VzIHN1cHBsaWVkIGJ5IGl0cyBwcm92aWRlci48L3RleHQ+Cjx0ZXh0IHg9IjI4IiB5PSIyMzgiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiOyBmaWxsOiM5NGEzYjgiPkNhcGFjaXR5IHByb3ZpZGVycyDihpIgeW91ciBub2RlIHBvb2xzIC8gY2x1c3Rlci1hdXRvc2NhbGVyIMK3IEZBUkdBVEVfU1BPVCDihpIgeW91ciBzcG90IG5vZGUgcG9vbHM8L3RleHQ+Cjwvc3ZnPg==" alt="Use an existing self-operated or managed cluster. Confirm who operates its control plane, nodes, ingress, autoscaling, metrics, Gateway API and secrets integrations. Disconnected operation requires these dependencies to be available locally." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjQ0IiB2aWV3Qm94PSIwIDAgODM2IDI0NCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJVc2UgYW4gZXhpc3Rpbmcgc2VsZi1vcGVyYXRlZCBvciBtYW5hZ2VkIGNsdXN0ZXIuIENvbmZpcm0gd2hvIG9wZXJhdGVzIGl0cyBjb250cm9sIHBsYW5lLCBub2RlcywgaW5ncmVzcywgYXV0b3NjYWxpbmcsIG1ldHJpY3MsIEdhdGV3YXkgQVBJIGFuZCBzZWNyZXRzIGludGVncmF0aW9ucy4gRGlzY29ubmVjdGVkIG9wZXJhdGlvbiByZXF1aXJlcyB0aGVzZSBkZXBlbmRlbmNpZXMgdG8gYmUgYXZhaWxhYmxlIGxvY2FsbHkuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxyZWN0IHg9IjE2IiB5PSIyOCIgd2lkdGg9IjgwNCIgaGVpZ2h0PSI3MiIgcng9IjEzIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjMwIiB5PSI0OCIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPkFOIEVYSVNUSU5HIENMVVNURVIgwrcgU0VMRi1PUEVSQVRFRCBPUiBNQU5BR0VEPC90ZXh0Pgo8cmVjdCB4PSIzMCIgeT0iNTgiIHdpZHRoPSIzNjYiIGhlaWdodD0iMzIiIHJ4PSI4IiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDY2NTMiIHN0cm9rZS13aWR0aD0iMS4zIi8+Cjx0ZXh0IHg9IjIxMyIgeT0iNzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMXB4Ij5jb250cm9sIHBsYW5lIMK3IHlvdSBvciB5b3VyIHByb3ZpZGVyPC90ZXh0Pgo8cmVjdCB4PSI0MDgiIHk9IjU4IiB3aWR0aD0iMzk4IiBoZWlnaHQ9IjMyIiByeD0iOCIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q2NjUzIiBzdHJva2Utd2lkdGg9IjEuMyIvPgo8dGV4dCB4PSI2MDciIHk9Ijc4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTFweCI+Y29uZmlybSBub2RlIGFuZCB1cGdyYWRlIHJlc3BvbnNpYmlsaXRpZXM8L3RleHQ+Cjx0ZXh0IHg9IjI4IiB5PSIxMjQiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTRhM2I4Ij5SRVFVSVJFRCBBREQtT05TIMK3IFNFTEYtT1BFUkFURUQgT1IgUFJPVklERVItTUFOQUdFRDwvdGV4dD4KPHJlY3QgeD0iMjAiIHk9IjEzNCIgd2lkdGg9IjE5MiIgaGVpZ2h0PSIzOCIgcng9IjkiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjIiLz4KPHRleHQgeD0iMTE2IiB5PSIxNTciIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTAuNXB4Ij5pbmdyZXNzIGNvbnRyb2xsZXI8L3RleHQ+CjxyZWN0IHg9IjIyNCIgeT0iMTM0IiB3aWR0aD0iMTkyIiBoZWlnaHQ9IjM4IiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSIzMjAiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPmNsdXN0ZXIgYXV0b3NjYWxlcjwvdGV4dD4KPHJlY3QgeD0iNDI4IiB5PSIxMzQiIHdpZHRoPSIxOTIiIGhlaWdodD0iMzgiIHJ4PSI5IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS4yIi8+Cjx0ZXh0IHg9IjUyNCIgeT0iMTU3IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEwLjVweCI+bWV0cmljcyAvIFByb21ldGhldXM8L3RleHQ+CjxyZWN0IHg9IjYzMiIgeT0iMTM0IiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjM4IiByeD0iOSIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI3MjIiIHk9IjE1NyIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHgiPkdhdGV3YXkgLyBtZXNoPC90ZXh0Pgo8cmVjdCB4PSIyMCIgeT0iMTgyIiB3aWR0aD0iNzkyIiBoZWlnaHQ9IjM2IiByeD0iOSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuMiIvPgo8dGV4dCB4PSI0MTYiIHk9IjIwNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPk9wZXJhdGUgdGhlIGNsdXN0ZXIgY29tcG9uZW50cyBvciB1c2Ugc2VydmljZXMgc3VwcGxpZWQgYnkgaXRzIHByb3ZpZGVyLjwvdGV4dD4KPHRleHQgeD0iMjgiIHk9IjIzOCIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDg7IGZpbGw6ICM5NGEzYjgiPkNhcGFjaXR5IHByb3ZpZGVycyDihpIgeW91ciBub2RlIHBvb2xzIC8gY2x1c3Rlci1hdXRvc2NhbGVyIMK3IEZBUkdBVEVfU1BPVCDihpIgeW91ciBzcG90IG5vZGUgcG9vbHM8L3RleHQ+Cjwvc3ZnPg==" alt="Use an existing self-operated or managed cluster. Confirm who operates its control plane, nodes, ingress, autoscaling, metrics, Gateway API and secrets integrations. Disconnected operation requires these dependencies to be available locally." />
</div>

<p className="t9-caption">Use the existing cluster and confirm who operates its control plane, nodes and add-ons.</p>

#### Pod identity: the task role

An ECS task's **task role** is the same idea as EKS's IRSA: the identity the app's own code assumes. On the managed targets that federates to a cloud workload identity through the cluster's OIDC provider, while an existing cluster uses its configured identity integrations. Cluster API identity is native **Kubernetes ServiceAccount and RBAC**, which you own: the ServiceAccount is the workload's identity inside the cluster, and RBAC governs what it may do against the Kubernetes API. Separately, AWS API calls handled by Tensor9 use the selected credential adapter and task-role policy. Calls to real external cloud services need credentials authorized by that cloud, using the cluster's federation or secret configuration.

The Tensor9 appliance still **reflects** the task role from the Pod's injected identity, so `aws sts get-caller-identity` and `iam:GetRole` answer as the task's own role. The **execution role** (the one ECS itself used to pull the image, fetch secrets, and write logs) is not needed, because the cluster owns image pull and log delivery.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJLdWJlcm5ldGVzIFNlcnZpY2VBY2NvdW50cyBhbmQgUkJBQyBnb3Zlcm4gY2x1c3RlciBhY2Nlc3MuIEFXUyBhZGFwdGVyIGNhbGxzIHVzZSB0YXNrLXJvbGUgc2Vzc2lvbnMuIFJlYWwgZXh0ZXJuYWwgY2xvdWQgYWNjZXNzIHVzZXMgc2VwYXJhdGVseSBjb25maWd1cmVkIGNyZWRlbnRpYWxzIG9yIGZlZGVyYXRpb24uIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVrOHMtaWQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzA1OTY2OSIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTE0IiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMXB4Ij5FQ1MgdGFzayByb2xlPC90ZXh0Pgo8dGV4dCB4PSIxMTQiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzQ3NTU2OTsgZm9udC1zaXplOjEwcHg7ZmlsbDojMzM0MTU1Ij50YXNrUm9sZUFybjwvdGV4dD4KPHRleHQgeD0iMTE0IiB5PSIxMjMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj50aGUgYXBwJ3Mgb3duIGlkZW50aXR5PC90ZXh0Pgo8bGluZSB4MT0iMjA4IiB5MT0iNzciIHgyPSIyNTAiIHkyPSI3NyIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWs4cy1pZCkiLz4KPHJlY3QgeD0iMjU0IiB5PSI0MCIgd2lkdGg9IjMwMiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjQwNSIgeT0iNjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTEuNXB4Ij5uYXRpdmUgU2VydmljZUFjY291bnQgKyBSQkFDPC90ZXh0Pgo8dGV4dCB4PSI0MDUiIHk9Ijg2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5jbHVzdGVyIEFQSSBpZGVudGl0eTwvdGV4dD4KPHRleHQgeD0iNDA1IiB5PSIxMDMiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPkFXUyBhZGFwdGVyIHNlc3Npb25zIC8gZXh0ZXJuYWwgY2xvdWQgY3JlZGVudGlhbHM8L3RleHQ+CjxsaW5lIHgxPSI1NTYiIHkxPSI3NyIgeDI9IjU5OCIgeTI9Ijc3IiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNlazhzLWlkKSIvPgo8cmVjdCB4PSI2MDIiIHk9IjQ0IiB3aWR0aD0iMjE0IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSI3MDkiIHk9IjcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEwLjVweDtmaWxsOiM5NGEzYjgiPmV4dGVybmFsIGNsb3VkIGFjY2VzczwvdGV4dD4KPHRleHQgeD0iNzA5IiB5PSI5MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPmNyZWRlbnRpYWxzIG9yIGZlZGVyYXRpb248L3RleHQ+Cjx0ZXh0IHg9IjcwOSIgeT0iMTA2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzY0NzQ4YiI+ZXhpc3RpbmcgY2x1c3RlciBpbnRlZ3JhdGlvbjwvdGV4dD4KPHRleHQgeD0iNDE4IiB5PSIxNTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5UYXNrLXJvbGUgc2Vzc2lvbnMgYXV0aG9yaXplIEFXUyBzZXJ2aWNlIGFkYXB0ZXIgY2FsbHM7IGV4dGVybmFsLWNsb3VkIGFjY2VzcyBpcyBjb25maWd1cmVkIHNlcGFyYXRlbHkuPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPklkZW50aXR5IGlzIG5hdGl2ZSBLdWJlcm5ldGVzIFNlcnZpY2VBY2NvdW50IGFuZCBSQkFDIMK3IHlvdSBvd24gaXQuPC90ZXh0Pgo8L3N2Zz4=" alt="Kubernetes ServiceAccounts and RBAC govern cluster access. AWS adapter calls use task-role sessions. Real external cloud access uses separately configured credentials or federation." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMTk2IiB2aWV3Qm94PSIwIDAgODM2IDE5NiIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJLdWJlcm5ldGVzIFNlcnZpY2VBY2NvdW50cyBhbmQgUkJBQyBnb3Zlcm4gY2x1c3RlciBhY2Nlc3MuIEFXUyBhZGFwdGVyIGNhbGxzIHVzZSB0YXNrLXJvbGUgc2Vzc2lvbnMuIFJlYWwgZXh0ZXJuYWwgY2xvdWQgYWNjZXNzIHVzZXMgc2VwYXJhdGVseSBjb25maWd1cmVkIGNyZWRlbnRpYWxzIG9yIGZlZGVyYXRpb24uIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImVrOHMtaWQiIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzIwZjdiNCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iMjAiIHk9IjQ0IiB3aWR0aD0iMTg4IiBoZWlnaHQ9IjY2IiByeD0iMTIiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iMTE0IiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMXB4Ij5FQ1MgdGFzayByb2xlPC90ZXh0Pgo8dGV4dCB4PSIxMTQiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjEwcHg7ZmlsbDogI2M5Y2ZkOCI+dGFza1JvbGVBcm48L3RleHQ+Cjx0ZXh0IHg9IjExNCIgeT0iMTIzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+dGhlIGFwcCdzIG93biBpZGVudGl0eTwvdGV4dD4KPGxpbmUgeDE9IjIwOCIgeTE9Ijc3IiB4Mj0iMjUwIiB5Mj0iNzciIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2VrOHMtaWQpIi8+CjxyZWN0IHg9IjI1NCIgeT0iNDAiIHdpZHRoPSIzMDIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSI0MDUiIHk9IjY2IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjExLjVweCI+bmF0aXZlIFNlcnZpY2VBY2NvdW50ICsgUkJBQzwvdGV4dD4KPHRleHQgeD0iNDA1IiB5PSI4NiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+Y2x1c3RlciBBUEkgaWRlbnRpdHk8L3RleHQ+Cjx0ZXh0IHg9IjQwNSIgeT0iMTAzIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5BV1MgYWRhcHRlciBzZXNzaW9ucyAvIGV4dGVybmFsIGNsb3VkIGNyZWRlbnRpYWxzPC90ZXh0Pgo8bGluZSB4MT0iNTU2IiB5MT0iNzciIHgyPSI1OTgiIHkyPSI3NyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjZWs4cy1pZCkiLz4KPHJlY3QgeD0iNjAyIiB5PSI0NCIgd2lkdGg9IjIxNCIgaGVpZ2h0PSI2NiIgcng9IjEyIiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iNzA5IiB5PSI3MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMC41cHg7ZmlsbDogIzk0YTNiOCI+ZXh0ZXJuYWwgY2xvdWQgYWNjZXNzPC90ZXh0Pgo8dGV4dCB4PSI3MDkiIHk9IjkwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+Y3JlZGVudGlhbHMgb3IgZmVkZXJhdGlvbjwvdGV4dD4KPHRleHQgeD0iNzA5IiB5PSIxMDYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5leGlzdGluZyBjbHVzdGVyIGludGVncmF0aW9uPC90ZXh0Pgo8dGV4dCB4PSI0MTgiIHk9IjE1MCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNmZDgiPlRhc2stcm9sZSBzZXNzaW9ucyBhdXRob3JpemUgQVdTIHNlcnZpY2UgYWRhcHRlciBjYWxsczsgZXh0ZXJuYWwtY2xvdWQgYWNjZXNzIGlzIGNvbmZpZ3VyZWQgc2VwYXJhdGVseS48L3RleHQ+Cjx0ZXh0IHg9IjQxOCIgeT0iMTcwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+SWRlbnRpdHkgaXMgbmF0aXZlIEt1YmVybmV0ZXMgU2VydmljZUFjY291bnQgYW5kIFJCQUMgwrcgeW91IG93biBpdC48L3RleHQ+Cjwvc3ZnPg==" alt="Kubernetes ServiceAccounts and RBAC govern cluster access. AWS adapter calls use task-role sessions. Real external cloud access uses separately configured credentials or federation." />
</div>

<p className="t9-caption">Kubernetes permissions, AWS adapter sessions and real external-cloud credentials have separate scopes.</p>

#### AWS request authorization

For supported AWS API calls, Tensor9 evaluates the task role's IAM policy against the verified caller, action and resource; a denial overrides an allowance. See [AWS request authorization](/service-adapters/aws/compute-containers/ecs#aws-request-authorization) for policy preparation, wildcard support and verified policy delivery.

Native external cloud permissions are granted separately, using credentials or federation authorized by that provider. Kubernetes RBAC separately governs the cluster API; AWS adapter policy evaluation remains local and can operate without a cloud IAM service.

#### Secrets and logging

The container's `environment` variables are set as-is, and its `secrets` references resolve from the cluster's own secret store, **Kubernetes Secrets** (often through the External Secrets Operator), the same store the SSM equivalence uses here. The `awslogs` log driver becomes **the target cluster's log stack**, with stdout and stderr delivered by the node's logging; a custom FireLens log router can run as a sidecar; configure its destination and credentials for the target logging service.

#### Limitations

Review the remaining service, deployment and networking differences below.

△ Where it diverges

* **ECS Service Connect's mesh is partial:** a Service provides name-based discovery, but the injected mesh proxy and its built-in metrics need an added service mesh (Istio / Linkerd) that you run.
* **Weighted blue-green or canary releases require extra tooling:** a plain rolling update is native; a weighted traffic split uses Gateway API, Argo Rollouts, or Flagger.
* **Capacity providers and Fargate Spot are the target cluster's own:** the cluster owns capacity via its node pools, so a capacity-provider strategy maps to your node pools and a Spot preference to your spot node pools.
* **Configure each credential path.** Kubernetes RBAC governs cluster access. AWS adapters use the task role; real external services require credentials or federation authorized by their provider.
* **The task-metadata endpoint is served read-only.** `169.254.170.2` (`ECS_CONTAINER_METADATA_URI_V4`), the ECS task-metadata API, is served read-only; other AWS calls use their corresponding adapters.

#### Other considerations

Plan persistent storage, cluster capacity, logging, and secret access before deployment.

* **Migrate mounted volumes separately:** a task definition and service hold no data, and the image is already a container image pulled into your own registry at the build, so adoption is a redeploy; any volume a task mounts (EFS, EBS) moves under its own service card.
* **Confirm cluster operating responsibilities.** For a self-operated cluster you maintain the control plane, nodes and add-ons. A customer-provided managed cluster retains its provider's control-plane and add-on services.
* **Cost is your own infrastructure.** `desiredCount` becomes always-on replicas running on nodes you provision, sized by your node pools rather than metered per Fargate task.
* **Telemetry and secrets are the cluster's own:** logs flow through the node's log stack and `secrets` resolve from Kubernetes Secrets (often via External Secrets), so there is no CloudWatch or Secrets Manager in the path; observability is whatever the cluster runs.

#### Runtime tasks on your cluster

Your cluster supplies scheduling, capacity and task execution. Kubernetes RBAC controls its API; selected credentials separately authorize AWS adapter calls. Check task readiness and container exits rather than treating request acceptance as successful execution. See [runtime task execution](/service-adapters/aws/compute-containers/ecs#runtime-task-execution) for supported task-definition and task-lifecycle calls.

[Service Catalog](/service-adapters/catalog).
