Subtasks
Dimensions
Included in matrix below
- Endpoint devices - veth / ipvlan
- Cluster connectivity - direct-routing (endpoint routes) / direct-routing (tailcall) / tunnel-mode
- Service connectivity - kube-proxy nodeport / BPF nodeport
- Traffic security - encryption / no encryption
- Endpoint security - L7 / no L7
- Socket acceleration - sockops / no sockops
Excluded from matrix below
The below are excluded to keep the matrix to a manageable size; their impact on dataplane connectivity is lower than those in the above list.
- Host services - host-reachable / none
- Host security - encrypt-node / none
- IP connectivity - IPv4 / IPv6 / both
Commandline arguments for configuration
--datapath-mode (veth / ipvlan)
--ipam (This actually controls not only IPAM, but also ENI mode for CNI)
--tunnel, --auto-direct-node-routes
--enable-node-port
--masquerade
--enable-host-reachable-services
--install-iptables-rules (impacts ipsec, L7 policy, NodePort via kube-proxy)
--enable-ipsec
--encrypt-interface (should be covered by --enable-ipsec)
--encrypt-node
--single-cluster-route (incompatible with tunnel disabled)
--enable-endpoint-routes
--sockops-enable
--enable-ipv4 / --enable-ipv6
Configuration Matrix
Reading the matrix
- The top of the matrix determines settings related to security
- The left of the matrix determines settings related to connectivity
Key
- X -- Invalid combination
- N -- No known testing
- M -- Manually tested during 1.6 cycle
- A -- Automatically regression-tested by CI (basic connectivity)
Matrix
Note, eni is the cluster connectivity device type + configuration, not endpoint device type. ENI is typically onfigured with veth devices. This matrix needs updating.
| --- |
--- |
--- |
Socket Acceleration |
Disabled |
Disabled |
Disabled |
Disabled |
Enabled |
Enabled |
Enabled |
Enabled |
| --- |
--- |
--- |
Traffic Encryption |
No IPsec |
No IPsec |
IPsec |
IPsec |
No IPsec |
No IPsec |
IPsec |
IPsec |
| --- |
--- |
--- |
Endpoint Security |
No L7 Policy |
L7 Policy applied |
No L7 Policy |
L7 Policy applied |
No L7 Policy |
L7 Policy applied |
No L7 Policy |
L7 Policy applied |
| Endpoint Devices |
Cluster Connectivity |
Service Connectivity |
--- |
--- |
--- |
--- |
--- |
--- |
--- |
--- |
--- |
| veth |
Tunnel |
No service (to pod) |
--- |
A[0,2] |
A[1] |
A[2] |
N |
A[2] |
N |
N |
N |
| veth |
Tunnel |
kube-proxy |
--- |
A[3] |
A[3] |
N |
N |
N |
N |
N |
N |
| veth |
Tunnel |
via BPF |
--- |
X[4] |
X[4] |
X[4] |
X[4] |
N |
N |
N |
N |
| veth |
Direct Routing (tailcall) |
No service (to pod) |
--- |
A[2] |
N |
A[2] |
N |
N |
N |
N |
N |
| veth |
Direct Routing (tailcall) |
kube-proxy |
--- |
N |
N |
N |
N |
N |
N |
N |
N |
| veth |
Direct Routing (tailcall) |
via BPF |
--- |
X[4] |
X[4] |
X[4] |
X[4] |
N |
N |
N |
N |
| veth |
Direct Routing (ep-route) |
No service (to pod) |
--- |
A[2] |
N |
N |
N |
N |
N |
N |
N |
| veth |
Direct Routing (ep-route) |
kube-proxy |
--- |
N |
N |
N |
N |
N |
N |
N |
N |
| veth |
Direct Routing (ep-route) |
via BPF |
--- |
X[4] |
X[4] |
X[4] |
X[4] |
N |
N |
N |
N |
| ipvlan |
Tunnel |
No service (to pod) |
--- |
X[5] |
X[5] |
X[5] |
X[5] |
N |
N |
N |
N |
| ipvlan |
Tunnel |
kube-proxy |
--- |
X[5] |
X[5] |
X[5] |
X[5] |
N |
N |
N |
N |
| ipvlan |
Tunnel |
via BPF |
--- |
X[5] |
X[5] |
X[5] |
X[5] |
N |
N |
N |
N |
| ipvlan |
Direct Routing (tailcall) |
No service (to pod) |
--- |
A[0] |
X[5] |
N |
X[5] |
N |
N |
N |
N |
| ipvlan |
Direct Routing (tailcall) |
kube-proxy |
--- |
N |
X[5] |
N |
X[5] |
N |
N |
N |
N |
| ipvlan |
Direct Routing (tailcall) |
via BPF |
--- |
M |
X[5] |
N |
X[5] |
N |
N |
N |
N |
| ipvlan |
Direct Routing (ep-route) |
No service (to pod) |
--- |
N |
N |
N |
N |
N |
N |
N |
N |
| ipvlan |
Direct Routing (ep-route) |
kube-proxy |
--- |
N |
N |
N |
N |
N |
N |
N |
N |
| ipvlan |
Direct Routing (ep-route) |
via BPF |
--- |
N |
N |
N |
N |
N |
N |
N |
N |
Footnotes
Notes and limitations
- This matrix is focused on configuration elements that affect datapath configuration such as BPF programs, iptables rules, rule and route configurations. It does not attempt to distinguish policy cases such as in-cluster/out-cluster; L3/L4/L7 Policy (other than for the L7 redirects); etc.
- The datapath configuration tests configure different combinations of the above dimensions, however they do not cover the matrix with L7 policy; nor do they make calls through services; only directly via pod IPs.
- Per-endpoint routes is considered orthogonal to tunnel and only compatible with direct-routing, hence only an option for direct routing in the table above.
Subtasks
Dimensions
Included in matrix below
Excluded from matrix below
The below are excluded to keep the matrix to a manageable size; their impact on dataplane connectivity is lower than those in the above list.
Commandline arguments for configuration
--datapath-mode(veth / ipvlan)--ipam(This actually controls not only IPAM, but also ENI mode for CNI)--tunnel,--auto-direct-node-routes--enable-node-port--masquerade--enable-host-reachable-services--install-iptables-rules(impacts ipsec, L7 policy, NodePort via kube-proxy)--enable-ipsec(should be covered by--encrypt-interface--enable-ipsec)--encrypt-node--single-cluster-route(incompatible with tunnel disabled)--enable-endpoint-routes--sockops-enable--enable-ipv4/--enable-ipv6Configuration Matrix
Reading the matrix
Key
Matrix
Note, eni is the cluster connectivity device type + configuration, not endpoint device type. ENI is typically onfigured with veth devices. This matrix needs updating.
Footnotes
I can't find any documentation related to this, but I don't think ENI + Tunnel works.ENI + Tunnel works but it's pretty pointless. I've manually tested it but don't expect anybody to use it.Notes and limitations