Quint on Kubernetes is early access. The Quint container images, the Helm charts and the admission webhook are not available for download. Your Quint contact gives you each of them, with the image digests for your release, so talk to your Quint contact before you plan an install.
kubectl and helm, and the Admin or Owner role in the Quint dashboard. Ask your Quint contact for the quint-sidecar chart and the image digests for your release.
What the chart runs
The chart renders your agent container, unchanged, and three Quint containers in this order. The webhook refuses any other order.
The chart sets the agent’s
HTTPS_PROXY, HTTP_PROXY and ALL_PROXY to http://127.0.0.1:9090, and its CA bundle variables, such as SSL_CERT_FILE, to /quint/ca/ca-certificates.crt. If the agent unsets the proxy variables, its traffic is dropped.
1
Set up the workload and its key
On the Workloads page, set up a workload and create a key. The workload’s name is the value you give as
quint.workload. Save the key to a file, workload.key.2
Create and label the namespace
The
quintai.dev/governed=true label sends every pod in the namespace to the admission webhook.3
Store the workload key
The chart takes the key from an existing Secret, never as a value. Only
quint-sidecar mounts it; the agent never sees it.4
Install the chart
The
quint-sidecar chart, the two Quint images and their digests come from your Quint contact. They are not available for download.Pin both Quint images by digest. The webhook admits Quint images pinned by digest only, and only the digests it was started with.workload.kind is Job by default, one pod for one run. Pod and Deployment work too. In a values file, quote the user ID: agentUID: "10002".5
Declare your agent's harness version
Quint can’t see inside your agent image, so tell it which agent harness and version the image ships. Quint accepts only the versions it knows. Before you set this, ask your Quint contact which harness versions your Quint release knows, and build your agent image with one of them.Quote every version, and list the version the image really ships. You can list up to 16 harnesses.
- If you set a version Quint knows, an action that matches a rule asking for approval waits for an approver.
- If you leave this out, every rule that asks for approval denies the action straight away, because Quint can’t tell how long the harness will wait for an answer.
- If you list a version Quint doesn’t know, the Quint sidecar refuses to start, so the agent container never starts and the pod stays cut off.
6
Install the status policy once per cluster
The webhook does not judge pod status updates. A Kubernetes ValidatingAdmissionPolicy, Without it, a status update can change Quint’s annotations on a pod without being checked.
quint-status-annotations, refuses status updates that add, change or remove Quint’s quintai.dev/* annotations, or add container runtime annotations. Install it in exactly one release with --set statusPolicy.create=true, or apply it with the webhook’s own command (quint-admission comes from your Quint contact):7
Check the run
Open the workload on the Workloads page. A run appears on the first container start. Quint also records a status on the run, such as contained or unverified, which the page does not show. See Status recorded for runs.
What your agent can’t do
- Serve kubelet probes or a Service. The agent can reach only
127.0.0.1:9090, sohttpGet,tcpSocketandgrpcprobes time out. The chart refuses them; useexecprobes. - Run as root or add privileges. The chart writes the agent’s security settings itself.
agent.securityContextaccepts onlyrunAsGroup,readOnlyRootFilesystem,seLinuxOptionsandappArmorProfile. - Use a pod
fsGroupor, in this setup, pod-levelsupplementalGroups. Give the agent its group withagent.securityContext.runAsGroup. - Mount
hostPathor inlinecsivolumes. Agent volumes may beemptyDir,configMap,secret,persistentVolumeClaim,downwardAPIandprojected(fromconfigMap,secretordownwardAPIonly).
fsGroup, use an emptyDir, a PersistentVolume already owned by the agent’s user ID, or a PersistentVolumeClaim whose StorageClass sets the owner at mount time (for example SMB CSI mountOptions: [uid=10002, gid=10002], or EFS CSI access-point uid and gid).
Upgrades
The webhook admits only the Quint image digests it was started with, so add the new digests to the webhook before you upgrade the chart’s images. The new chart, images and digests come from your Quint contact. Leaveworkload.terminationGracePeriodSeconds at 90 seconds or more, so a run has time to stop.
If this fails
Next
- The Quint admission webhook
- Restricted setup for namespaces that enforce
restricted.