What happened
LINSTOR controller pod on node A cannot reach satellite on node B (port 3367 SSL). Only the satellite on the same node as the controller is Online. Cross-node pod-to-host TCP connections to port 3367 are silently dropped.
Root cause
restrict-system-components CCNP has:
ingressDeny:
- fromEntities:
- world
toPorts:
- ports:
- port: "3367" # ← blocks LINSTOR satellite
In CNI chaining mode (generic-veth with kube-ovn), cross-node pod-to-host traffic arrives at the destination node with the pod overlay IP as source. Cilium ipcache does not have identity entries for pods managed by kube-ovn (they are not Cilium endpoints), so the traffic is classified as identity world→unknown and dropped.
Note: ingressDeny has priority over ingress in Cilium policy evaluation. Moving port 3367 to another CCNP (e.g. restrict-drbd-reactor) with ingress.fromEntities: [cluster] would NOT help — the ingressDeny.fromEntities: [world] rule is evaluated first, and since the traffic IS classified as world, it would still be denied.
Confirmed via cilium monitor:
xx drop (Policy denied by denylist) identity world->unknown:
10.244.0.204:37124 -> 10.88.148.82:3367 tcp SYN
Why this does not affect all clusters
In standard kube-ovn distributed-gateway mode with natOutgoing: true, pod→remote-node traffic gets SNAT to the node IP. Cilium then classifies it as host (allowed by ingress.fromEntities). On affected clusters, SNAT is not applied.
Short-term fix
Remove port 3367 (and 3366) from restrict-system-components ingressDeny.
Long-term fix
Fix Cilium identity classification in generic-veth chaining mode with kube-ovn. Cross-node pod traffic should be classified as cluster, not world.
Steps to reproduce
- Deploy cozystack with
networking: kubeovn-cilium, Cilium in chaining mode
- Enable LINSTOR on a multi-node cluster
kubectl exec -n cozy-linstor deploy/linstor-controller -- linstor node list — satellites on remote nodes are OFFLINE
- TCP connection from controller pod to remote node IP:3367 fails (
world → denied)
- HostNetwork pod on same node can reach remote satellite:3367 (
host → allowed)
cilium monitor --type drop on remote node confirms: Policy denied by denylist, identity world->unknown
Environment
- Cozystack version: current main
- CNI: Cilium + kube-ovn (generic-veth chaining)
- Affected component:
cilium-networkpolicy → restrict-system-components CCNP
What happened
LINSTOR controller pod on node A cannot reach satellite on node B (port 3367 SSL). Only the satellite on the same node as the controller is Online. Cross-node pod-to-host TCP connections to port 3367 are silently dropped.
Root cause
restrict-system-componentsCCNP has:In CNI chaining mode (
generic-vethwith kube-ovn), cross-node pod-to-host traffic arrives at the destination node with the pod overlay IP as source. Cilium ipcache does not have identity entries for pods managed by kube-ovn (they are not Cilium endpoints), so the traffic is classified asidentity world→unknownand dropped.Note:
ingressDenyhas priority overingressin Cilium policy evaluation. Moving port 3367 to another CCNP (e.g.restrict-drbd-reactor) withingress.fromEntities: [cluster]would NOT help — theingressDeny.fromEntities: [world]rule is evaluated first, and since the traffic IS classified asworld, it would still be denied.Confirmed via
cilium monitor:Why this does not affect all clusters
In standard kube-ovn distributed-gateway mode with
natOutgoing: true, pod→remote-node traffic gets SNAT to the node IP. Cilium then classifies it ashost(allowed byingress.fromEntities). On affected clusters, SNAT is not applied.Short-term fix
Remove port 3367 (and 3366) from
restrict-system-componentsingressDeny.Long-term fix
Fix Cilium identity classification in
generic-vethchaining mode with kube-ovn. Cross-node pod traffic should be classified ascluster, notworld.Steps to reproduce
networking: kubeovn-cilium, Cilium in chaining modekubectl exec -n cozy-linstor deploy/linstor-controller -- linstor node list— satellites on remote nodes are OFFLINEworld→ denied)host→ allowed)cilium monitor --type dropon remote node confirms:Policy denied by denylist, identity world->unknownEnvironment
cilium-networkpolicy→restrict-system-componentsCCNP