Skip to content

cmd/tail-watch,examples,openspec: run tail-watch as a ProxyGroup sidecar - #9

Merged
rshade merged 1 commit into
mainfrom
proxygroup-sidecar
Oct 2, 2026
Merged

rshade merged 1 commit into
mainfrom
proxygroup-sidecar

Conversation

@rshade

@rshade rshade commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator

An ingress ProxyGroup keeps a Tailscale Service advertised while the path from the proxy pod to the workload is broken: the operator gates advertising on EndpointSlice readiness, which is the kubelet's view from the workload's node, not reachability from the proxy.

Add collector.local_only, which runs the collector with no tailscaled. Targets default to network local; tailnet targets, tsping and the UI are rejected; startup skips the LocalAPI preflight, presence, resolver and learner, and takes its identity from the hostname. notify-test honours it too. That lets tail-watch run as an opt-in sidecar in the proxy pods and probe hop 2 from their own network namespace.

Ship four injection methods (MutatingAdmissionPolicy, Kyverno, an example webhook handler, and freeze-and-patch for evaluation). Each selects pods by the operator's ProxyGroup label plus a tail-watch/inject label from a ProxyClass, and names the ConfigMap and Secret after the pod's ProxyGroup. TestSidecarCopiesAgree keeps the embedded copies in step with examples/kubernetes/sidecar.yaml. TestKindProxyGroup, gated on TAIL_WATCH_KIND=1, runs the how-to's blocks on a kind cluster with the operator and breaks hop 2 with a NetworkPolicy and a wrong readiness port while the Service stays advertised.

The tailnet API key in the stack scripts now reaches curl through a config on a pipe instead of its command line.

An ingress ProxyGroup keeps a Tailscale Service advertised while the
path from the proxy pod to the workload is broken: the operator gates
advertising on EndpointSlice readiness, which is the kubelet's view from
the workload's node, not reachability from the proxy.

Add collector.local_only, which runs the collector with no tailscaled.
Targets default to network local; tailnet targets, tsping and the UI are
rejected; startup skips the LocalAPI preflight, presence, resolver and
learner, and takes its identity from the hostname. notify-test honours
it too. That lets tail-watch run as an opt-in sidecar in the proxy pods
and probe hop 2 from their own network namespace.

Ship four injection methods (MutatingAdmissionPolicy, Kyverno, an
example webhook handler, and freeze-and-patch for evaluation). Each
selects pods by the operator's ProxyGroup label plus a tail-watch/inject
label from a ProxyClass, and names the ConfigMap and Secret after the
pod's ProxyGroup. TestSidecarCopiesAgree keeps the embedded copies in
step with examples/kubernetes/sidecar.yaml. TestKindProxyGroup, gated on
TAIL_WATCH_KIND=1, runs the how-to's blocks on a kind cluster with the
operator and breaks hop 2 with a NetworkPolicy and a wrong readiness
port while the Service stays advertised.

The tailnet API key in the stack scripts now reaches curl through a
config on a pipe instead of its command line.

Signed-off-by: Richard Shade <rshade98@hotmail.com>
@rshade
rshade merged commit 89677ec into main Oct 2, 2026
3 checks passed
@rshade
rshade deleted the proxygroup-sidecar branch October 2, 2026 00:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant