Configuration surfaces
The connector has one configuration surface per install target.- Kubernetes
- Linux VM
clicklink clctl init stages a values overlay named clicklink-values.yaml in the working directory and deploys the clicklink-connector chart with it. The overlay is the durable record of your deployment: re-running init keeps it unless you pass --force, so your edits survive re-runs and recovery.Day-2 commands on this page and in operations use the
helm CLI. Only init carries a built-in Helm client.--repo for your mirror.An install from a direct chart reference (oci://, a URL, or a local archive or directory, see private mirrors) has no repository to resolve against. Rerun the upgrade with the reference you installed from:Adding or changing ClickHouse instances
Each entry underinstances names a ClickHouse native-protocol endpoint the connector reads from: host, port, database, secure, plus namespace and cluster on Kubernetes. Credentials never live in the configuration; each component resolves its read-only ClickHouse user from the access bundle that provisioning creates.
- Kubernetes
- Linux VM
Add the instance to both component maps in Provision read-only access for each component from your workstation. For an operator-managed instance with no SQL-capable admin, swap
clicklink-values.yaml, and add its namespace to networkPolicy.clickhouseNamespaces (matched by the namespace’s kubernetes.io/metadata.name label):--apply-ch-grants applies the generated ClickHouse grants in-pod via kubectl exec; without it the command creates the Kubernetes side only and leaves ch-grants.sql on disk for you to apply. When the admin user has a password, add --ch-admin-password-stdin and pipe it in.--apply-ch-grants for --ch-user-via cr (the pod-selection flags stay); see the CLI reference. Then wire the Secret and ServiceAccount pair each command creates into the matching accessBundles map and run the helm upgrade shown above:Operator allowlist
Gateway-managed sessions are gated by an allowlist of operator email addresses: every request to the session gateway must carry a short-lived OIDC ID token whose attested email is on the list. An empty allowlist closes the gateway, so nobody can open a session through it. On a VM, root on the host can additionally manage sessions directly through the local session file; the allowlist governs the gateway path only. See support sessions for the full trust model.- Kubernetes
- Linux VM
The allowlist lives in the overlay and is rendered into a ConfigMap. To change it, edit the list and run
helm upgrade:Network policy and egress
On Kubernetes the chart ships a default-deny NetworkPolicy with an egress allowlist (networkPolicy.enabled: true). NetworkPolicy objects only take effect when your CNI enforces them; under an enforcing CNI the connector has no egress at all until allowEgressCIDRs names the CIDRs behind your connector API endpoint.
apiserverCIDRs: when empty, the chart emits no API server egress rule. The daemons then fail their first Kubernetes token request with a network error, which is the signal to set it. On managed Kubernetes, use the cluster’s API server endpoint CIDR(s).clctl.gateway.jwksEgressCIDRs: when the session gateway is enabled, the troubleshooter fetches your identity provider’s JWKS to validate operator tokens. Under a default-deny posture, leaving this empty blocks every token check:
private.googleapis.com range, which covers a Google identity provider reached over Private Google Access; for any other identity provider, supply that provider’s range (or the CIDR of the egress proxy that fronts it).
Two further ingress knobs: metricsScrapeSelector restricts metrics-scrape ingress to a specific Prometheus namespace by label, and kubeletProbeCIDRs admits kubelet health probes explicitly in environments with strict default-deny. See the configuration reference for the full key list.
Redaction patterns
Troubleshooter output is redacted before it leaves your boundary. Built-in patterns coveripv4, ipv6, bearer-token, aws-access-key, email, jwt, ssh-private-key, and connection-string-credentials. You can add your own patterns in a YAML file; your patterns run first, in file order, then the built-ins, and an entry that reuses a built-in’s name replaces that built-in.
Each pattern takes name (required, unique), regex (required, Go RE2 syntax), replace (default [REDACTED], supports $1 capture references), and case_insensitive (default false):
/etc/clicklink/redaction-patterns.yaml; the installer lays down a commented default and preserves your version across upgrades. On Kubernetes, put the YAML in a ConfigMap under the key redaction-patterns.yaml and set troubleshooter.redaction.patternsConfigMap to its name; the chart mounts it at the same path.
Private mirrors and in-boundary endpoints
The published chart pre-setsimage.repository to the public, multi-arch, cosign-signed connector image, so plain installs need no image values. To inspect the published defaults:
init accepts --chart as a chart name resolved in --chart-repo, or as a direct oci:// reference, URL, or local archive or directory. --chart-version defaults to the CLI’s own version so the binary and chart move together:
--api-private-ca to init: it stages api.tls.caFile: /etc/clicklink/secrets/mtls/ca.crt, so the endpoint is verified against the CA chain from your enrollment bundle instead of the system roots. On a VM the equivalent is api.tls.ca_file in /etc/clicklink/config.yaml; init installs the bundle chain at /etc/clicklink/tls/ca.crt, and it is added to the system roots for verification. For fully air-gapped enrollment and certificate signing, see onboarding.
Storage
- Kubernetes
- Linux VM
The troubleshooter keeps its state on a PersistentVolumeClaim, so session state and the audit trail survive pod rescheduling:An empty
storageClass uses the cluster’s default StorageClass. When the cluster marks no default, init requires one, via the prompt or --storage-class.