Releases: cozystack/cozy-proxy
v0.3.0
Breaking changes
service.kubernetes.io/service-proxy-name: cozy-proxylabel is now the sole selector. Services that relied on thenetworking.cozystack.io/wholeIPannotation alone (without the label) are no longer managed.Port-filter is now the default ingress mode. A managed service without the
wholeIPannotation only forwards the ports declared inService.spec.ports. Whole-IP passthrough (the previous default) is opt-in vianetworking.cozystack.io/wholeIP: "true".
How to upgrade from v0.2.x
For every Service you want cozy-proxy to manage:
- Add the label
service.kubernetes.io/service-proxy-name: cozy-proxy. Without it, cozy-proxy will ignore the Service after the upgrade and traffic will fall back to whatever kube-proxy / Cilium configures. - If you want whole-IP passthrough (all ports forwarded), keep or add
networking.cozystack.io/wholeIP: "true". Without this annotation the Service falls into per-port filtering and onlyspec.portsreach the backend pod. - If you need ICMP (ping, PMTU discovery, ICMP unreachable) in port-filter mode, add
networking.cozystack.io/allowICMP: "true".
In Cozystack, the vm-instance chart already emits the label for external VM Services (cozystack/cozystack#2357), so VM workloads upgrade transparently as long as you update the cozy-proxy image alongside the chart.
New features
- Per-service ingress port filtering (#11). With
networking.cozystack.io/wholeIP: "false", cozy-proxy drops ingress traffic to the LoadBalancer IP on ports not listed inService.spec.ports. The datapath was split intoegress_snat(raw, -300),ingress_dnat(mangle, -150), andport_filter(filter, 0) chains so conntrack can match return packets correctly. Thanks @mattia-eleuteri. allowICMPannotation (#12).networking.cozystack.io/allowICMP: "true"accepts ICMP toward a pod IP that is otherwise port-filtered. Without this opt-in, ICMP to a port-filtered pod is dropped — which also breaksping, PMTU discovery (ICMP "fragmentation needed"), and ICMP unreachable signalling.- Label-based selector (#9). The standard Kubernetes
service.kubernetes.io/service-proxy-name: cozy-proxylabel now selects services for cozy-proxy management. It also makes kube-proxy ignore the service, eliminating rule conflicts in plain kube-proxy (iptables / IPVS) clusters such as RKE2 with Calico — which previously broke outbound SNAT in v0.2.0.
Fixes
- Probe and metrics endpoints disabled by default (#10, fixes #5). The
--health-probe-bind-addressand--metrics-bind-addressflags defaulted to:0, which in controller-runtime means "bind to a random free port" rather than "disabled". Combined withhostNetwork: truein the chart, this surfaced two unexpected high-port listeners on every node. Defaults are now0(disabled). Pass an explicit address via flag to opt in.
Other
- Internal: controller wiring consolidated into
reconcilePortFilter/clearPortFilterhelpers (#12).
Full changelog: v0.2.0...v0.3.0
v0.2.0
What's Changed
- Proofread the readme.md by @NickVolynkin in #4
- Move SNAT/DNAT to raw table early_snat chain by @kvaps in #6
New Contributors
- @NickVolynkin made their first contribution in #4
Full Changelog: v0.1.4...v0.2.0
v0.1.4
v0.1.3
Full Changelog: v0.1.2...v0.1.3
v0.1.2
Full Changelog: v0.1.1...v0.1.2
v0.1.1
Full Changelog: v0.1.0...v0.1.1