249 Commits

Author SHA1 Message Date
Aaron U'Ren
85f28411dc feat(.golangci.yml): enable long lines linter and remediate 2021-09-11 16:20:07 -05:00
Aaron U'Ren
874a746e30 feat(.golangci.yml): enable gosec and remediate 2021-09-11 16:20:07 -05:00
Aaron U'Ren
6208bfac46 feat(.golangci.yml): enable gomnd and remediate 2021-09-11 16:20:07 -05:00
Aaron U'Ren
1b4cc61e71 feat(.golangci.yml): enable exhaustive and remediate 2021-09-11 16:20:07 -05:00
Aaron U'Ren
f52fddddee feat(.golangci.yml): enable gocritic and remediate 2021-09-11 16:20:07 -05:00
Aaron U'Ren
d6ccc22519 feat(.golangci.yml): enable goconst and remediate 2021-09-11 16:20:07 -05:00
Aaron U'Ren
c5f4c00d63 feat(.golangci.yml): enable dupl and remediate 2021-09-11 16:20:07 -05:00
Murali Reddy
101658a51a incorporate review comments 2021-08-18 14:59:04 -05:00
Murali Reddy
892361800b ensure withdrawn external IP's on service update, are not used by any
other service. i.e) check if external IP really not used by any service

Fixes #1154
2021-08-18 14:59:04 -05:00
Aaron U'Ren
dc1960333d
fix(NPC): don't rely on exit code for chain check (#1157)
Don't use the exit code of NewChain() to decide if the chain exists or
not as it doesn't appear to be consistent between nftables and legacy
iptables implementations.
2021-08-18 23:06:02 +05:30
Lucas Mundim
401e4cfc64 fix(bgp_policies_test.go): Add missing import statement to all test cases 2021-08-13 18:14:20 -05:00
Lucas Mundim
69f8eebc24 fix(bgp_policies_test.go): fails if there are any unexpected statement 2021-08-13 18:14:20 -05:00
Aaron U'Ren
bffdc729cc
fix(npc): ordering of firewall / service rules (#1144) 2021-08-10 03:59:17 +05:30
Aaron U'Ren
35d334ca96 fix: add sleeps between iptables and ipset cleanup
I found that without taking a brief pause between iptables cleanup and
ipset deletion, sometimes the system still thought that there were
iptables references to the ipsets and would error instead of cleaning
the ipsets.
2021-08-05 16:39:28 -05:00
Aaron U'Ren
cafd69dfaf fix(NRC): reduce logging for egress cleanup errors
Errors can happen here for a lot of reasons, the user may not have been
running the controller, the definitions may have already been deleted,
the ipset may not be around to be referenced because the user already
cleaned up before.

Reduced the logging to trim user confusion over error statements in the
logs.
2021-08-05 16:39:28 -05:00
Aaron U'Ren
fb070265a2 fix(NSC): actually remove IPVS definitions 2021-08-05 16:39:28 -05:00
Aaron U'Ren
bbc0666a4c fix(NSC): add exists checking to Cleanup() 2021-08-05 16:39:28 -05:00
Aaron U'Ren
1a8c354882 fix(NPC): Cleanup() function overhaul
Use existing cleanupStale*() methods to cleanup NPC based iptables and
ipsets. This provides a more consistent method of cleanup, consolidates
the logic, and updates it for all of the changes NPC has gone through.
2021-08-05 16:39:28 -05:00
Aaron U'Ren
9bc55dc1fa fix(NPC): missed ipset locking
Somehow I missed adding ipset locking around cleanupStaleIPSets()
2021-08-05 16:39:28 -05:00
Aaron U'Ren
031d75265b feat(NPC): minor performance improvement
Don't continue the loop if we've already matched.
2021-08-05 16:39:28 -05:00
Lucas Mundim
5156f878d6 Add a default route 0.0.0.0/8 import policy deny rule 2021-08-05 12:02:42 -05:00
Billie Cleek
d5a18cac67
remove IPVS metrics (#1133)
* remove IPVS metrics

Remove metrics for IPVS services when the IPVS service is deleted so
that the number of metrics does not grow without bound.

Fixes #734

* delete metricsMap key when IPVS service is removed

Delete the key in NetworkServicesController.metricsMap when the
respective IPVS configuration is removed.

Remove a period from a comment to conform to kube-router norms

* cleanup stale metrics in a distinct method

* remove unnecessary error return value on cleanupStaleMetrics
2021-07-31 01:25:58 +05:30
Aaron U'Ren
06e246ff30 fix(NRC): PR feedback fixes 2021-07-30 12:59:32 -05:00
Aaron U'Ren
445ad9a1b5 fix(injectRoute): process withdrawls first
Avoid extra and unneeded work by processing withdrawls first. Also makes
the logic a lot more clear.
2021-07-30 12:59:32 -05:00
Aaron U'Ren
2e590a4185 fix(NRC): consolidate route delete logic
This also makes the call that happens upon path withdrawl safer, by
checking to see if the route exists before deleting it.

One departure here is that we used to only log errors, now we return
errors as soon as they are encountered, this may cause some routes to
persist even if they had been cleaned before by stopping at the first
error. However, I think that it makes for more consistent and expected
behavior if this needs to be called in another place.
2021-07-30 12:59:32 -05:00
Aaron U'Ren
d0501c0763 fix(injectRoute): cleanup tunnels & routes when peer drops 2021-07-30 12:59:32 -05:00
Aaron U'Ren
94640acf81 doc(injectRoute): improve comments on logic flow 2021-07-30 12:59:32 -05:00
Aaron U'Ren
4959da43a4 feat(NRC): reduce verbosity of log messages for common overlay cases 2021-07-30 12:59:32 -05:00
Aaron U'Ren
38222a350b fact(injectRoute): extract setupOverlayTunnel() and cleanupTunnels() 2021-07-30 12:59:32 -05:00
Aaron U'Ren
63c3b90e05 fact(injectRoute): extract parseBGPPath method to simplify 2021-07-30 12:59:32 -05:00
Aaron U'Ren
e9be04ef2f
fix: add nil checking to ipsetMutex cleanup actions (#1129) 2021-07-20 01:22:48 +05:30
Murali Reddy
c8f7daf7ce fix lint errors 2021-06-28 12:45:43 -05:00
Murali Reddy
2c4dd7d584 addressing review comments 2021-06-28 12:45:43 -05:00
Murali Reddy
4c8cfc9c27 bug fix 2021-06-28 12:45:43 -05:00
Murali Reddy
93fe004ce6 bug fixes 2021-06-28 12:45:43 -05:00
Murali Reddy
3d407dc451 make rules to ACCPET related/established traffic as first entry in pod firewall chain 2021-06-28 12:45:43 -05:00
Murali Reddy
d684ec0c65 add logic to explicitly ACCEPT traffic from/to the pod if its
permitted by applicable network policies. If there are no network
policies then by default ACCEPT the pod traffic
2021-06-28 12:45:43 -05:00
Ricardo Katz
21473edf05
Add support for kubernetes endport field (#1080) 2021-06-17 21:44:32 +05:30
Aaron U'Ren
d90c753286 fact(NPC): refactor isPodUpdateNetPolRelevant
Refactor this logic so that it can be more easily tested and expanded
without cluttering the pod.go file. Additionally, add some safe guards
around the pod cast to ensure that we're working with pods before we
pass them.
2021-06-01 10:42:42 -05:00
Aaron U'Ren
1a82db7500 fix(NPC): check if new pod is actionable
Previously, kube-router would do a full sync on a new pod whether or not
the pod was in an actionable state. This led to needless syncs as many
pods were missing PodIP addresses or other items necessary to apply
policy.

If a pod is missing these items it is better to wait for the next
message that comes via the UpdateFunc below so that we know that the pod
has all of the necessary items to apply policy to it.
2021-06-01 10:42:42 -05:00
Aaron U'Ren
3dc5c3fbcd fix(NPC): remove HostNetwork check from OnPodUpdate
With the previous logic, if a pod changed from having HostNetwork =
False to HostNetwork = True, NPC would not trigger a refresh to clear
out the rules that once applied. Now this check has been moved lower in
the fullPolicySync() logic so that it accounts for these pods naturally.
2021-06-01 10:42:42 -05:00
Aaron U'Ren
13e0a39800 fix(NPC): check if pod is actionable
Check if the Pod is actionable before taking NetworkPolicy actions which
includes both adding KUBE-POD-FW and KUBE-NWPLCY chains for it.

Checks have now been consolidated to a single isNetPolActionable()
function which checks for pod phases that we don't want NetworkPolicy
for like: Failed, Completed, and Succeeded, missing pod IP addresses,
and pods with HostNetwork enabled.

fixes #1056
2021-06-01 10:42:42 -05:00
Aaron U'Ren
fa8d69edd8 fix: add locking around ipset invocations 2021-06-01 10:42:08 -05:00
Aaron U'Ren
4306e5d47c feat(DSR): make TCPMSS based on primary link MTU 2021-05-17 16:33:15 -05:00
Aaron U'Ren
a610596277 fact(GetMTUFromNodeIP): move up a layer of abstraction
This function is useful for more than just the NRC, move it up a layer
into the global utils so it can be used from multiple controllers.
2021-05-17 16:33:15 -05:00
icefed
e223ea80a1 Fix DSR(tunneling) mode mtu limit
https://github.com/cloudnativelabs/kube-router/issues/630
2021-05-17 16:33:15 -05:00
Aaron U'Ren
45b7fd1d94 fix(NPC): parse NodePorts as unsigned ints
Also separates logic so that it can be tested more easily, and adds unit
tests to make sure there is no regression.

Fixes #1083
2021-05-17 15:33:13 -05:00
Aaron U'Ren
9cbc3763b3 feat(bgp): add BGP communities support via node annotation 2021-05-17 12:08:36 -05:00
Aaron U'Ren
ae9d0e31e8 fix(bgp_policies_test.go): actually test policy
Previously, this section was commented out and full testing to ensure
that the policies matched was not performed. Now the unit tests are more
complete and actually test that the expected policies are present.
2021-05-17 12:08:36 -05:00
Aaron U'Ren
fa7bcdeb06 fix(bgp_policies_test.go): use startBgpServer()
Use startBgpServer() rather than doing things individually, so that we
can follow the logic path of how kube-router actually works better. This
allows us to use annotations rather than set stuff manually and allows
us to test more of the code-path of the NRC.

Additionally, this change allows us to actually test some errors better
such as, make sure that startBgpServer() actually throws the error we
expect when only one part of the prepend ASN annotation is present.
Previously, we were not actually testing this code path.
2021-05-17 12:08:36 -05:00