Skip to content

Kustomize install

Coxswain's deployment manifests are structured as a Kustomize base under deploy/manifests/. Use this method when you need to apply overlays — custom resource limits, additional labels, namespace changes, or image overrides. The base includes the CoxswainGatewayParameters and RateLimit CRDs and a ValidatingAdmissionPolicy for Ingress annotation validation (silently skipped on Kubernetes < 1.30).

Install from main

For a quick install without version pinning:

# Install Gateway API CRDs first (once per cluster)
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/latest/download/standard-install.yaml

# Install Coxswain
kubectl apply -k "github.com/coxswain-labs/coxswain//deploy/manifests?ref=main"

Install a specific version

The remote base always uses image: ...:latest. To pin both the manifests and the image to a specific release, create a local overlay:

mkdir coxswain-install && cd coxswain-install
# kustomization.yaml
resources:
  - github.com/coxswain-labs/coxswain//deploy/manifests?ref=v0.5.0

images:
  - name: ghcr.io/coxswain-labs/coxswain
    newTag: v0.5.0
kubectl apply -k .

Upgrade

Update the ?ref= and newTag: values in your overlay to the new version, then re-apply:

kubectl apply -k .

Control-plane CA

The base runs the controller in auto CA mode: it self-generates the discovery CA and works out of the box. To consume an external CA instead, apply deploy/manifests/cert-manager-example.yaml (a standalone recipe, not part of the base), set COXSWAIN_DISCOVERY_CA_MODE=external on the controller, and delete the coxswain-controller-discovery-ca Role/RoleBinding. See Control-plane security.

Uninstall

kubectl delete -k .

Warning

This removes the coxswain-system namespace and everything in it. Gateway API CRDs and any user-created Gateway/HTTPRoute/Ingress objects in other namespaces are not affected.