Skip to content

Chart values

Chart tailnet-operator 0.18.0 (app v0.18.0). Installation and what the site must provide: Install the operator .

Values

KeyTypeDefaultDescription
agent.imagePullSecretslist[]Default agent pull-secret names, e.g. [dockerconfig]. Tailnet.spec.proxy.imagePullSecrets overrides these. Secrets must exist in each agent namespace.
agent.resourcesobject{"limits":{"memory":"128Mi"},"requests":{"cpu":"10m","memory":"32Mi"}}Default agent resource block, below CR spec.resources and Tailnet.spec.proxy.resources (no per-key merging). Set null to disable chart defaults; {} does not clear Helm defaults. Changes restart agents that inherit them. Tenant LimitRanges must admit these values.
agentImage.digeststring""Agent digest. An entirely empty agentImage inherits the complete operator image, including its digest.
agentImage.repositorystring""Agent repository; empty inherits image.repository.
agentImage.tagstring""Agent tag. With an explicit repository, empty uses Chart.appVersion; otherwise inherits image.tag.
env.extralist[]Additional EnvVar entries. POD_NAMESPACE, OPERATOR_IMAGE, AGENT_IMAGE_PULL_SECRETS, AGENT_RESOURCES and SSL_CERT_FILE are reserved.
fullnameOverridestring""Override the resource name with a letter-first DNS label (at most 53 characters). Install only one operator per cluster.
image.digeststring""Optional sha256 digest; takes precedence over the tag.
image.pullPolicystring"IfNotPresent"Operator pull policy.
image.repositorystring"docker.io/ff0x/tailnet-operator"Operator image repository. Verify mirror availability before installation.
image.tagstring""Image tag; empty uses Chart.appVersion.
imagePullSecretslist[]Pull-secret references for the operator pod, e.g. [{name: dockerconfig}].
leaderElection.enabledbooltrueElect one active operator using a Lease in the operator namespace. Disable only for a single replica with Recreate updates.
monitoring.dashboard.allowCrossNamespaceImportbooltrueAllow Grafana Operator to import into matching instances in other namespaces.
monitoring.dashboard.datasourceNamestring"Prometheus"Grafana Operator datasource name mapped to the bundled DS_PROMETHEUS input. Sidecar users must configure input substitution separately.
monitoring.dashboard.enabledboolfalseRender the bundled dashboard, or the json override below. Disabled by default.
monitoring.dashboard.folderstring"Tailnet"Grafana Operator dashboard folder.
monitoring.dashboard.instanceSelectorobject{"matchLabels":{"grafana.internal/instance":"grafana"}}Grafana Operator instance selector.
monitoring.dashboard.jsonstring""Nonempty JSON replaces the bundled dashboard; custom JSON is not template evaluated.
monitoring.dashboard.kindstring"GrafanaDashboard"GrafanaDashboard requires Grafana Operator v5 CRDs; ConfigMap supports dashboard sidecars.
monitoring.dashboard.labelsobject{"grafana_dashboard":"1"}Labels for the dashboard resource, including the optional ConfigMap sidecar label.
monitoring.podMonitor.enabledboolfalseScrape generated agents on health TCP/9080 and gateways on kernel-health TCP/8080 + metrics-dns TCP/9153. Requires PodMonitor CRD; allow your Prometheus through scrapeFrom.
monitoring.podMonitor.intervalstring"30s"Agent scrape interval.
monitoring.podMonitor.labelsobject{}Additional PodMonitor labels for your Prometheus selector.
monitoring.podMonitor.namespaceSelectorobject{"any":true}Agent namespace selection. Set any: false with matchNames to restrict namespaces; any: false without names selects only the PodMonitor namespace.
monitoring.podMonitor.scrapeFromlist[]NetworkPolicy peers (namespaceSelector / podSelector / ipBlock) that may scrape the generated agents on TCP/9080, rendered into every agent NetworkPolicy next to the operator. Empty adds none. Gateways carry no policy.
monitoring.rules.apiKeyExpiryWarningSecondsint604800API-key expiry warning threshold in seconds (7 days). For shorter key lifetimes, set below half-life to avoid warning before normal rotation.
monitoring.rules.authKeyExpiryWarningSecondsint86400Egress/ingress auth-key expiry warning threshold in seconds (1 day). For shorter key lifetimes, set below half-life to avoid warning before normal rotation.
monitoring.rules.enabledboolfalseRender a PrometheusRule. Requires Prometheus Operator CRDs.
monitoring.rules.groupslist[]Nonempty groups replace all bundled rules, without merging or template evaluation.
monitoring.serviceMonitor.enabledboolfalseRequires Prometheus Operator CRDs. Disabled for a fresh Kubernetes installation.
monitoring.serviceMonitor.intervalstring"30s"Scrape interval.
monitoring.serviceMonitor.labelsobject{}Additional ServiceMonitor labels for your Prometheus selector.
namespacestring""Operator namespace; empty uses the Helm release namespace. Bootstrap and working keys live here.
networkPolicy.cilium.headscalePeerslist[{"podSelector":{"matchLabels":{"app.kubernetes.io/name":"headscale"}}}]Headscale peers for provider cilium (namespaceSelector / podSelector; no ipBlock). Without a namespaceSelector the peer is scoped to the operator namespace. Set to [] when the Headscale control plane is reached by IP via headscaleCIDRs instead.
networkPolicy.dnsPeerslist[{"namespaceSelector":{"matchLabels":{"kubernetes.io/metadata.name":"kube-system"}},"podSelector":{"matchLabels":{"k8s-app":"kube-dns"}}}]DNS NetworkPolicy peers; customize for NodeLocal DNS or a different resolver.
networkPolicy.enabledboolfalseEnable operator isolation. With provider kubernetes this requires explicit kubeAPI and Headscale CIDRs; CNI Service-DNAT behavior must be checked locally.
networkPolicy.headscaleCIDRslist[]Headscale API endpoint CIDRs (not hostnames). Required for provider kubernetes; optional for provider cilium (renders a toCIDR egress for a remote Headscale). Update when the DNS address changes; prefer the stable control-plane IPs over resolver-dependent values.
networkPolicy.headscalePortslist[443,8080]Headscale REST API TCP ports.
networkPolicy.kubeAPICIDRslist[]API endpoint and/or Service CIDRs appropriate for your CNI, e.g. [10.96.0.1/32]. Required for provider kubernetes.
networkPolicy.kubeAPIPortslist[443,6443]Kubernetes API TCP ports.
networkPolicy.metricsPeerslist[]Peers permitted to scrape metrics (provider kubernetes). Empty denies metrics ingress when isolation is enabled.
networkPolicy.providerstring"kubernetes"kubernetes renders a NetworkPolicy (ingress and egress, ipBlock-based). cilium renders an egress-only CiliumNetworkPolicy using toEntities: kube-apiserver, label selectors and toCIDR; ipBlock peers in dnsPeers/cilium.headscalePeers are rejected, ingress stays open, requires the cilium.io/v2 CRDs. For a Headscale that lives outside the cluster (shared control plane, spoke clusters) set cilium.headscalePeers: [] and populate headscaleCIDRs — the template renders a toCIDR egress for the Headscale IPs on headscalePorts.
podSecurityContextobject{"runAsGroup":65532,"runAsNonRoot":true,"runAsUser":65532,"seccompProfile":{"type":"RuntimeDefault"}}Pod security context; the scratch image requires a numeric non-root UID.
replicasint1Operator replicas; more than one requires leaderElection.enabled. A PDB with minAvailable=1 is rendered for multiple replicas.
resourcesobject{"limits":{"memory":"192Mi"},"requests":{"cpu":"25m","memory":"64Mi"}}Operator resource requests and limits. GOMEMLIMIT follows limits.memory.
securityContextobject{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true}Operator container hardening. Agents are configured separately by the controller.
topologySpreadConstraintslist[]Optional operator pod topology spread constraints. Supply a labelSelector matching app.kubernetes.io/name: tailnet-operator.

Source: docs/reference/values.md at v0.18.0 — found a mistake? Tell us.