38 Commits

Author SHA1 Message Date
bzub
a5a446a6ca Use forward domain notation for annotations
"kube-router.io/..."
This is in line with convention set by k8s upstream.
2017-10-05 22:18:18 -05:00
Ryar Nyah
3431a1831f Delete ipset dependency + delete unused ipsets 2017-09-25 21:17:25 +02:00
Bryan Zubrod
e19f2a69c2 BGP peer password auth, consistent configurations (#164)
* Add --peer-router-password option
Also:
- Consolodated NRC peer fields into a []config.NeighborConfig
  to store address, asn, and password for each peer.
- BREAKING: --peer-router and --peer-asn flags now take slices
  rather than strings.

* Add password auth node annotation for external peer

* Update documentation

New CLI flags and annotations
Renamed ones as well

* Consistent CLI flags, annotations, and peer config

BGP configs now all accept multiple values and are treated consistently.
Other refactoring was done as well.

* Stop bgpserver on peering errors to avoid listener leak

* Clarify BGP doc sections

Fix some typos
2017-09-24 23:21:12 -05:00
Bryan Zubrod
d6ea74067e Dynamic gobgpd listener config, fix leaked listener (#156)
* bgpserver: listen only on enabled address protocols
* tiny typo fix
* Ensure gobgp server listener gets closed
2017-09-16 02:11:32 -05:00
Murali Reddy
ca97d0d6eb Adding ability to disable IP-in-IP tunnelining for cross node pod-to-pod connectivity
where nodes are in different subnet. With tunneling disabled its expected that default
gateway has learned the pod CIDR's allocated for all the nodes and can route the
pod-to-pod traffic across nodes in different subnets

Fixes #119
2017-09-08 22:03:09 +05:30
Murali Reddy
f6a5e239f0 fixing gofmt, go_vet, gocyclo, golint errors 2017-09-04 17:10:48 +05:30
Murali Reddy
020d93238e fixing gofmt, go_vet, gocyclo, golint errorswq 2017-09-04 14:49:45 +05:30
Murali Reddy
c9c6107ddd Merge pull request #143 from cloudnativelabs/pbr_tunnels
Setup policy-based routing so that traffic arriving on a tunnel interface leaves on same tunnel interface irrespective of rp_filter value
2017-09-02 06:07:12 +05:30
Murali Reddy
7b9eedcd7c Setup policy-based routing so that traffic arriving on a tunnel interface leaves on same tunnel interface irrespective of rp_filter value
- ip rule to lookup custom route table for packets arriving from the pods
    - in the custom route table add route to route traffic to remote node through tunnel interface

Fixes #138
2017-09-02 04:00:20 +05:30
Murali Reddy
ed935a4d7a fix gofmt, go_vet, misspells 2017-09-02 00:29:35 +05:30
Murali Reddy
ff079d205a Enable netfilter for bridge, requirement for all CNI that use bridge
https://kubernetes.io/docs/concepts/cluster-administration/network-plugins/#network-plugin-requirements

Fixes #141
2017-08-29 20:13:33 +05:30
Murali Reddy
11a779f78c Add iptable rule in filter table FORWRD chain to allow traffic in and out to the pods
Fixes #120
2017-08-14 18:08:47 +05:30
Bryan Zubrod
c81bfbb616 Enable pod egress masquerading by default (#111)
* Enable pod egress masquerading by default
- Adds flag "--enable-pod-egress" (default: true)
- Removes previously created iptables rule if option is changed to false
* Use an ipset to match Pod egress traffic to be masqueraded
* Set --cluster-cidr as depreciated flag
If set to anything, normal dynamic Pod egress masquerading is turned on.
* Use Replace else Add logic for updating export policy
Fixes errors logged due to existing statement in poliy.
2017-08-10 11:50:06 -05:00
Murali Reddy
898d78d688 reduce ipip tunnel MTU 20 to accommodate the tunnel overhead
Fixes #108
2017-08-07 19:35:36 +05:30
Murali Reddy
b8d3914242 Use IP-IP tunnelling for cross-subnet pod connectivity
- create a ipip tunnel interface from each node to nodes in the different subnet
- insert route to local routing table using tunnel device

Fixes #92
2017-08-06 13:05:14 +05:30
Bryan Zubrod
f8174a66be network_route_controller: Avoid redundant policy sets (#98)
* gofmt

* route_controller: Avoid redundant DefinedSet adds
2017-08-03 02:49:20 -05:00
Murali Reddy
449f1bfcc6 fix Source/destination check disable logic 2017-07-21 15:20:42 +05:30
Murali Reddy
ef66b01002 WIP prometheus metrics: add pps in and out per service backend 2017-07-20 01:01:38 +05:30
Murali Reddy
83ca0c42d7 BGP export polices to advertise routes so that extra hop is avoided
Fixes #71
2017-07-19 21:13:03 +05:30
Murali Reddy
3f062f2828 fixing regression due to #71 2017-07-18 05:57:29 +05:30
Murali Reddy
e3ea82a1d1 add a BGP export policy on each node so that, learned routes
from iBGP peers are never advertised to global peer

Fixes #71
2017-07-18 04:04:30 +05:30
Murali Reddy
fb09646212 on BGP peer down, advertised route from peer is not cleaned-up in local routing table
Fixes #69
2017-07-17 09:20:11 +05:30
Murali Reddy
beb39cc54b When running on AWS disable source-destination checks automatically
Fixes #35
2017-07-15 01:50:19 +05:30
Bryan Zubrod
a3bddf6ecd services-controller: Add LoadBalancer Service support (#53)
* Allow LoadBalancer Service type
* Update docs
2017-07-11 18:12:11 -05:00
Bryan Zubrod
5af635a9bc CI: Automated build/release workflow (#46)
TLDR; Run "make help" for options.

* gofmt
* .gitignore kube-router binary
* Docs: build/release workflow
* Implement build/release workflow
2017-07-09 11:21:26 -05:00
bzub
cb661f871c controller: - Replace panics with errors
- Add context to errors for debugging
            - Refactor init() code so ipset isn't required to run
              "kube-router --help" for example
2017-07-05 21:57:29 -05:00
Murali Reddy
a757ea3203 Allow multiple peer routers specified through global BGP peer router flag '--peer-router'.
Node annotation to specifiy BGP peer routers also supports one or more BGP peers.

Fixes #37
2017-07-03 22:53:04 +05:30
Murali Reddy
2703522040 Support more than a single AS per cluster and configurable node specific
external BGP routers

Fixes #22
2017-06-13 10:22:22 +05:30
Murali Reddy
29396f9662 add option '--hostname-override' to deal with cases where kubelet is launched
with --hostname-override flag

Fixes #23
2017-06-10 07:10:38 +05:30
Murali Reddy
d4f32978fb use NODE_NAME env variable to get the node object when running as daemon set
If NODE_NAME env is not set, fall back to hostname.

Partial fix towards #23 we still have issue where kube-router is run as agent
and kubelet is started with --hostname-overide flag
2017-06-07 02:28:21 +05:30
Murali Reddy
1478527cc8 setup masquerade rule for traffic destined for outside of cluster and pod network
change added iptable rule in NAT table POSTROUTING chain to masqurade outbound traffic
from the pods.

Fixes #8
2017-06-01 07:20:04 +05:30
Murali Reddy
c9bc18e92d Skip head less services, when advertising cluster IP to external routers
Fixes #20
2017-06-01 00:52:47 +05:30
Murali Reddy
d042dbb21e Add new Node api watcher which watches for add/remove nodes events.
On add/remove node events, perform refresh of peers to the peers as per the
current set of active nodes. If a node is removed, delete the BGP nieghbor relation.

Fixes #14
2017-05-30 20:35:23 +05:30
Murali Reddy
4531a915bb Handle both cases where node can be registered with master either
by host name or FQDN. kubelet can be started with --hostname-override with configurable value.
In AWS envirinment typcally its set FQDN obtained from the metda data. This fix ensures
we can deploy kube-router in case nodes are registered with FQDN

Fixes #17
2017-05-30 03:11:51 +05:30
Murali Reddy
0f86e78c59 Adds support for advertising cluster IP correponding to a service to the BGP peers
Once external BGP is peered with cluster nodes, pods can be routable externally

fixes #4 and #7
2017-05-21 06:44:36 +05:30
Murali Reddy
231e5cee71 enable kube-router to be run as daemonset 2017-04-27 03:08:37 +05:30
Murali Reddy
a4e773bd91 edit README and handle external (outside from cluster) access to nodeport services
by masqurading the traffic so the return traffic from the pod hits the node before
going to the client
2017-04-18 03:37:46 +05:30
Murali Reddy
04a5cc033a base line version tested with kube 1.5.6, 1.6 2017-04-17 10:33:09 +05:30