You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs: the Multi non-goal says which side it spreads
A reader hitting the load-balancing non-goal had no way to tell entry-point
failover from pod load balancing, and read Multi behind a routed address as
the latter. The line now names the distinction: Multi spreads the accepting
side, every accepting node forwards to the same one endpoint.
Copy file name to clipboardExpand all lines: docs/spec.md
+79-2Lines changed: 79 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -51,7 +51,10 @@ may send.
51
51
52
52
- HTTP routing or TLS. An ingress controller already does that better.
53
53
- Load balancing one port across pods on several nodes. One endpoint is chosen
54
-
and reprogrammed when it goes away.
54
+
and reprogrammed when it goes away. `servingMode: Multi` spreads the accepting
55
+
side rather than the serving side: every accepting node programs the mapping,
56
+
so a routed address survives one of them going away, and all of them forward
57
+
to that same one endpoint.
55
58
- IPv6 in the first version. Every rule here is `table ip`.
56
59
- Admission webhooks. Conflicts are reported in status; the reasoning is under
57
60
Decisions.
@@ -120,7 +123,7 @@ spec:
120
123
| ports.min, ports.max | int | The range a PortMap may ask for. Defaults 1, 65535. |
121
124
| ports.reserved | list of int | Ports the admin keeps back. A PortMap naming one is rejected in status. |
122
125
| namespaceSelector | label selector | Which namespaces may reference this class. Empty selects every namespace. |
123
-
| returnPath.mode | enum | `Vxlan` or `None`. `None` refuses any mapping whose pod is on another node. |
126
+
| returnPath.mode | enum | `Vxlan` or `None`. `None` refuses any mapping that would need a return link. See returnPath mode below. |
124
127
| returnPath.vxlan.vni | int | VXLAN network identifier for the links this class builds. |
125
128
| returnPath.vxlan.port | int | UDP port for the links. Must differ from the CNI's, which is 8472 for Cilium. Default 4790. |
126
129
| returnPath.vxlan.subnet | CIDR | Link addresses are allocated from here, a /31 per node pair (RFC 3021 point-to-point), so the default gives 128 slots. The slot for a pair is a recorded claim in status.links, not a computed hash. Default 169.254.77.0/24. |
@@ -766,6 +769,80 @@ is conntrack-based, so a reply after the entry ages out is not translated back
766
769
and the client discards it. `Multi` extends that dependency to the pod's node
767
770
rather than introducing a new kind of failure.
768
771
772
+
### returnPath mode
773
+
774
+
`Vxlan` builds the return link described under The return link. `None` builds no
775
+
link and refuses any mapping that would need one.
776
+
777
+
A mapping needs a return link when the pod sits on a node other than the one
778
+
holding the DNAT rule. The DNAT happens on the programming node, and the
779
+
conntrack entry that records the address the client originally dialed lives on
780
+
that node alone. A reply leaving the pod's node by its own uplink carries the pod
781
+
address as source, and the client discards it as spoofed. The reply has to arrive
782
+
back at the node that translated the request, which is what the link is for.
0 commit comments