Skip to content

Network Egress & Domains

KubeManta is self-hosted and runs entirely inside your own Kubernetes cluster. It reaches a small, well-defined set of external domains — and most of those are optional and only contacted when you turn a feature on. This page lists every domain so your network team can allowlist (or block) them for approval on a corporate/firewalled network.

Minimal footprint

A default install with AI and external integrations left off needs only api.keygen.sh (licensing) and registry.kubemanta.com (image pulls), plus Docker Hub for the preflight image unless you mirror it (see Images your nodes pull). api.kubemanta.com is contacted only if you turn the update check on — it is off by default. An air-gapped install with an offline licence file contacts none of these.

Core domains

These support licensing, installation, and the optional update check.

Domain Purpose Required? When
api.keygen.sh Licence validation, plus a machine heartbeat that keeps this cluster's activation alive. By default the heartbeat also reports the cluster's node count — numbers only, never node names, labels or workload data. The count is never used to charge you or to limit a feature. Yes — unless air-gapped with an offline licence file, which makes no licensing call Validation every 12 hours, heartbeat every 6 hours; the node count is sent at most once a day, and only when it changed
registry.kubemanta.com Container image + Helm chart pulls Yes Install, upgrade, and image pulls
api.kubemanta.com Update-check feed (latest available version) No — off by default Only when you turn the update check on: every 6 hours (cached)

The node count can stay in your cluster

Set license.reportNodeCount=false in your Helm values (it sets LICENSE_METER_ENABLED=false on the agent, and survives every helm upgrade) and the heartbeat no longer carries the node count. Nothing else changes: licence validation and the heartbeat continue, every feature keeps working, and the figure is still calculated and shown to you in Admin → License.

The update check is opt-in

The update check is a convenience, not a requirement, and a default install never contacts api.kubemanta.com. To turn it on, set updates.checkEnabled=true in your Helm values or use the toggle in Admin → License. The endpoint it calls is GET https://api.kubemanta.com/version, which returns only the latest published version number — no cluster data is sent. Air-gapped installs keep it off regardless of either setting.

AI providers (optional)

Contacted only when you configure an AI provider that your data-residency settings allow: a provider not ticked under Allowed Providers (Admin → AI → Guardrails) is never called, and Local Only refuses every provider you do not host yourself. Which domain applies depends on the provider you choose. With Egress Control switched on (it is off by default), the AI path may reach only the hosts you allow.

Provider Domain
Anthropic api.anthropic.com
OpenAI api.openai.com
Google (Gemini) generativelanguage.googleapis.com, www.googleapis.com
Groq api.groq.com
Azure OpenAI your Azure OpenAI resource endpoint
Ollama your Ollama host (typically in-cluster / local)
Custom (OpenAI-compatible) the base URL you configure

Keeping cluster data in-network

Turn on Local Only in AI Guardrails (KUBEMANTA_AI_LOCAL_ONLY=true seeds it at first start) to refuse every provider you do not host yourself — pair it with an in-cluster Ollama and no cluster data leaves your network. See AI Guardrails.

Integrations (optional)

Contacted only if you configure the corresponding integration.

Integration Domain Configured in
Slack alerts hooks.slack.com (your webhook) Alerts → Integrations
Slack ChatOps (ask and approve from Slack, Socket Mode) slack.com (Slack Web API), then a long-lived WebSocket to the *.slack.com address Slack hands back Alerts → Integrations
Telegram alerts api.telegram.org Alerts → Integrations
Email alerts your SMTP relay — the host and port you set (default port 587; SMTP, not HTTPS) Alerts → Integrations
PagerDuty events.pagerduty.com Alerts → Integrations
Datadog api.datadoghq.com (or api.<your Datadog site>) Alerts → Integrations
CloudWatch alerts Amazon SNS in the region you set (sns.<region>.amazonaws.com) Alerts → Integrations
Generic / audit webhook the URL you provide Alerts → Integrations
Incident tickets — Jira the Jira address you set (e.g. your-site.atlassian.net) Alerts → Integrations
Incident tickets — Trello api.trello.com Alerts → Integrations
AWS / GCP / Azure APIs the cloud provider's API endpoints Admin → Cloud (for cloud-network topology)
SSO your identity provider — the OIDC issuer, SAML metadata URL or LDAP server you configure Admin → Auth
Database backup (persistence.replication) the S3-compatible bucket endpoint you set — the one feature that copies KubeManta's database out of the cluster; off by default Helm values

Container scanning (self-scan)

On-demand scans run as an in-cluster Trivy Job. Trivy does not ship its vulnerability database inside its image — each scan downloads it from an OCI registry:

What Default source Override (your own mirror)
Vulnerability database mirror.gcr.io/aquasec/trivy-db, falling back to ghcr.io/aquasecurity/trivy-db security.scanning.selfScan.dbRepository
Java database (jar scanning) mirror.gcr.io/aquasec/trivy-java-db, falling back to ghcr.io/aquasecurity/trivy-java-db security.scanning.selfScan.javaDbRepository
Misconfiguration checks bundle mirror.gcr.io/aquasec/trivy-checks security.scanning.selfScan.checksBundleRepository
The images being scanned the registries your workloads already pull from —

ghcr.io serves layer data from pkg-containers.githubusercontent.com, so allow both if you allow it. On an air-gapped network a database mirror is required (see Air-gapped install). Reading reports from your own trivy-operator makes none of these requests, and security.scanning.enabled=false stops all of them.

Images your nodes pull

Your nodes, not KubeManta, pull these — include them on the node egress path. KubeManta's own images come from registry.kubemanta.com. A few components use public images from Docker Hub (docker.io) by default, each overridable with its Helm value:

Image When Value
python:3.12-alpine the pre-install/upgrade preflight check (on by default) preflight.image, or preflight.enabled=false
aquasec/trivy self-scan Jobs security.scanning.selfScan.image
haproxy only with the in-pod TLS proxy (tlsSidecar.enabled) tlsSidecar.image
litestream/litestream only with database backup (persistence.replication.enabled) persistence.replication.image
nicolaka/netshoot only for live network probes (Network Analyzer) netAnalyzer.probeImage

When an admin deploys the guided Prometheus (Admin → Observability), the nodes also pull quay.io/prometheus/prometheus and registry.k8s.io/kube-state-metrics/kube-state-metrics (metrics.prometheusDeploy.image, metrics.prometheusDeploy.ksmImage).

With global.installCertManager=true, the optional cert-manager subchart (v1.21.2) also pulls its five images from quay.io/jetstack (controller, webhook, cainjector, startupapicheck and the ACME solver).

Not external — in-cluster only

These are your own services on your cluster network; KubeManta connects to them over your internal network, not the public internet:

  • Prometheus, Grafana, Alertmanager — your monitoring stack (Integrations).

Summary for a firewall request

# Always (default install) — none of these for air-gap with an offline licence file:
api.keygen.sh              # licence validation 12h + heartbeat 6h (node count unless opted out)
registry.kubemanta.com
docker.io                  # preflight image (python:3.12-alpine) unless mirrored or disabled
api.kubemanta.com          # only if you turn the update check on — off by default

# Only if you enable AI (and not local-only), the relevant provider host, e.g.:
api.anthropic.com          # or api.openai.com / api.groq.com / ...

# Only if you enable alerting/cloud integrations, the relevant host(s), e.g.:
hooks.slack.com / api.telegram.org / <your SMTP relay>:587 / events.pagerduty.com
api.datadoghq.com / sns.<region>.amazonaws.com / <your cloud provider APIs>

# Only with Slack ChatOps (Socket Mode):
slack.com + *.slack.com    # Web API + the WebSocket host Slack returns

# Only with self-scan (unless you mirror the Trivy databases):
mirror.gcr.io / ghcr.io / pkg-containers.githubusercontent.com / docker.io (aquasec/trivy)

# Only with incident tickets:
<your Jira address> or api.trello.com

# Only with SSO or database backup:
<your identity provider> / <your S3-compatible bucket endpoint>

# Only with live network probes, or the guided Prometheus deploy:
docker.io (nicolaka/netshoot) / quay.io / registry.k8s.io