Skip to content

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 19 Oct 07:49
· 81 commits to main since this release
c2f5cb3

[0.6.0] - 2026-10-19

Upgrade notes / operator action required

  • Manifests moved to deploy/base. Install with
    kubectl apply -k deploy/base; the client-cert opt-in is
    kubectl apply -k deploy/overlays/client-cert. kubectl apply -f deploy/
    no longer works.

  • The stock DaemonSet authenticates with its in-cluster ServiceAccount. It
    no longer mounts the beep-controller-kubeconfig Secret or passes
    --kubeconfig. Operators who rely on a client-cert kubeconfig must apply the
    deploy/overlays/client-cert overlay.

  • The ServiceAccount token is mounted into the controller container only.
    deploy/base/daemonset.yaml sets automountServiceAccountToken: false and
    mounts a projected serviceaccount volume into the controller container, not
    the privileged node-prep initContainer. Re-check any custom DaemonSet patches.

  • Supported platforms: systemd-based Linux only (kernel 6.6+, little-endian
    x86-64/AArch64, latest two Kubernetes minors).

  • Nodes need /etc/sysctl.d. node-prep writes /etc/sysctl.d/60-beep.conf
    to persist geneve0 rp_filter=0.

  • Lost-node prune bounds. A removed node leaves Service
    status.loadBalancer.ingress within 30 s of a graceful stop once the
    surviving controllers have run for 40 s, and up to 70 s right after a
    restart; a silently lost node within 85 s of the later of its last renewal
    and the survivor's start.

  • Published ingress for existing externalTrafficPolicy: Local Services
    changes.
    While no node has a usable endpoint (per address family), every
    node is listed in status.loadBalancer.ingress (fail-open), so a Service
    created before its pods gets an ingress; new connections are dropped until a
    pod is usable. Once one is, only nodes with a usable local pod stay listed.

Added

  • Service sessionAffinity: ClientIP is honoured: a client stays pinned to one
    endpoint while the endpoint set is stable (timeoutSeconds is not honoured).

Changed

  • Loader --fixture repeated for one front now adds endpoints instead of
    keeping the last; an optional :affinity suffix requests ClientIP affinity.
  • FRONT_META.flags bit 0 now means ClientIP affinity (no byte-layout change).
  • externalTrafficPolicy: Local now deviates from upstream semantics. A
    node with no usable local pod forwards to the ready, non-terminating
    endpoints cluster-wide (client IP preserved) instead of dropping. The front
    is count 0 (drop) only when no pod is ready anywhere; a remote
    serving-but-terminating pod keeps the Service published but is not a
    fallback target.
  • Dependency and CI-action bumps (Renovate).

Fixed

  • geneve0 rp_filter no longer reverts to the distro default after the
    device is re-created on systemd hosts.
  • The loader re-attaches pinned links severed by deleting the geneve device
    instead of crash-looping until /sys/fs/bpf/beep is cleaned by hand.
  • The controller no longer logs WARN for idle watch timeouts or the startup
    initial-LIST wait; its watches request bookmarks.
  • A removed node's address leaves Service status.loadBalancer.ingress
    promptly, and the controller handles SIGTERM by withdrawing its Lease
    addresses.