Skip to content

v2.5.0

Choose a tag to compare

@github-actions github-actions released this 27 Oct 17:43
· 4 commits to main since this release
20b8a9b

KubeBolt 2.5.0 — Kobi follows the investigation outside the cluster

Drop-in over 2.4.2. No schema change, no migration. Ships with agent
1.4.6, a chart-only update.

Impact
Kobi's evidence stopped at "cannot connect" a stopped database, a firewall rule that was removed, a queue full of dead letters or a quota that blocks a node pool were outside its reach; it could only say the dependency did not answer
Where a request came from, or went, was guesswork an address in an env var or a flow destination could be in the cluster, another of your clusters or a cloud service, and Kobi deduced which; the way in through an Ingress or a load balancer was never read
Kobi deduced what the cluster already records what a revision changed, which revision a rollback restores, who wrote a Secret and when, how long the errors lasted
An investigation was a wall of tool calls cards named after the tool ("get pod logs"), nothing to say what came back, and nothing summing up what Kobi read
One model for every question a large model even for a question inside one cluster, or a small one for an investigation that crosses into the cloud or another cluster

1. Kobi reads the cloud behind a workload

Cloud connectors let Kobi read the AWS and Azure resources a workload
depends on, through curated MCP servers:

Connector Server Credentials
Amazon Web Services AWS MCP Server, hosted by AWS an IAM role KubeBolt assumes with an external ID it generates, or the identity KubeBolt runs with
Microsoft Azure Azure MCP Server, a sidecar next to the API a read-only service principal held by the sidecar
Google Cloud — listed as Soon

AWS covers EKS and the EC2 and Auto Scaling behind its nodes, RDS and Aurora,
CloudWatch, load balancers and target health, security groups, network ACLs,
route tables and Route 53, ElastiCache, SQS, SNS, MSK, CloudTrail, AWS Health,
Service Quotas, IAM roles and ECR. Azure covers the activity log, platform
metrics, Resource Health, PostgreSQL, MySQL and Azure SQL servers, AKS,
quotas, Service Bus, Event Hubs, Container Registry, Key Vault expiry,
storage settings, Log Analytics and Advisor.

Read-only is enforced in layers:

  • an allowlist per connector, checked again at call time;
  • AWS calls a typed operation KubeBolt renders into a fixed read script and checks afterwards;
  • Azure values are type- and path-checked before they reach the sidecar;
  • results are redacted, capped at 32 KiB and handed to the model as data, never as instructions;
  • every call leaves an access record (mcp_tool_call), without its arguments or response.

Limits: 12 cloud calls per question, 120 per minute per install, 30 s per
call.

Set up in Administration › AI (Kobi) › Connectors. Each drawer prints
its setup steps:

  • AWS: the IAM role and its trust policy, with the external ID already in it;
  • Azure: the reader service principal and how to run the sidecar.

Each connector has a minimum role for the person asking (Editors and
admins
by default). The public /api/v1/mcp endpoint never serves connector
tools.

Deploying the Azure sidecar:

  • Helm: mcpConnectors.azure.sidecar.enabled=true with existingSecret naming a Secret with tenant-id, client-id and client-secret. It runs as a second container of the API pod: loopback only, read-only root filesystem, no ServiceAccount token.
  • Docker Compose: docker compose --profile azure up -d, with the credentials in deploy/.env.

The image is pinned by digest (3.0.0-beta.46) and scanned with the
release's own images.

On EKS, give the chart's ServiceAccount an IAM role (IRSA or Pod
Identity) and set mcpConnectors.aws.principalArn to it, so the printed
trust policy names it.

Guide: docs/guides/kobi-mcp-connectors.md.

2. Where a request comes from and goes

  • get_external_connections says what each address a workload calls is. It reads Hubble flows, or the workload's configuration when there is no Hubble, and classifies each address: inside the cluster, a cloud service (*.postgres.database.azure.com → Azure PostgreSQL, an RDS endpoint → RDS), or outside.
  • Another of your clusters. An address that is the load balancer of another cluster in KubeBolt is matched to it (LoadBalancer Services, Ingresses, Gateways; never externalIPs or spec hostnames). Kobi then offers to switch to that cluster.
  • The way in. A read of an Ingress or a LoadBalancer Service now carries how requests from outside reach the workload, so a healthy pod behind an unhealthy load balancer is no longer read as "it works".

3. The investigation, as it happens

  • Readable steps. Each step is a card with a readable title ("Logs · orders-api", or the cloud service and the operation it called) and a one-line digest of what came back. The digest counts and lists; it never interprets.
  • Leaving the cluster. A mark shows where Kobi leaves the cluster: "Leaves the cluster → AWS us-east-2 · read-only".
  • A summary at the end. When the question ends, the steps fold into a summary.
  • A footnote on cloud reads. An answer that read a cloud carries a footnote that says so, even with tool cards hidden.

4. Reads that answer instead of making Kobi deduce

  • What each revision changed, in get_workload_history, and the rollout state: which revision is current, which ones serve, where a rollback would go.
  • Who wrote a resource, how and when, from its field managers. KubeBolt's own writes now carry the field manager kubebolt (they read as server before).
  • Logs that say how long it lasted. get_pod_logs hands over the bursts of error lines with their start and end, and shows a line that repeats every few seconds once, with its count. For an AWS authorization error it lists each action and resource AWS refused, and what else guards that kind of resource.
  • Events whose count spans earlier episodes are marked.
  • A credential written as an env value stays out of Kobi's reads. get_resource_detail and get_resource_describe say that it is set, never what it is; a connection string keeps its host and loses its user:password. The UI's own detail view is unchanged.
  • A disconnected agent is reported as one. It is no longer read as the cluster being down.
  • Skills. 17 of KubeBolt's procedures, from a crash loop or a failing probe to an external dependency, a security finding or a rollback, are embedded in the binary and served by load_skill. A procedure costs nothing on the turns that do not use it.

5. Models

  • Escalation model. Kobi runs on the configured model and moves to a stronger one, for the rest of the conversation, the first time it leaves the selected cluster. That is a cloud connector, get_external_connections, a cluster switch, or a conversation opened from one. Set it under Escalation model in the primary provider's card, or with KUBEBOLT_AI_ESCALATION_MODEL; Usage prices each model's share.
  • The response cap follows the model. Unset, it is 16384 where reasoning counts against it (Claude, OpenAI reasoning models) and 4096 elsewhere: Haiku 5.5 no longer stops mid-answer. Set Max tokens only to override it.
  • Kobi answers in the language of your latest message (English or Spanish).
  • Custom model ids. "Custom…" in the model pickers opens the text field.

The MCP server serves the two new read tools too, get_external_connections
and load_skill (31 in all).

Agent 1.4.6

Chart-only security update: the agent's code is the same as 1.4.5. The
chart's vmagent sidecar (scrape.enabled=true) moves to v1.155.0.

Security

VictoriaMetrics and vmagent move to v1.155.0 (Go 1.27.3), which reports
0 CRITICAL/HIGH. The CVE-2026-111943 waiver 2.4.2 added to
.trivyignore-thirdparty is removed, and the file has no entries.

Upgrading

helm upgrade kubebolt oci://ghcr.io/clm-cloud-solutions/kubebolt/helm/kubebolt --version 2.5.0
helm upgrade kubebolt-agent oci://ghcr.io/clm-cloud-solutions/kubebolt/helm/kubebolt-agent --version 1.4.6
  • copilot.maxTokens defaults to "" (per model, above). A values file that sets 4096 keeps 4096 and the cut answers; remove it to use the per-model cap.
  • The Connectors tab appears for admins. Nothing is read until an admin sets a connector up and enables it. mcpConnectors.enabled=false (KUBEBOLT_MCP_CONNECTORS=false) removes the surface.
  • Outbound traffic, behind an egress firewall:
    • AWS: aws-mcp.us-east-1.api.aws or aws-mcp.eu-central-1.api.aws, and AWS STS;
    • the Azure sidecar: login.microsoftonline.com and management.azure.com.

Do not use --reuse-values across chart versions; pass your values file
(-f) or --reset-then-reuse-values.


Install

Helm (recommended for Kubernetes)

helm install kubebolt oci://ghcr.io/clm-cloud-solutions/kubebolt/helm/kubebolt
kubectl port-forward svc/kubebolt 3000:80

Single Binary (download below)

# macOS Apple Silicon
curl -LO https://github.com/clm-cloud-solutions/kubebolt/releases/download/v2.5.0/kubebolt-darwin-arm64
chmod +x kubebolt-darwin-arm64 && mv kubebolt-darwin-arm64 /usr/local/bin/kubebolt

# Linux amd64
curl -LO https://github.com/clm-cloud-solutions/kubebolt/releases/download/v2.5.0/kubebolt-linux-amd64
chmod +x kubebolt-linux-amd64 && sudo mv kubebolt-linux-amd64 /usr/local/bin/kubebolt

kubebolt --kubeconfig ~/.kube/config

All platform binaries are attached below. Verify with sha256sum -c CHECKSUMS.txt.

Docker (single container)

docker run -p 3000:3000 \
  -v ~/.kube/config:/kubeconfig:ro -e KUBECONFIG=/kubeconfig \
  ghcr.io/clm-cloud-solutions/kubebolt:2.5.0

Homebrew (macOS, Linux)

brew install clm-cloud-solutions/tap/kubebolt

kubectl krew plugin

kubectl krew index add clm https://github.com/clm-cloud-solutions/krew-index.git
kubectl krew install clm/kubebolt
kubectl kubebolt

Docker Compose

git clone https://github.com/clm-cloud-solutions/kubebolt.git
cd kubebolt/deploy && docker compose up -d

Container Images

  • Single container (binary + frontend): ghcr.io/clm-cloud-solutions/kubebolt:2.5.0
  • API only: ghcr.io/clm-cloud-solutions/kubebolt/api:2.5.0
  • Web only: ghcr.io/clm-cloud-solutions/kubebolt/web:2.5.0

Changelog

Features

  • feat(deploy): Azure MCP Server sidecar and connector configuration ()
  • feat(kobi): cloud connectors, model escalation and live investigation ()

Fixes

  • fix(kobi): its product docs cover the cloud connectors and escalation ()
  • fix(mcp): bound the conversions CodeQL flags ()

Documentation

  • docs: Kobi's tools, cloud connectors and cloud identity ()
  • docs: cloud connectors guide and Kobi escalation ()

Other

  • Merge pull request #265 from clm-cloud-solutions/develop ()
  • Merge pull request #264 from clm-cloud-solutions/chore/pre-release-2.5.0 ()
  • chore(release): 2.5.0 and agent 1.4.6 ()
  • chore(deps): VictoriaMetrics and vmagent v1.155.0 ()
  • Merge pull request #263 from clm-cloud-solutions/feat/kobi-cloud-connectors ()
  • Merge pull request #262 from clm-cloud-solutions/fix/usage-test-window-edge ()
  • test(usage): fixtures at the end of a window sit a minute back ()