✦ For everyone, free.

Practical knowledge for real and everyday life

Home

Kubernetes API Aggregation Management

Kubernetes API Aggregation Management enables unified control of multiple API servers, enhancing scalability and consistency across diverse Kubernetes environments.

Kubernetes API Aggregation Management is the practice of registering, operating, and securing an aggregated API server, a separate server process that extends the Kubernetes API surface by handling requests for its own API group directly, proxied transparently through the main API server via an APIService registration, used when a CRD's generic schema-and-storage model is insufficient for the custom logic an extension requires.


When Aggregation Is Chosen Over CRDs

The Capability Gap CRDs Cannot Fill

A CRD provides generic storage and validation but no ability to execute custom logic synchronously during a request, no ability to serve computed, non-persisted data (as the Metrics API does), and no ability to implement storage backends other than etcd; an aggregated API server is chosen specifically when an extension needs one of these capabilities that the CRD model architecturally cannot provide.

apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  name: v1beta1.metrics.k8s.io
spec:
  service:
    name: metrics-server
    namespace: kube-system
  group: metrics.k8s.io
  version: v1beta1
  groupPriorityMinimum: 100
  versionPriority: 100
  insecureSkipTLSVerify: false
  caBundle: LS0tLS1CRUdJTi...
Aggregation Custom Logic Ephemeral Data Non-etcd Storage

Request Routing and Proxying

How the Main API Server Delegates

Once an APIService is registered, the main API server transparently proxies any request matching that group and version to the backing Service, after performing the same authentication and authorization checks it applies to any built-in resource, meaning the aggregated server receives a request that has already been authenticated by the front-end API server rather than needing to implement authentication itself.

kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes"

Priority Resolution Between Competing Registrations

spec:
  groupPriorityMinimum: 100
  versionPriority: 100

groupPriorityMinimum and versionPriority resolve ambiguity when multiple APIService registrations could theoretically serve overlapping discovery information, ensuring kubectl and client libraries consistently resolve to a single, well-defined server for any given group and version rather than receiving inconsistent results depending on registration order.


Implementing an Aggregated API Server

Reusing the Generic API Server Library

import "k8s.io/apiserver/pkg/server"

config := genericapiserver.NewRecommendedConfig(codecs)
server, err := config.Complete().New("custom-metrics-apiserver", genericapiserver.NewEmptyDelegate())

Most aggregated API servers are built on the same k8s.io/apiserver library the main Kubernetes API server itself uses, inheriting consistent behavior for authentication delegation, OpenAPI discovery document generation, and request handling patterns, rather than implementing an HTTP server from scratch.

Delegated Authentication and Authorization

apiVersion: v1
kind: ConfigMap
metadata:
  name: extension-apiserver-authentication
  namespace: kube-system

The aggregated server retrieves the cluster's authentication configuration (client CA, requestheader CA) from a well-known ConfigMap, allowing it to validate the identity the front-end API server has already authenticated via the X-Remote-User proxy headers, rather than re-implementing token or certificate validation independently.


Availability and Security Considerations

High Availability Requirement

apiVersion: apps/v1
kind: Deployment
metadata:
  name: custom-metrics-apiserver
spec:
  replicas: 2

Because every request to the registered API group is synchronously proxied through the aggregated server, an unavailable aggregated server makes its entire API group unavailable cluster-wide, with no fallback; running at least two replicas behind a Service is standard practice, mirroring the same availability requirement applied to conversion and admission webhooks.

TLS Between the Front-End and Aggregated Server

spec:
  caBundle: LS0tLS1CRUdJTi...
  insecureSkipTLSVerify: false

The caBundle field secures the connection from the main API server to the aggregated server itself, distinct from and in addition to the TLS trust clients establish with the main API server, meaning a misconfigured or expired caBundle here breaks aggregation entirely even though client-facing TLS to the main API server remains unaffected.


Discovery and OpenAPI Integration

Contributing to Cluster-Wide Discovery

kubectl api-resources | grep metrics.k8s.io
kubectl explain nodes.metrics.k8s.io

A correctly implemented aggregated API server contributes its resource types to the cluster's aggregated discovery document and OpenAPI schema, which is what allows kubectl api-resources, kubectl explain, and generic tooling to treat aggregated API resources indistinguishably from built-in or CRD-backed resources, despite being served by an entirely separate process.


Relationship to Extensibility Areas and the Extension Model

API aggregation management is the operational discipline behind one of the specific extensibility areas already introduced, chosen precisely when the generic CRD-and-controller pattern at the heart of the broader Kubernetes extension model cannot express what an extension needs, custom synchronous logic, ephemeral computed data, or an alternative storage backend, making aggregation the escape hatch for extensions whose requirements exceed what declarative custom resources and reconciliation loops alone can provide.

Client Main API server Aggregated