Commit Graph

364 Commits

Author SHA1 Message Date
Lucas Servén Marín
3facc9f34f
cmd/kg: only delete iface if requested
This commit modifies the default behavior of Kilo so that the WireGuard
interface is only deleted on shutdown if explicitly requested.

Fixes: https://github.com/squat/kilo/issues/17#issuecomment-534658157
2019-09-25 13:45:31 +02:00
Lucas Servén Marín
e83db17d88
pkg/iptables: add rules in correct order
This commit takes a big step towards ensuring that iptables rules are
always kept in the correct order. Specifically, when re-setting a a
ruleset, any time a rule is missing, that rule and all following rules
are re-added to ensure that from that index onwards all rules are in the
right order. Similarly, when reconciling an existing ruleset against the
backend, if a rule is missing, that rule an all following rules are
re-added.

This change does not guarantee that the order of rules in the backend
is correct. Unless an actor is modifying the order of rules in iptables,
all rules created by Kilo should now be kept in the correct order.

Fixes: #19
2019-09-25 13:23:31 +02:00
Lucas Servén Marín
1265ce0cd5
pkg/route: filter invalid route updates
This commit fixes the underlying issue that caused crashes when
receiving a nil route update, as reported in
https://github.com/squat/kilo/issues/17.
2019-09-24 16:13:14 +02:00
Lucas Servén Marín
20349de548
pkg/wireguard: allow specifying iface named
This commit makes it possible to specify the Kilo interface name. If the
specified interface exists, it will be used; if it does not exist, Kilo
will create it. If the interface already existed, then it will not be
deleted on shutdown; otherwise Kilo will destroy the interface.

Fixes: https://github.com/squat/kilo/issues/8
Addresses: 1/2 of https://github.com/squat/kilo/issues/17
2019-09-24 16:05:10 +02:00
Lucas Servén Marín
9fda84ec05
docs,README: fix kubeconfig env var 2019-09-24 01:00:43 +02:00
Lucas Servén Marín
3df87f0e71
cmd/kgctl: allow specifying port 2019-09-24 01:00:16 +02:00
Lucas Servén Marín
676007938e
pkg/mesh: add peers to graph 2019-09-23 17:54:16 +02:00
Lucas Servén Marín
887806c7ce
Makefile: fix latest manifest 2019-09-20 00:56:25 +02:00
Lucas Servén Marín
f04944df4a
Makefile: fix arm image 2019-09-19 21:48:47 +02:00
Lucas Servén Marín
7c90a40c5a
Makefile: fix arm64 image 2019-09-08 12:02:34 +02:00
Lucas Servén Marín
c93fa1e5b1
Dockerfile: fix cni plugins for arm
This commit ensures that the architecture of the installed CNI plugins
corresponds to the architecture of the container.
2019-08-16 17:45:36 +02:00
sam
5fc13de6cb manifests: change the kubeconfig hostPath for k3s
Enhancement: change the kubeconfig hostPath for k3s agent nodes. This makes it easier to install Kilo on k3s as no manual kubeconfig copying is necessary. (#14)
2019-08-14 08:55:15 +02:00
Lucas Servén Marín
d385686fa9
manifests: add selector to daemonsets
Fixes #9
2019-08-01 16:51:03 +02:00
Lucas Servén Marín
b6b5974fbe
docs: update multi-cluster-svcs 2019-07-30 15:09:12 +02:00
Lucas Servén Marín
1d5e3685e3
manifests: update API groups
This commit updates the API group for DaemonSets to apps/v1
and the API version for ClusterRoles to v1.
2019-07-16 23:41:20 +02:00
Lucas Servén Marín
d299a8875f
README: clarify and fix grammar 2019-07-16 23:31:27 +02:00
Lucas Servén Marín
8e755cf52e
pkg: allow overriding internal IP
This addresses the request for enhancement in
https://github.com/squat/kilo/issues/7.
2019-07-15 17:24:35 +02:00
Lucas Servén Marín
82fe418f89
Dockerfile: update alpine repo for wg 2019-05-22 10:26:20 +02:00
Lucas Servén Marín
7d77f87ba0
docs: fix links 2019-05-18 02:43:07 +02:00
Lucas Servén Marín
55280ab09b
manifests: default hostname to spec.nodeName
Not all K8s installs will correctly match the node's hostname to the
node's name in the API. We can get around this by setting the name Kilo
uses to the node name in the API.
2019-05-17 22:29:55 +02:00
Lucas Servén Marín
51df7fc4e3
pkg/mesh: don't let hostname resolution stop mesh
If the hostname fails to resolve, this should not be considered a
blocking error. Most likely, it means that the hostname is simply not
resolvable, which should not be a requirement to run Kilo. In this case,
simply try to find a valid IP from other sources.
2019-05-17 18:09:31 +02:00
Lucas Servén Marín
c9969f5be9
Makefile: improve tooling
This commit improves the tooling for the repo and makes all go binaries
managed with go mod. This ensures all tooling is vendored.
2019-05-17 00:23:56 +02:00
Lucas Servén Marín
ca70fec14f
vendor: revendor 2019-05-17 00:23:05 +02:00
Lucas Servén Marín
adb09ce620
Makefile,Dockerfile: add multi-arch images
This commit changes the build-system for Kilo to create container images
for multiple architectures. This will enable running Kilo on Arm
devices, e.g. Raspberry Pis. This is accomplished using Docker
manifests.
2019-05-16 22:53:43 +02:00
Lucas Servén Marín
81d6077fc2
manifests,pkg/encapsulation: Flannel compatibility
This commit adds basic support to run in compatibility mode with
Flannel. This allows clusters running Flannel as their principal
networking solution to leverage some advances Kilo features. In certain
Flannel setups, the clusters can even leverage muti-cloud. For this, the
cluster needs to either run in a full mesh, or Flannel needs to use the
API server's external IP address.
2019-05-14 01:01:58 +02:00
Lucas Servén Marín
cd6eeeb1e7
pkg/{encapsulation,mesh}: abstract encapsulation
This commit abstracts away encapsulation to more easily allow for
different types of encapsulation or compatibility with other networking
solutions.
2019-05-13 18:30:03 +02:00
Lucas Servén Marín
d7ad946ff4
pkg/mesh: ignore CNI IP from private IPs
We need to ignore the CNI IP address from the searched IPs, as this will
not be a routable IP address.
2019-05-13 17:35:08 +02:00
Lucas Servén Marín
8ed1b549d1
pkg/mesh: edge case external = internal
Add an exception to the route generation rules for when the external IP
of a node equals the internal IP. In this case, we cannot route traffic
through a tunnel.
2019-05-13 17:25:56 +02:00
Lucas Servén Marín
459262326e
README: fix k3s capitalization 2019-05-13 14:31:55 +02:00
Lucas Servén Marín
ad29121b27
Merge pull request #2 from fire/master
Add k3s.
2019-05-13 14:26:06 +02:00
K. S. Ernest (iFIre) Lee
0f87547a26
README: add instructions to use k3s. 2019-05-13 14:10:37 +02:00
K. S. Ernest (iFIre) Lee
81ce93dab7
manifests: add support for k3s 2019-05-13 14:10:13 +02:00
Lucas Servén Marín
e4ad7c29ec
manifests: keep private key between restarts
This commit ensures that the WireGuard private key is re-used between
container restarts. The result of this is that external peers can keep
using their configuration and don't need to be re-configured just
because the Kilo container restarted.
2019-05-10 22:21:56 +02:00
Lucas Servén Marín
bbbfc0548f
docs: update multi-cluster-services examples 2019-05-10 02:45:00 +02:00
Lucas Servén Marín
35390054ba
pkg: deduplicate peer IP addresses
We need to defensively deduplicate peer allowed IPs.
If two peers claim the same IP, the WireGuard configuration
could flap, causing the interface to churn.
2019-05-10 02:07:42 +02:00
Lucas Servén Marín
4d9c203603
pkg/mesh,cmd: add WireGuard IP to Nodes
This allows admins or users to have some easy visibility into the
configuration of the Kilo cluster.
2019-05-10 02:06:02 +02:00
Lucas Servén Marín
b04264ecc1
cmg/kgctl: fix peer as-peer 2019-05-09 17:18:45 +02:00
Lucas Servén Marín
47a7cebd35
docs: fix multi-cluster formatting 2019-05-08 23:06:17 +02:00
Lucas Servén Marín
034c27ab78
pkg: fix reconciling peer updates 2019-05-08 17:13:24 +02:00
Lucas Servén Marín
545bc4186f
docs,README: document multi-cluster services 2019-05-08 17:13:20 +02:00
Lucas Servén Marín
90e68c7735
cmd/kgctl: add output options for showconf
This commit adds several output options to the `showconf` command of the
`kgctl` binary:
* `--as-peer`: this can be used to generate a peer configuration, which
can be used to configure the selected resource as a peer of another
WireGuard interface
* `--output`: this can be used to select the desired output format of
the peer resource, available options are: WireGuard, YAML, and JSON.
2019-05-08 01:31:36 +02:00
Lucas Servén Marín
5914a9468f
docs: add topology docs and graphs 2019-05-07 16:36:02 +02:00
Lucas Servén Marín
9f30d8d1a1
pkg/mesh: rename mesh granularity types
This commit renames the mesh granularity types to make them more
intuitive. The functionality provided by them remains exactly the same.
2019-05-07 16:34:49 +02:00
Lucas Servén Marín
c65627dab0
pkg/route: account for interface churn
When interfaces on the host churn, the kernel will remove routes
associated with those interfaces. This could cause the Kilo route
controller to become out of sync with the routes that really exist. This
commit fixes this behavior.
2019-05-07 12:06:21 +02:00
Lucas Servén Marín
02bd5fa6c0
vendor: re-vendor 2019-05-07 01:53:14 +02:00
Lucas Servén Marín
b3a3c37e0a
*: add complete CNI support
This commit enables Kilo to work as an independent networking provider.
This is done by leveraging CNI. Kilo brings the necessary CNI plugins to
operate and takes care of all networking.

Add-on compatibility for Calico, Flannel, etc, will be re-introduced
shortly.
2019-05-07 01:49:59 +02:00
Lucas Servén Marín
72991949ac
cmd/kgctl: use KUBECONFIG from env 2019-05-03 14:25:20 +02:00
Lucas Servén Marín
5865cefbfa
README: fix setconf example 2019-05-03 14:25:20 +02:00
Lucas Servén Marín
85180a80cc
pkg/k8s/apis: make more fields optional 2019-05-03 14:08:13 +02:00
Lucas Servén Marín
cd9c83b3bc
pkg/wireguard: simplify returns 2019-05-03 13:49:55 +02:00