Get started
Installation
Prerequisite
You'll need to have a valid installation of Cert-Manager.
Using the YAML installer
Run the following command:
kubectl apply -f https://github.com/robinlioret/gate-operator/releases/download/v0.0.9/install.yaml
Using the Helm chart
helm upgrade --install gate-operator oci://ghcr.io/robinlioret/gate-operator/gate-operator:0.0.5
Possible values can be found here: https://github.com/robinlioret/gate-operator/blob/main/dist/chart/values.yaml
Create your first gate
cat << EOF | kubectl apply -f -
apiVersion: gate.sh/v1alpha1
kind: Gate
metadata:
name: gate-test
spec:
targets:
- name: KubeProxy
selector:
apiVersion: apps/v1
kind: DaemonSet
name: kube-proxy
namespace: kube-system
EOF
This gate should open if kube-proxy is deployed in the namespace kube-system.
kubectl get gates -A
Should display :
NAMESPACE NAME STATE
default gate-test Opened
Reading information on your gates
You can get information on you gate with the following command
kubectl get gate gate-test -o yaml
apiVersion: gate.sh/v1alpha1
kind: Gate
metadata:
name: gate-test
namespace: default
# ...
spec:
# ...
status:
# Condition of the gate for programmatic access
conditions:
- lastTransitionTime: "2025-10-31T08:40:26Z"
message: Gate was evaluated to true
reason: GateConditionMet
status: "True"
type: Opened
- lastTransitionTime: "2025-10-31T08:40:26Z"
message: Gate was evaluated to true
reason: GateConditionMet
status: "False"
type: Closed
# Next time the gate will be evaluated
nextEvaluation: "2025-10-31T08:51:32Z"
# Quick information of the gate status (Opened or Closed)
state: Opened
# Information on each target specified. Can help for troubleshooting.
# The condition's type field matches the name field on each target.
targetConditions:
- lastTransitionTime: "2025-10-31T08:50:32Z"
message: |
1 object(s) found
1 object match the validators
1/1 valid objects
reason: ObjectsFound
status: "True"
type: KubeProxy
ArgoCD configuration
You need to add the following snippet to your argocd cm
resource.customizations:
"gate.sh/*":
health.lua: |
hs = {}
if obj.status ~= nil then
if obj.status.conditions ~= nil then
for i, condition in ipairs(obj.status.conditions) do
if condition.type == "Opened" and condition.status == "True" then
hs.status = "Healthy"
hs.message = condition.message
return hs
end
end
end
end
hs.status = "Progressing"
hs.message = "Waiting for the gate to open"
return hs
This customizes the healthcheck for the gates, allowing ArgoCD to consider gates Healthy if opened or Progressing if closed.