Repository navigation
v2.5.0
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=truewithexistingSecretnaming a Secret withtenant-id,client-idandclient-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 indeploy/.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_connectionssays 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
externalIPsor 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 asserverbefore). - Logs that say how long it lasted.
get_pod_logshands 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_detailandget_resource_describesay that it is set, never what it is; a connection string keeps its host and loses itsuser: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 withKUBEBOLT_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.6copilot.maxTokensdefaults to""(per model, above). A values file that sets4096keeps 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.awsoraws-mcp.eu-central-1.api.aws, and AWS STS; - the Azure sidecar:
login.microsoftonline.comandmanagement.azure.com.
- AWS:
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:80Single 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/configAll 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.0Homebrew (macOS, Linux)
brew install clm-cloud-solutions/tap/kubeboltkubectl krew plugin
kubectl krew index add clm https://github.com/clm-cloud-solutions/krew-index.git
kubectl krew install clm/kubebolt
kubectl kubeboltDocker Compose
git clone https://github.com/clm-cloud-solutions/kubebolt.git
cd kubebolt/deploy && docker compose up -dContainer 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 ()