Skip to main content

Overview

OpenSRE runs the Helm 3 command-line client on the machine where the agent executes. It uses read-only subcommands (helm list, helm status, helm history, helm get values, helm get manifest) with explicit --kube-context and --kubeconfig flags so investigations target the same cluster your engineers use.
Helm 2 is not supported. Verification checks helm version and requires a Helm 3.x client.

Prerequisites

  • Helm 3 installed and on PATH (or configured via helm_path)
  • kubectl access to the cluster (kubeconfig on disk or in the default search path)
  • Optional: alert annotations or Kubernetes labels that identify a Helm release and namespace (see Usage in investigations)

Setup

Configure Helm like other local integrations: run opensre integrations setup helm, use environment variables, and/or ~/.opensre/integrations.json.

Option 1: Interactive CLI

Option 2: Environment variables

Enable the integration and point it at your cluster:
To raise the maximum size of stored manifest text (see Advanced):

Option 3: Persistent store

Add an active helm record to ~/.opensre/integrations.json:
Credential field aliases (store / API compatibility): context for kube_context, kubeconfig_path or kube_config for kubeconfig, and namespace for default_namespace. The setup/store path does not require OSRE_HELM_INTEGRATION; that env gate applies only when discovering Helm from environment variables alone.

Credentials

Helm uses your local Helm binary plus kubeconfig access to the cluster. There is no separate Helm API token.
  • Point HELM_PATH / helm_path at a Helm 3.x binary.
  • Set HELM_KUBECONFIG / kubeconfig and HELM_KUBE_CONTEXT / kube_context when you need a specific cluster identity.
  • Prefer a dedicated kubeconfig or context with least privilege if your policy requires it.

Investigation tools

Evidence keys

Post-processing writes distinct evidence keys so parallel tools do not overwrite each other:

Usage in investigations

When Helm is configured, OpenSRE adds a helm entry to detect_sources only if the alert shows Helm-specific context — avoiding generic “deployment” noise. Annotations (including top-level enriched fields merged into annotations): Labels (from Prometheus/Alertmanager-style labels / commonLabels on the alert payload): Alert text: Strong phrases such as helm upgrade, helm install, helm rollback, helm chart, or helm release in summary / description / message (or top-level alert_name / error_message) can also enable the Helm source when other hints are absent. Top-level payload fields (dict alerts only): helm_release, helm_release_name, helm_namespace, etc., are consulted as fallbacks. Example minimal alert:
Then run:

Advanced

  • Manifest size: Very large charts can produce multi-megabyte manifests. The client truncates manifest text by default; override with HELM_MANIFEST_MAX_CHARS (see Option 2).
  • Local kind demo: From a repo checkout with Docker, kind, kubectl, and Helm installed, run ./tests/e2e/kubernetes/helm/scripts/demo-helm-kind.sh to create a sample cluster and release (see script comments for teardown).

Local verification recipe

Verified live: the demo script above produces a real cluster and release, then all 5 registered tools were confirmed against it.
This creates a kind cluster named opensre-helm-demo, installs bitnami/nginx as release demo in namespace demo, and prints a Helm/kubectl snapshot.
Verify:
opensre investigate (unlike opensre integrations verify) only falls through to env vars when the store has no records at all — any existing record, for any service, blocks env-var resolution entirely. Point OPENSRE_INTEGRATIONS_STORE_PATH at a path inside a fresh empty directory instead, so your real config is never read or written and the HELM_* vars above are the only source of connection info:
Trigger a real investigation against the deployed release:
Real output from a run against this exact local cluster (edited for length). Another integration resolved from your own env/keyring can ride along harmlessly, since the store has no records to block fallback for any service:
All 5 registered tools return real data against this cluster — confirmed by direct calls to each: release listing, release status, release history, release values (empty {} here since the demo installs with default values only — Helm’s get values returns only user-supplied overrides, not the chart’s own defaults), and the rendered manifest. Teardown:

Verify

A passing check runs helm version (must report Helm 3) and a minimal helm list -A --max 1 -o json against your cluster to validate JSON output and reachability.

Troubleshooting

Security

  • The integration is read-only: it does not install, upgrade, or uninstall releases.
  • helm get values output can include secrets; treat evidence like any other sensitive kubectl/Helm output.
  • Prefer a dedicated kubeconfig or context with least privilege if your policy requires it.
  • Store paths and context names in .env or the integration store — not in source control.