Capability Library · Pack detail

kubernetes v1.0.0

Kubernetes API on the customer's own cluster: list namespaces, deployments and pods, create and scale deployments, and delete deployments and namespaces.

Review state: draft· Not in the distributable release manifest

Release identity

SHA-256 of the pack file bytes: d8c35dc15c61c7f6327001fd883bed91be345ac6207634a901364ae792001c0a

Not in the distributable release manifest. The binary carries a digest-bound manifest of the distributable library; a pack whose bytes differ from its manifest entry — endpoint, tier, allowlist, or credential edited, with provider, version, and review block preserved — fails the digest check, loses distributability, and renders MODIFIED rather than as the shipped reviewed artifact. Review state and artifact status are different facts: the first is a documentation-review declaration, the second is the identity of the exact bytes.

Capabilities (7)

kubernetes.namespaces.read v1.0.0R0

Action
read
Endpoint
GET https://k8s-apiserver.invalid/api/v1/namespaces
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

List the cluster's namespaces: names, phases and labels, which reveal internal tenancy topology. Per the retrieved Namespace API reference the endpoint supports label and field selectors and pagination; the registered path covers the collection read only — single-namespace reads (GET /api/v1/namespaces/{name}) are not registered by this pack. The host is a reserved placeholder: substitute the cluster's API server endpoint before enabling.

kubernetes.deployments.read v1.0.0R0

Action
read
Endpoint
GET https://k8s-apiserver.invalid/apis/apps/v1/namespaces/NAMESPACE/deployments
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

List the Deployments in one namespace: names, replica counts, rollout strategy and the full pod template, which reveals images, volume wiring — and, per the retrieved Pod API reference embedded in the template, literal environment-variable VALUES, command arguments and annotations. Secret references appear by name only and are not dereferenced, but plaintext credentials written as literal env values in the template would be exposed by this read. Per the retrieved Deployment API reference the endpoint supports label and field selectors and pagination; the registered path covers the namespaced collection read only — the cluster-wide list (GET /apis/apps/v1/deployments) and single-object reads are not registered. NAMESPACE is a placeholder the deployment binds before enabling.

kubernetes.pods.read v1.0.0R0

Action
read
Endpoint
GET https://k8s-apiserver.invalid/api/v1/namespaces/NAMESPACE/pods
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

List the Pods in one namespace: names, phases, container specs and status. Read the disclosure honestly: per the retrieved Pod API reference the returned specifications include literal environment-variable VALUES (env value fields), command and argument arrays, annotations and node placement, alongside secret and configmap references — secret VALUES are not dereferenced by this read (secretKeyRef entries appear by name only), but a workload that carries credentials as literal env values or command arguments exposes them in this response, so the absence of dereferencing is no guarantee that no plaintext credentials are returned. The registered path covers the namespaced collection read only — the cluster-wide list (GET /api/v1/pods), single-pod reads and pods/log are not registered; reading Secrets is a documented exclusion of this pack. NAMESPACE is a placeholder the deployment binds before enabling.

kubernetes.deployment.create v1.0.0R3

Actions
create, deploy
Endpoint
POST https://k8s-apiserver.invalid/apis/apps/v1/namespaces/NAMESPACE/deployments
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

Create one Deployment in one namespace. Judged by effect: the body is an unrestricted Deployment spec (per the retrieved Deployment API reference) that selects container images, replica counts, the pod's service account, volume mounts including host paths, and security contexts — creating a Deployment is running caller-chosen code on the cluster — so the capability declares create and deploy at the R3 floor, and deploy is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer); an installer's intention to submit only benign specs is not a restriction. The dryRun query parameter exists in the API but does not change what this registration permits. NAMESPACE is a placeholder the deployment binds before enabling.

kubernetes.deployment.scale v1.0.0R3

Actions
update, deploy
Endpoint
PUT https://k8s-apiserver.invalid/apis/apps/v1/namespaces/NAMESPACE/deployments/NAME/scale
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

Replace one Deployment's replica count through its scale subresource (a Scale object body, not a full Deployment spec). Registered as update AND deploy at the R3 floor: scaling a live workload changes running production capacity immediately — scaling to zero takes the workload offline and a large scale-up consumes cluster capacity — a deploy-equivalent reconfiguration of live infrastructure, and deploy is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer); the previous replica count being re-settable does not remove the live-traffic effect. The generic PATCH on the Deployment object is deliberately not registered (its unrestricted body would admit the same code-selection effects as creation); this registration covers the scale subresource only. NAMESPACE and NAME are placeholders the deployment binds before enabling.

kubernetes.deployment.delete v1.0.0R3

Action
delete
Endpoint
DELETE https://k8s-apiserver.invalid/apis/apps/v1/namespaces/NAMESPACE/deployments/NAME
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

Delete one Deployment; per the retrieved Deployment API reference the call accepts a DeleteOptions body, a grace period and a propagation policy, and the default cascade deletes the Deployment's ReplicaSets and Pods with it — the running workload stops. Delete is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer) at the R3 floor; re-applying the manifest later is a new creation, not an undo, and any pod state that was not persisted elsewhere is gone. The deletecollection form (DELETE on the collection, bulk deletion by label selector) is deliberately not registered. NAMESPACE and NAME are placeholders the deployment binds before enabling.

kubernetes.namespace.delete v1.0.0R3

Action
delete
Endpoint
DELETE https://k8s-apiserver.invalid/api/v1/namespaces/NAME
Connector
http
Custody
customer_vault
Credential ref
secret-ref-kubernetes-sa-token
Data class
internal

Delete one namespace and, through the namespace controller, every object in it — workloads, services, configmaps, secrets and volume claims — with the namespace passing through the Terminating phase documented in the retrieved Namespace API reference while finalizers complete. This is among the highest-blast-radius operations a cluster offers; delete is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer) at the R3 floor, and an irreversible action cannot be taken without a person. The /finalize subresource (which can force-remove finalizers from a stuck namespace and strand its resources) is deliberately not registered. NAME is a placeholder the deployment binds before enabling.

Credential reference

The pack names a reference, never a secret. Installing a pack registers capabilities and makes them governable; registration is not connectivity. The credential is created at the provider and held in the client's own secret manager under the reference the pack names, and deployment testing is still required to show the credential path works and cannot be bypassed.

Reference
secret-ref-kubernetes-sa-token
Custody
customer_vault
Injection
header (Authorization)

A service-account bearer token for the customer's own cluster, held in the client's own secret manager. The stored material must be the complete Authorization header value: the scheme 'Bearer', one separating space, then the signed JWT — 'Bearer <token>'. Issuance is external and belongs to the cluster: a cluster administrator creates a dedicated ServiceAccount for this integration and mints a token with 'kubectl create token <name>' (the TokenRequest API), optionally bound to an audience and a lifetime — per the retrieved authentication reference the created token is a signed JWT, service accounts authenticate as system:serviceaccount:(NAMESPACE):(SERVICEACCOUNT), and their bearer tokens are valid from outside the cluster. Prefer short-lived bound tokens from TokenRequest over legacy Secret-based tokens: a bound token expires on its own (the exp claim) and fails closed afterward, while legacy Secret-based tokens do not expire and remain valid until the Secret is deleted — and note that with the API server's service-account lookup enabled, deleting the token Secret revokes it, but merely stopping new issuance (removing the right to call TokenRequest) does NOT invalidate already-issued unexpired tokens: and per the retrieved TokenRequest reference a token bound to an object via boundObjectRef is valid only for as long as the bound object exists, so deleting the bound object (a Pod or Secret) invalidates such a token; a token bound only to the service account itself cannot be individually revoked before expiry, and revoking it means deleting the service account or rotating the cluster's signing keys. Rotation therefore sits with an external deployment custody job that re-mints and re-stores the value before expiry; the executor injects the stored value verbatim and performs no token lifecycle of its own. Least privilege, distinguishing scopes: namespaces are cluster-scoped objects, so listing or deleting them requires a ClusterRole/ClusterRoleBinding, while deployments, pods and the scale subresource are namespaced and should be granted by Role/RoleBinding in only the namespaces the deployment binds. Grant list (not merely get) for the registered collection reads on namespaces, deployments and pods; create on deployments for the create capability; update specifically on the deployments/scale SUBRESOURCE for the scale capability — general update on deployments is not required for it and must not be granted; and delete on deployments and namespaces only where the delete capabilities are enabled — never cluster-admin. Executor hygiene: the value must live only in executor memory for the lifetime of a call, must never be written to logs, traces or diagnostics, and must not appear in crash dumps; a deployment that cannot meet that bar must not enable the pack.

Resources

  • kubernetes-cluster (api, internal): https://k8s-apiserver.invalid

Pack notes and exclusions

The endpoint host 'k8s-apiserver.invalid' is a reserved non-production placeholder (an RFC 2606 reserved TLD): substitute the customer's cluster API server endpoint (host and, where non-standard, host:port) before enabling, in every endpoint, in the resource locator and in every egress allowlist entry. The allowlist matches exactly, so endpoints and allowlist must be substituted together, and substitution is a required deployment step. NAMESPACE and NAME in the endpoint paths are placeholders the deployment binds to concrete objects before enabling; this pack registers namespaced collection reads only — the cluster-wide list forms (GET /apis/apps/v1/deployments, GET /api/v1/pods across all namespaces) are not registered. The Kubernetes API is served over HTTPS with the cluster's own certificate authority, so the executor must trust the cluster CA; the egress allowlist governs the destination only and is not a TLS-trust statement. Tiering rationale: deployment creation registers as create AND deploy at the R3 floor, judged by effect — the body is an unrestricted Deployment spec (per the retrieved Deployment API reference), which selects container images, replica counts, service accounts, volume mounts and security contexts, so creating a Deployment is running caller-chosen code on the cluster, and deploy is one of the IRREVERSIBLE ACTIONS (delete, send, pay, deploy, approve, share and transfer); an installer's intention to pass only benign specs is not a restriction. Deployment deletion and namespace deletion register as delete at the R3 floor: deleting a Deployment deletes its ReplicaSets and Pods through the cascade, and deleting a namespace deletes every object in the namespace. Scaling registers as update AND deploy at the R3 floor: the scale subresource replaces the running replica count of a live workload — a deploy-equivalent reconfiguration of live infrastructure (scaling to zero takes the workload offline) — and the count's practical reversibility is not grounds for avoiding the deploy verb. Documented exclusions — this pack does not register: reading Secrets (GET /api/v1/namespaces/{ns}/secrets — the response IS the cluster's stored credentials, and per the retrieved authentication reference anyone who can read those Secrets can authenticate as the corresponding service account), pods/exec, pods/attach and pods/portforward (arbitrary command execution and network tunneling into containers — a different registration requiring its own review), pods/log, the deletecollection forms of every resource (bulk deletion by label selector), create/update/delete of RBAC objects (Roles, ClusterRoles and their bindings — privilege grant), node operations (cordon, drain, taints), PersistentVolumes and PersistentVolumeClaims, ServiceAccount and token creation, and every other Kubernetes API — a documented exclusion, not an approximated capability.

Review record

Draft review record dated 2026-09-21 · Reviewer: aaes-eng (an opaque id that resolves internally to the responsible reviewer)

A pack review is not a vendor or examiner attestation. A retrieval date says when a source page was read; it does not by itself establish what the page said then. No pack is vendor-endorsed, and none has been connectivity-tested against a live vendor tenant.