2 Commits

Author SHA1 Message Date
Lucas Servén Marín
acc3696057 Merge pull request #225 from squat/fix_scope
pkg/k8s: fix resource scope of Kilo CRD
2021-08-19 23:43:28 +02:00
Lucas Servén Marín
288bb824aa pkg/k8s: fix resource scope of Kilo CRD
When updating Kilo to the latest version of the CustomResourceDefinition
API, the Kilo Peer CRD was incorrectly scoped as a namespaced resource
due to differences in the ergonomics of the tooling.

This commit fixes the scoping of the Peer CRD to be cluster-wide.

Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
2021-08-19 22:58:42 +02:00
61 changed files with 1715 additions and 2197 deletions

View File

@@ -11,7 +11,7 @@ ARG GOARCH
ARG ALPINE_VERSION=v3.12 ARG ALPINE_VERSION=v3.12
LABEL maintainer="squat <lserven@gmail.com>" LABEL maintainer="squat <lserven@gmail.com>"
RUN echo -e "https://alpine.global.ssl.fastly.net/alpine/$ALPINE_VERSION/main\nhttps://alpine.global.ssl.fastly.net/alpine/$ALPINE_VERSION/community" > /etc/apk/repositories && \ RUN echo -e "https://alpine.global.ssl.fastly.net/alpine/$ALPINE_VERSION/main\nhttps://alpine.global.ssl.fastly.net/alpine/$ALPINE_VERSION/community" > /etc/apk/repositories && \
apk add --no-cache ipset iptables ip6tables wireguard-tools graphviz font-noto apk add --no-cache ipset iptables ip6tables wireguard-tools
COPY --from=cni bridge host-local loopback portmap /opt/cni/bin/ COPY --from=cni bridge host-local loopback portmap /opt/cni/bin/
COPY bin/linux/$GOARCH/kg /opt/bin/ COPY bin/linux/$GOARCH/kg /opt/bin/
ENTRYPOINT ["/opt/bin/kg"] ENTRYPOINT ["/opt/bin/kg"]

View File

@@ -12,9 +12,9 @@ else
endif endif
RELEASE_BINS := $(addprefix bin/release/kgctl-, $(addprefix linux-, $(ALL_ARCH)) darwin-amd64 darwin-arm64 windows-amd64) RELEASE_BINS := $(addprefix bin/release/kgctl-, $(addprefix linux-, $(ALL_ARCH)) darwin-amd64 darwin-arm64 windows-amd64)
PROJECT := kilo PROJECT := kilo
PKG := github.com/kilo-io/$(PROJECT) PKG := github.com/squat/$(PROJECT)
REGISTRY ?= index.docker.io REGISTRY ?= index.docker.io
IMAGE ?= kiloio/$(PROJECT) IMAGE ?= squat/$(PROJECT)
FULLY_QUALIFIED_IMAGE := $(REGISTRY)/$(IMAGE) FULLY_QUALIFIED_IMAGE := $(REGISTRY)/$(IMAGE)
TAG := $(shell git describe --abbrev=0 --tags HEAD 2>/dev/null) TAG := $(shell git describe --abbrev=0 --tags HEAD 2>/dev/null)
@@ -209,7 +209,7 @@ $(BASH_UNIT):
chmod +x $@ chmod +x $@
e2e: container $(KIND_BINARY) $(KUBECTL_BINARY) $(BASH_UNIT) bin/$(OS)/$(ARCH)/kgctl e2e: container $(KIND_BINARY) $(KUBECTL_BINARY) $(BASH_UNIT) bin/$(OS)/$(ARCH)/kgctl
KILO_IMAGE=$(IMAGE):$(ARCH)-$(VERSION) KIND_BINARY=$(KIND_BINARY) KUBECTL_BINARY=$(KUBECTL_BINARY) KGCTL_BINARY=$(shell pwd)/bin/$(OS)/$(ARCH)/kgctl $(BASH_UNIT) $(BASH_UNIT_FLAGS) ./e2e/setup.sh ./e2e/full-mesh.sh ./e2e/location-mesh.sh ./e2e/multi-cluster.sh ./e2e/handlers.sh ./e2e/teardown.sh KILO_IMAGE=$(IMAGE):$(ARCH)-$(VERSION) KIND_BINARY=$(KIND_BINARY) KUBECTL_BINARY=$(KUBECTL_BINARY) KGCTL_BINARY=$(shell pwd)/bin/$(OS)/$(ARCH)/kgctl $(BASH_UNIT) $(BASH_UNIT_FLAGS) ./e2e/setup.sh ./e2e/full-mesh.sh ./e2e/location-mesh.sh ./e2e/multi-cluster.sh ./e2e/teardown.sh
header: .header header: .header
@HEADER=$$(cat .header); \ @HEADER=$$(cat .header); \

View File

@@ -4,8 +4,8 @@
Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes. Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes.
[![Build Status](https://github.com/kilo-io/kilo/workflows/CI/badge.svg)](https://github.com/kilo-io/kilo/actions?query=workflow%3ACI) [![Build Status](https://github.com/squat/kilo/workflows/CI/badge.svg)](https://github.com/squat/kilo/actions?query=workflow%3ACI)
[![Go Report Card](https://goreportcard.com/badge/github.com/kilo-io/kilo)](https://goreportcard.com/report/github.com/kilo-io/kilo) [![Go Report Card](https://goreportcard.com/badge/github.com/squat/kilo)](https://goreportcard.com/report/github.com/squat/kilo)
[![Docker Pulls](https://img.shields.io/docker/pulls/squat/kilo)](https://hub.docker.com/r/squat/kilo) [![Docker Pulls](https://img.shields.io/docker/pulls/squat/kilo)](https://hub.docker.com/r/squat/kilo)
[![Slack](https://img.shields.io/badge/join%20slack-%23kilo-brightgreen.svg)](https://slack.k8s.io/) [![Slack](https://img.shields.io/badge/join%20slack-%23kilo-brightgreen.svg)](https://slack.k8s.io/)
@@ -72,29 +72,29 @@ Kilo can be installed by deploying a DaemonSet to the cluster.
To run Kilo on kubeadm: To run Kilo on kubeadm:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-kubeadm.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-kubeadm.yaml
``` ```
To run Kilo on bootkube: To run Kilo on bootkube:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-bootkube.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-bootkube.yaml
``` ```
To run Kilo on Typhoon: To run Kilo on Typhoon:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-typhoon.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-typhoon.yaml
``` ```
To run Kilo on k3s: To run Kilo on k3s:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-k3s.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-k3s.yaml
``` ```
## Add-on Mode ## Add-on Mode
@@ -106,11 +106,11 @@ Kilo currently supports running on top of Flannel.
For example, to run Kilo on a Typhoon cluster running Flannel: For example, to run Kilo on a Typhoon cluster running Flannel:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-typhoon-flannel.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-typhoon-flannel.yaml
``` ```
[See the manifests directory for more examples](https://github.com/kilo-io/kilo/tree/main/manifests). [See the manifests directory for more examples](https://github.com/squat/kilo/tree/main/manifests).
## VPN ## VPN

View File

@@ -1,145 +0,0 @@
// Copyright 2019 the Kilo authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package main
import (
"bytes"
"fmt"
"io"
"mime"
"net"
"net/http"
"os"
"os/exec"
"github.com/kilo-io/kilo/pkg/mesh"
)
type graphHandler struct {
mesh *mesh.Mesh
granularity mesh.Granularity
hostname *string
subnet *net.IPNet
}
func (h *graphHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
ns, err := h.mesh.Nodes().List()
if err != nil {
http.Error(w, fmt.Sprintf("failed to list nodes: %v", err), http.StatusInternalServerError)
return
}
ps, err := h.mesh.Peers().List()
if err != nil {
http.Error(w, fmt.Sprintf("failed to list peers: %v", err), http.StatusInternalServerError)
return
}
nodes := make(map[string]*mesh.Node)
for _, n := range ns {
if n.Ready() {
nodes[n.Name] = n
}
}
if len(nodes) == 0 {
http.Error(w, "did not find any valid Kilo nodes in the cluster", http.StatusInternalServerError)
return
}
peers := make(map[string]*mesh.Peer)
for _, p := range ps {
if p.Ready() {
peers[p.Name] = p
}
}
topo, err := mesh.NewTopology(nodes, peers, h.granularity, *h.hostname, 0, []byte{}, h.subnet, nodes[*h.hostname].PersistentKeepalive, nil)
if err != nil {
http.Error(w, fmt.Sprintf("failed to create topology: %v", err), http.StatusInternalServerError)
return
}
dot, err := topo.Dot()
if err != nil {
http.Error(w, fmt.Sprintf("failed to generate graph: %v", err), http.StatusInternalServerError)
}
buf := bytes.NewBufferString(dot)
format := r.URL.Query().Get("format")
switch format {
case "":
format = "svg"
case "dot", "gv":
// If the raw dot data is requested, return it as string.
// This allows client-side rendering rather than server-side.
w.Write(buf.Bytes())
return
case "svg", "png", "bmp", "fig", "gif", "json", "ps":
// Accepted format
default:
http.Error(w, "unsupported format", http.StatusInternalServerError)
return
}
layout := r.URL.Query().Get("layout")
switch layout {
case "":
layout = "circo"
case "circo", "dot", "neato", "twopi", "fdp":
// Accepted layout
default:
http.Error(w, "unsupported layout", http.StatusInternalServerError)
return
}
command := exec.Command("dot", "-K"+layout, "-T"+format)
command.Stderr = os.Stderr
stdin, err := command.StdinPipe()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if _, err = io.Copy(stdin, buf); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err = stdin.Close(); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
output, err := command.Output()
if err != nil {
http.Error(w, "unable to render graph", http.StatusInternalServerError)
return
}
mimeType := mime.TypeByExtension("." + format)
if mimeType == "" {
mimeType = "application/octet-stream"
}
w.Header().Add("content-type", mimeType)
w.Write(output)
}
func healthHandler(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusOK)
}

View File

@@ -35,12 +35,11 @@ import (
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
"github.com/kilo-io/kilo/pkg/encapsulation" "github.com/squat/kilo/pkg/encapsulation"
"github.com/kilo-io/kilo/pkg/k8s" "github.com/squat/kilo/pkg/k8s"
kiloclient "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" kiloclient "github.com/squat/kilo/pkg/k8s/clientset/versioned"
"github.com/kilo-io/kilo/pkg/mesh" "github.com/squat/kilo/pkg/mesh"
"github.com/kilo-io/kilo/pkg/version" "github.com/squat/kilo/pkg/version"
"github.com/kilo-io/kilo/pkg/wireguard"
) )
const ( const (
@@ -95,7 +94,6 @@ func Main() error {
local := flag.Bool("local", true, "Should Kilo manage routes within a location?") local := flag.Bool("local", true, "Should Kilo manage routes within a location?")
logLevel := flag.String("log-level", logLevelInfo, fmt.Sprintf("Log level to use. Possible values: %s", availableLogLevels)) logLevel := flag.String("log-level", logLevelInfo, fmt.Sprintf("Log level to use. Possible values: %s", availableLogLevels))
master := flag.String("master", "", "The address of the Kubernetes API server (overrides any value in kubeconfig).") master := flag.String("master", "", "The address of the Kubernetes API server (overrides any value in kubeconfig).")
mtu := flag.Uint("mtu", wireguard.DefaultMTU, "The MTU of the WireGuard interface created by Kilo.")
topologyLabel := flag.String("topology-label", k8s.RegionLabelKey, "Kubernetes node label used to group nodes into logical locations.") topologyLabel := flag.String("topology-label", k8s.RegionLabelKey, "Kubernetes node label used to group nodes into logical locations.")
var port uint var port uint
flag.UintVar(&port, "port", mesh.DefaultKiloPort, "The port over which WireGuard peers should communicate.") flag.UintVar(&port, "port", mesh.DefaultKiloPort, "The port over which WireGuard peers should communicate.")
@@ -182,7 +180,7 @@ func Main() error {
return fmt.Errorf("backend %v unknown; possible values are: %s", *backend, availableBackends) return fmt.Errorf("backend %v unknown; possible values are: %s", *backend, availableBackends)
} }
m, err := mesh.New(b, enc, gr, *hostname, uint32(port), s, *local, *cni, *cniPath, *iface, *cleanUpIface, *createIface, *mtu, *resyncPeriod, log.With(logger, "component", "kilo")) m, err := mesh.New(b, enc, gr, *hostname, uint32(port), s, *local, *cni, *cniPath, *iface, *cleanUpIface, *createIface, *resyncPeriod, log.With(logger, "component", "kilo"))
if err != nil { if err != nil {
return fmt.Errorf("failed to create Kilo mesh: %v", err) return fmt.Errorf("failed to create Kilo mesh: %v", err)
} }
@@ -198,8 +196,9 @@ func Main() error {
{ {
// Run the HTTP server. // Run the HTTP server.
mux := http.NewServeMux() mux := http.NewServeMux()
mux.HandleFunc("/health", healthHandler) mux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
mux.Handle("/graph", &graphHandler{m, gr, hostname, s}) w.WriteHeader(http.StatusOK)
})
mux.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{})) mux.Handle("/metrics", promhttp.HandlerFor(r, promhttp.HandlerOpts{}))
l, err := net.Listen("tcp", *listen) l, err := net.Listen("tcp", *listen)
if err != nil { if err != nil {

View File

@@ -18,8 +18,7 @@ import (
"fmt" "fmt"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/squat/kilo/pkg/mesh"
"github.com/kilo-io/kilo/pkg/mesh"
) )
func graph() *cobra.Command { func graph() *cobra.Command {

View File

@@ -26,10 +26,10 @@ import (
"k8s.io/client-go/kubernetes" "k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/tools/clientcmd"
"github.com/kilo-io/kilo/pkg/k8s" "github.com/squat/kilo/pkg/k8s"
kiloclient "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" kiloclient "github.com/squat/kilo/pkg/k8s/clientset/versioned"
"github.com/kilo-io/kilo/pkg/mesh" "github.com/squat/kilo/pkg/mesh"
"github.com/kilo-io/kilo/pkg/version" "github.com/squat/kilo/pkg/version"
) )
const ( const (

View File

@@ -28,9 +28,9 @@ import (
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"k8s.io/apimachinery/pkg/runtime/serializer/json" "k8s.io/apimachinery/pkg/runtime/serializer/json"
"github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
"github.com/kilo-io/kilo/pkg/mesh" "github.com/squat/kilo/pkg/mesh"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
const ( const (

View File

@@ -14,7 +14,7 @@ To follow along, you need to install the following utilities:
Clone the Repository and `cd` into it. Clone the Repository and `cd` into it.
```shell ```shell
git clone https://github.com/kilo-io/kilo.git git clone https://github.com/squat/kilo.git
cd kilo cd kilo
``` ```

View File

@@ -8,7 +8,7 @@ It performs several key functions, including:
* maintaining routing table entries and iptables rules. * maintaining routing table entries and iptables rules.
`kg` is typically installed on all nodes of a Kubernetes cluster using a DaemonSet. `kg` is typically installed on all nodes of a Kubernetes cluster using a DaemonSet.
Example manifests can be found [in the manifests directory](https://github.com/kilo-io/kilo/tree/main/manifests). Example manifests can be found [in the manifests directory](https://github.com/squat/kilo/tree/main/manifests).
## Usage ## Usage
@@ -32,7 +32,6 @@ Usage of bin//linux/amd64/kg:
--log-level string Log level to use. Possible values: all, debug, info, warn, error, none (default "info") --log-level string Log level to use. Possible values: all, debug, info, warn, error, none (default "info")
--master string The address of the Kubernetes API server (overrides any value in kubeconfig). --master string The address of the Kubernetes API server (overrides any value in kubeconfig).
--mesh-granularity string The granularity of the network mesh to create. Possible values: location, full (default "location") --mesh-granularity string The granularity of the network mesh to create. Possible values: location, full (default "location")
--mtu uint The MTU of the WireGuard interface created by Kilo. (default 1420)
--port uint The port over which WireGuard peers should communicate. (default 51820) --port uint The port over which WireGuard peers should communicate. (default 51820)
--resync-period duration How often should the Kilo controllers reconcile? (default 30s) --resync-period duration How often should the Kilo controllers reconcile? (default 30s)
--subnet string CIDR from which to allocate addresses for WireGuard interfaces. (default "10.4.0.0/16") --subnet string CIDR from which to allocate addresses for WireGuard interfaces. (default "10.4.0.0/16")

View File

@@ -6,20 +6,20 @@ This tool can be used to understand a mesh's topology, get the WireGuard configu
## Installation ## Installation
The `kgctl` binary is automatically compiled for Linux, macOS, and Windows for every release of Kilo and can be downloaded from [the GitHub releases page](https://github.com/kilo-io/kilo/releases/latest). The `kgctl` binary is automatically compiled for Linux, macOS, and Windows for every release of Kilo and can be downloaded from [the GitHub releases page](https://github.com/squat/kilo/releases/latest).
### Building from Source ### Building from Source
Kilo is written in Golang and as a result the [Go toolchain must be installed](https://golang.org/doc/install) in order to build the `kgctl` binary. Kilo is written in Golang and as a result the [Go toolchain must be installed](https://golang.org/doc/install) in order to build the `kgctl` binary.
To download the Kilo source code and then build and install `kgctl` using the latest commit all with a single command, run: To download the Kilo source code and then build and install `kgctl` using the latest commit all with a single command, run:
```shell ```shell
go install github.com/kilo-io/kilo/cmd/kgctl@latest go install github.com/squat/kilo/cmd/kgctl@latest
``` ```
Alternatively, `kgctl` can be built and installed based on specific version of the code by specifying a Git tag or hash, e.g.: Alternatively, `kgctl` can be built and installed based on specific version of the code by specifying a Git tag or hash, e.g.:
```shell ```shell
go install github.com/kilo-io/kilo/cmd/kgctl@0.2.0 go install github.com/squat/kilo/cmd/kgctl@0.2.0
``` ```
When working on Kilo locally, it can be helpful to build and test the `kgctl` binary as part of the development cycle. When working on Kilo locally, it can be helpful to build and test the `kgctl` binary as part of the development cycle.

View File

@@ -10,7 +10,7 @@ Support for [Kubernetes network policies](https://kubernetes.io/docs/concepts/se
The following command adds network policy support by deploying kube-router to work alongside Kilo: The following command adds network policy support by deploying kube-router to work alongside Kilo:
```shell ```shell
kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kube-router.yaml kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kube-router.yaml
``` ```
## Examples ## Examples

View File

@@ -18,8 +18,8 @@ This DaemonSet creates a WireGuard interface that Kilo will manage.
An example configuration for a K3s cluster with [BoringTun] can be applied with: An example configuration for a K3s cluster with [BoringTun] can be applied with:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-k3s-userspace.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-k3s-userspace.yaml
``` ```
> **Note**: even if some nodes have the WireGuard kernel module, this configuration will cause all nodes to use the userspace implementation of WireGuard. > **Note**: even if some nodes have the WireGuard kernel module, this configuration will cause all nodes to use the userspace implementation of WireGuard.
@@ -30,8 +30,8 @@ In a heterogeneous cluster where some nodes are missing the WireGuard kernel mod
An example of such a configuration for a K3s cluster can by applied with: An example of such a configuration for a K3s cluster can by applied with:
```shell ```shell
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/crds.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/crds.yaml
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-k3s-userspace-heterogeneous.yaml kubectl apply -f https://raw.githubusercontent.com/squat/kilo/main/manifests/kilo-k3s-userspace-heterogeneous.yaml
``` ```
This configuration will deploy [nkml](https://github.com/leonnicolas/nkml) as a DaemonSet to label all nodes according to the presence of the WireGuard kernel module. This configuration will deploy [nkml](https://github.com/leonnicolas/nkml) as a DaemonSet to label all nodes according to the presence of the WireGuard kernel module.

View File

@@ -1,26 +0,0 @@
#!/usr/bin/env bash
# shellcheck disable=SC1091
. lib.sh
setup_suite() {
# shellcheck disable=SC2016
block_until_ready_by_name kube-system kilo-userspace
_kubectl wait pod -l app.kubernetes.io/name=adjacency --for=condition=Ready --timeout 3m
}
test_graph_handler() {
assert "curl_pod 'http://10.4.0.1:1107/graph?format=svg&layout=circo' | grep -q '<svg'" "graph handler should produce SVG output"
assert "curl_pod http://10.4.0.1:1107/graph?layout=circo | grep -q '<svg'" "graph handler should default to SVG output"
assert "curl_pod http://10.4.0.1:1107/graph | grep -q '<svg'" "graph handler should default to SVG output"
assert_fail "curl_pod http://10.4.0.1:1107/graph?layout=fake | grep -q '<svg'" "graph handler should reject invalid layout"
assert_fail "curl_pod http://10.4.0.1:1107/graph?format=fake | grep -q '<svg'" "graph handler should reject invalid format"
}
test_health_handler() {
assert "curl_pod http://10.4.0.1:1107/health" "health handler should return a status code of 200"
}
test_metrics_handler() {
assert "curl_pod http://10.4.0.1:1107/metrics" "metrics handler should return a status code of 200"
assert "(( $(curl_pod http://10.4.0.1:1107/metrics | grep -E ^kilo_nodes | cut -d " " -f 2) > 0 ))" "metrics handler should provide metric: kilo_nodes > 0"
}

View File

@@ -57,6 +57,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io
@@ -101,7 +102,7 @@ spec:
hostNetwork: true hostNetwork: true
containers: containers:
- name: kilo - name: kilo
image: kiloio/kilo:test image: squat/kilo:test
imagePullPolicy: Never imagePullPolicy: Never
args: args:
- --hostname=$(NODE_NAME) - --hostname=$(NODE_NAME)
@@ -149,7 +150,7 @@ spec:
readOnly: false readOnly: false
initContainers: initContainers:
- name: install-cni - name: install-cni
image: kiloio/kilo:test image: squat/kilo:test
imagePullPolicy: Never imagePullPolicy: Never
command: command:
- /bin/sh - /bin/sh

View File

@@ -4,7 +4,7 @@ KIND_CLUSTER="kind-cluster-kilo"
KIND_BINARY="${KIND_BINARY:-kind}" KIND_BINARY="${KIND_BINARY:-kind}"
KUBECTL_BINARY="${KUBECTL_BINARY:-kubectl}" KUBECTL_BINARY="${KUBECTL_BINARY:-kubectl}"
KGCTL_BINARY="${KGCTL_BINARY:-kgctl}" KGCTL_BINARY="${KGCTL_BINARY:-kgctl}"
KILO_IMAGE="${KILO_IMAGE:-kiloio/kilo}" KILO_IMAGE="${KILO_IMAGE:-squat/kilo}"
retry() { retry() {
local COUNT="${1:-10}" local COUNT="${1:-10}"
@@ -118,9 +118,9 @@ create_cluster() {
# Create the kind cluster. # Create the kind cluster.
_kind create cluster --name $KIND_CLUSTER --config <(echo "$CONFIG") _kind create cluster --name $KIND_CLUSTER --config <(echo "$CONFIG")
# Load the Kilo image into kind. # Load the Kilo image into kind.
docker tag "$KILO_IMAGE" kiloio/kilo:test docker tag "$KILO_IMAGE" squat/kilo:test
# This command does not accept the --kubeconfig flag, so call the command directly. # This command does not accept the --kubeconfig flag, so call the command directly.
$KIND_BINARY load docker-image kiloio/kilo:test --name $KIND_CLUSTER $KIND_BINARY load docker-image squat/kilo:test --name $KIND_CLUSTER
# Create the kubeconfig secret. # Create the kubeconfig secret.
_kubectl create secret generic kubeconfig --from-file=kubeconfig="$KUBECONFIG" -n kube-system _kubectl create secret generic kubeconfig --from-file=kubeconfig="$KUBECONFIG" -n kube-system
# Apply Kilo the the cluster. # Apply Kilo the the cluster.
@@ -134,7 +134,7 @@ create_cluster() {
_kubectl apply -f helper-curl.yaml _kubectl apply -f helper-curl.yaml
block_until_ready_by_name default curl block_until_ready_by_name default curl
_kubectl taint node $KIND_CLUSTER-control-plane node-role.kubernetes.io/master:NoSchedule- _kubectl taint node $KIND_CLUSTER-control-plane node-role.kubernetes.io/master:NoSchedule-
_kubectl apply -f https://raw.githubusercontent.com/kilo-io/adjacency/main/example.yaml _kubectl apply -f https://raw.githubusercontent.com/heptoprint/adjacency/master/example.yaml
block_until_ready_by_name adjacency adjacency block_until_ready_by_name adjacency adjacency
} }

2
go.mod
View File

@@ -1,4 +1,4 @@
module github.com/kilo-io/kilo module github.com/squat/kilo
go 1.15 go 1.15

View File

@@ -12,7 +12,7 @@ spec:
listKind: PeerList listKind: PeerList
plural: peers plural: peers
singular: peer singular: peer
scope: Namespaced scope: Cluster
versions: versions:
- name: v1alpha1 - name: v1alpha1
schema: schema:

View File

@@ -23,6 +23,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io

View File

@@ -57,6 +57,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io

View File

@@ -23,6 +23,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io
@@ -44,35 +45,6 @@ subjects:
name: kilo name: kilo
namespace: kube-system namespace: kube-system
--- ---
apiVersion: v1
kind: ConfigMap
metadata:
name: kilo-scripts
namespace: kube-system
data:
init.sh: |
#!/bin/sh
cat > /etc/kubernetes/kubeconfig <<EOF
apiVersion: v1
kind: Config
name: kilo
clusters:
- cluster:
server: $(sed -n 's/.*server: \(.*\)/\1/p' /var/lib/rancher/k3s/agent/kubelet.kubeconfig)
certificate-authority: /var/lib/rancher/k3s/agent/server-ca.crt
users:
- name: kilo
user:
token: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
contexts:
- name: kilo
context:
cluster: kilo
namespace: ${NAMESPACE}
user: kilo
current-context: kilo
EOF
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
@@ -117,7 +89,7 @@ spec:
- name: kilo-dir - name: kilo-dir
mountPath: /var/lib/kilo mountPath: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
mountPath: /etc/kubernetes mountPath: /etc/kubernetes/kubeconfig
readOnly: true readOnly: true
- name: lib-modules - name: lib-modules
mountPath: /lib/modules mountPath: /lib/modules
@@ -125,28 +97,6 @@ spec:
- name: xtables-lock - name: xtables-lock
mountPath: /run/xtables.lock mountPath: /run/xtables.lock
readOnly: false readOnly: false
initContainers:
- name: generate-kubeconfig
image: squat/kilo
command:
- /bin/sh
args:
- /scripts/init.sh
imagePullPolicy: Always
volumeMounts:
- name: kubeconfig
mountPath: /etc/kubernetes
- name: scripts
mountPath: /scripts/
readOnly: true
- name: k3s-agent
mountPath: /var/lib/rancher/k3s/agent/
readOnly: true
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
tolerations: tolerations:
- effect: NoSchedule - effect: NoSchedule
operator: Exists operator: Exists
@@ -157,13 +107,11 @@ spec:
hostPath: hostPath:
path: /var/lib/kilo path: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
emptyDir: {}
- name: scripts
configMap:
name: kilo-scripts
- name: k3s-agent
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent # Since kilo runs as a daemonset, it is recommended that you copy the
# k3s.yaml kubeconfig file from the master node to all worker nodes
# with the same path structure.
path: /etc/rancher/k3s/k3s.yaml
- name: lib-modules - name: lib-modules
hostPath: hostPath:
path: /lib/modules path: /lib/modules

View File

@@ -58,6 +58,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io
@@ -79,35 +80,6 @@ subjects:
name: kilo name: kilo
namespace: kube-system namespace: kube-system
--- ---
apiVersion: v1
kind: ConfigMap
metadata:
name: kilo-scripts
namespace: kube-system
data:
init.sh: |
#!/bin/sh
cat > /etc/kubernetes/kubeconfig <<EOF
apiVersion: v1
kind: Config
name: kilo
clusters:
- cluster:
server: $(sed -n 's/.*server: \(.*\)/\1/p' /var/lib/rancher/k3s/agent/kubelet.kubeconfig)
certificate-authority: /var/lib/rancher/k3s/agent/server-ca.crt
users:
- name: kilo
user:
token: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
contexts:
- name: kilo
context:
cluster: kilo
namespace: ${NAMESPACE}
user: kilo
current-context: kilo
EOF
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
@@ -154,7 +126,7 @@ spec:
- name: kilo-dir - name: kilo-dir
mountPath: /var/lib/kilo mountPath: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
mountPath: /etc/kubernetes mountPath: /etc/kubernetes/kubeconfig
readOnly: true readOnly: true
- name: lib-modules - name: lib-modules
mountPath: /lib/modules mountPath: /lib/modules
@@ -163,27 +135,6 @@ spec:
mountPath: /run/xtables.lock mountPath: /run/xtables.lock
readOnly: false readOnly: false
initContainers: initContainers:
- name: generate-kubeconfig
image: squat/kilo
command:
- /bin/sh
args:
- /scripts/init.sh
imagePullPolicy: Always
volumeMounts:
- name: kubeconfig
mountPath: /etc/kubernetes
- name: scripts
mountPath: /scripts/
readOnly: true
- name: k3s-agent
mountPath: /var/lib/rancher/k3s/agent/
readOnly: true
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: install-cni - name: install-cni
image: squat/kilo image: squat/kilo
command: command:
@@ -224,13 +175,11 @@ spec:
hostPath: hostPath:
path: /var/lib/kilo path: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
emptyDir: {}
- name: scripts
configMap:
name: kilo-scripts
- name: k3s-agent
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent # Since kilo runs as a daemonset, it is recommended that you copy the
# k3s.yaml kubeconfig file from the master node to all worker nodes
# with the same path structure.
path: /etc/rancher/k3s/k3s.yaml
- name: lib-modules - name: lib-modules
hostPath: hostPath:
path: /lib/modules path: /lib/modules
@@ -286,7 +235,7 @@ spec:
- name: kilo-dir - name: kilo-dir
mountPath: /var/lib/kilo mountPath: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
mountPath: /etc/kubernetes mountPath: /etc/kubernetes/kubeconfig
readOnly: true readOnly: true
- name: lib-modules - name: lib-modules
mountPath: /lib/modules mountPath: /lib/modules
@@ -310,27 +259,6 @@ spec:
mountPath: /var/run/wireguard mountPath: /var/run/wireguard
readOnly: false readOnly: false
initContainers: initContainers:
- name: generate-kubeconfig
image: squat/kilo
command:
- /bin/sh
args:
- /scripts/init.sh
imagePullPolicy: Always
volumeMounts:
- name: kubeconfig
mountPath: /etc/kubernetes
- name: scripts
mountPath: /scripts/
readOnly: true
- name: k3s-agent
mountPath: /var/lib/rancher/k3s/agent/
readOnly: true
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: install-cni - name: install-cni
image: squat/kilo image: squat/kilo
command: command:
@@ -371,13 +299,11 @@ spec:
hostPath: hostPath:
path: /var/lib/kilo path: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
emptyDir: {}
- name: scripts
configMap:
name: kilo-scripts
- name: k3s-agent
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent # Since kilo runs as a daemonset, it is recommended that you copy the
# k3s.yaml kubeconfig file from the master node to all worker nodes
# with the same path structure.
path: /etc/rancher/k3s/k3s.yaml
- name: lib-modules - name: lib-modules
hostPath: hostPath:
path: /lib/modules path: /lib/modules
@@ -406,7 +332,6 @@ spec:
app.kubernetes.io/name: nkml app.kubernetes.io/name: nkml
spec: spec:
hostNetwork: true hostNetwork: true
serviceAccountName: kilo
containers: containers:
- name: nkml - name: nkml
image: leonnicolas/nkml image: leonnicolas/nkml
@@ -424,36 +349,13 @@ spec:
containerPort: 8080 containerPort: 8080
volumeMounts: volumeMounts:
- name: kubeconfig - name: kubeconfig
mountPath: /etc/kubernetes mountPath: /etc/kubernetes/kubeconfig
readOnly: true readOnly: true
initContainers:
- name: generate-kubeconfig
image: squat/kilo
command:
- /bin/sh
args:
- /scripts/init.sh
imagePullPolicy: Always
volumeMounts:
- name: kubeconfig
mountPath: /etc/kubernetes
- name: scripts
mountPath: /scripts/
readOnly: true
- name: k3s-agent
mountPath: /var/lib/rancher/k3s/agent/
readOnly: true
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
volumes: volumes:
- name: kubeconfig - name: kubeconfig
emptyDir: {}
- name: scripts
configMap:
name: kilo-scripts
- name: k3s-agent
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent # since the above DaemonSets are dependant on the labels
# and nkml would need a cni to start
# it needs run on the hostnetwork and use the kubeconfig
# to label the nodes
path: /etc/rancher/k3s/k3s.yaml

View File

@@ -57,6 +57,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io
@@ -78,36 +79,6 @@ subjects:
name: kilo name: kilo
namespace: kube-system namespace: kube-system
--- ---
---
apiVersion: v1
kind: ConfigMap
metadata:
name: kilo-scripts
namespace: kube-system
data:
init.sh: |
#!/bin/sh
cat > /etc/kubernetes/kubeconfig <<EOF
apiVersion: v1
kind: Config
name: kilo
clusters:
- cluster:
server: $(sed -n 's/.*server: \(.*\)/\1/p' /var/lib/rancher/k3s/agent/kubelet.kubeconfig)
certificate-authority: /var/lib/rancher/k3s/agent/server-ca.crt
users:
- name: kilo
user:
token: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
contexts:
- name: kilo
context:
cluster: kilo
namespace: ${NAMESPACE}
user: kilo
current-context: kilo
EOF
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
@@ -153,7 +124,7 @@ spec:
- name: kilo-dir - name: kilo-dir
mountPath: /var/lib/kilo mountPath: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
mountPath: /etc/kubernetes mountPath: /etc/kubernetes/kubeconfig
readOnly: true readOnly: true
- name: lib-modules - name: lib-modules
mountPath: /lib/modules mountPath: /lib/modules
@@ -177,27 +148,6 @@ spec:
mountPath: /var/run/wireguard mountPath: /var/run/wireguard
readOnly: false readOnly: false
initContainers: initContainers:
- name: generate-kubeconfig
image: squat/kilo
command:
- /bin/sh
args:
- /scripts/init.sh
imagePullPolicy: Always
volumeMounts:
- name: kubeconfig
mountPath: /etc/kubernetes
- name: scripts
mountPath: /scripts/
readOnly: true
- name: k3s-agent
mountPath: /var/lib/rancher/k3s/agent/
readOnly: true
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: install-cni - name: install-cni
image: squat/kilo image: squat/kilo
command: command:
@@ -238,13 +188,11 @@ spec:
hostPath: hostPath:
path: /var/lib/kilo path: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
emptyDir: {}
- name: scripts
configMap:
name: kilo-scripts
- name: k3s-agent
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent # Since kilo runs as a daemonset, it is recommended that you copy the
# k3s.yaml kubeconfig file from the master node to all worker nodes
# with the same path structure.
path: /etc/rancher/k3s/k3s.yaml
- name: lib-modules - name: lib-modules
hostPath: hostPath:
path: /lib/modules path: /lib/modules

View File

@@ -57,6 +57,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io
@@ -78,35 +79,6 @@ subjects:
name: kilo name: kilo
namespace: kube-system namespace: kube-system
--- ---
apiVersion: v1
kind: ConfigMap
metadata:
name: kilo-scripts
namespace: kube-system
data:
init.sh: |
#!/bin/sh
cat > /etc/kubernetes/kubeconfig <<EOF
apiVersion: v1
kind: Config
name: kilo
clusters:
- cluster:
server: $(sed -n 's/.*server: \(.*\)/\1/p' /var/lib/rancher/k3s/agent/kubelet.kubeconfig)
certificate-authority: /var/lib/rancher/k3s/agent/server-ca.crt
users:
- name: kilo
user:
token: $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)
contexts:
- name: kilo
context:
cluster: kilo
namespace: ${NAMESPACE}
user: kilo
current-context: kilo
EOF
---
apiVersion: apps/v1 apiVersion: apps/v1
kind: DaemonSet kind: DaemonSet
metadata: metadata:
@@ -150,7 +122,7 @@ spec:
- name: kilo-dir - name: kilo-dir
mountPath: /var/lib/kilo mountPath: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
mountPath: /etc/kubernetes mountPath: /etc/kubernetes/kubeconfig
readOnly: true readOnly: true
- name: lib-modules - name: lib-modules
mountPath: /lib/modules mountPath: /lib/modules
@@ -159,27 +131,6 @@ spec:
mountPath: /run/xtables.lock mountPath: /run/xtables.lock
readOnly: false readOnly: false
initContainers: initContainers:
- name: generate-kubeconfig
image: squat/kilo
command:
- /bin/sh
args:
- /scripts/init.sh
imagePullPolicy: Always
volumeMounts:
- name: kubeconfig
mountPath: /etc/kubernetes
- name: scripts
mountPath: /scripts/
readOnly: true
- name: k3s-agent
mountPath: /var/lib/rancher/k3s/agent/
readOnly: true
env:
- name: NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: install-cni - name: install-cni
image: squat/kilo image: squat/kilo
command: command:
@@ -220,13 +171,11 @@ spec:
hostPath: hostPath:
path: /var/lib/kilo path: /var/lib/kilo
- name: kubeconfig - name: kubeconfig
emptyDir: {}
- name: scripts
configMap:
name: kilo-scripts
- name: k3s-agent
hostPath: hostPath:
path: /var/lib/rancher/k3s/agent # Since kilo runs as a daemonset, it is recommended that you copy the
# k3s.yaml kubeconfig file from the master node to all worker nodes
# with the same path structure.
path: /etc/rancher/k3s/k3s.yaml
- name: lib-modules - name: lib-modules
hostPath: hostPath:
path: /lib/modules path: /lib/modules

View File

@@ -23,6 +23,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io

View File

@@ -57,6 +57,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io

View File

@@ -23,6 +23,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io

View File

@@ -57,6 +57,7 @@ rules:
- peers - peers
verbs: verbs:
- list - list
- update
- watch - watch
- apiGroups: - apiGroups:
- apiextensions.k8s.io - apiextensions.k8s.io

View File

@@ -17,7 +17,7 @@ package encapsulation
import ( import (
"net" "net"
"github.com/kilo-io/kilo/pkg/iptables" "github.com/squat/kilo/pkg/iptables"
) )
// Strategy identifies which packets within a location should // Strategy identifies which packets within a location should

View File

@@ -19,9 +19,8 @@ import (
"net" "net"
"sync" "sync"
"github.com/squat/kilo/pkg/iptables"
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
"github.com/kilo-io/kilo/pkg/iptables"
) )
const flannelDeviceName = "flannel.1" const flannelDeviceName = "flannel.1"

View File

@@ -18,8 +18,8 @@ import (
"fmt" "fmt"
"net" "net"
"github.com/kilo-io/kilo/pkg/iproute" "github.com/squat/kilo/pkg/iproute"
"github.com/kilo-io/kilo/pkg/iptables" "github.com/squat/kilo/pkg/iptables"
) )
type ipip struct { type ipip struct {

View File

@@ -17,7 +17,7 @@ package encapsulation
import ( import (
"net" "net"
"github.com/kilo-io/kilo/pkg/iptables" "github.com/squat/kilo/pkg/iptables"
) )
// Noop is an encapsulation that does nothing. // Noop is an encapsulation that does nothing.

View File

@@ -48,6 +48,7 @@ var PeerShortNames = []string{"peer"}
// +genclient:nonNamespaced // +genclient:nonNamespaced
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
// +k8s:openapi-gen=true // +k8s:openapi-gen=true
// +kubebuilder:resource:scope=Cluster
// Peer is a WireGuard peer that should have access to the VPN. // Peer is a WireGuard peer that should have access to the VPN.
type Peer struct { type Peer struct {

View File

@@ -37,12 +37,12 @@ import (
v1listers "k8s.io/client-go/listers/core/v1" v1listers "k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"
"github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
kiloclient "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" kiloclient "github.com/squat/kilo/pkg/k8s/clientset/versioned"
v1alpha1informers "github.com/kilo-io/kilo/pkg/k8s/informers/kilo/v1alpha1" v1alpha1informers "github.com/squat/kilo/pkg/k8s/informers/kilo/v1alpha1"
v1alpha1listers "github.com/kilo-io/kilo/pkg/k8s/listers/kilo/v1alpha1" v1alpha1listers "github.com/squat/kilo/pkg/k8s/listers/kilo/v1alpha1"
"github.com/kilo-io/kilo/pkg/mesh" "github.com/squat/kilo/pkg/mesh"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
const ( const (

View File

@@ -21,9 +21,9 @@ import (
"github.com/kylelemons/godebug/pretty" "github.com/kylelemons/godebug/pretty"
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
"github.com/kilo-io/kilo/pkg/mesh" "github.com/squat/kilo/pkg/mesh"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
func TestTranslateNode(t *testing.T) { func TestTranslateNode(t *testing.T) {

View File

@@ -19,7 +19,7 @@ package versioned
import ( import (
"fmt" "fmt"
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1" kilov1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
discovery "k8s.io/client-go/discovery" discovery "k8s.io/client-go/discovery"
rest "k8s.io/client-go/rest" rest "k8s.io/client-go/rest"
flowcontrol "k8s.io/client-go/util/flowcontrol" flowcontrol "k8s.io/client-go/util/flowcontrol"

View File

@@ -17,9 +17,9 @@
package fake package fake
import ( import (
clientset "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" clientset "github.com/squat/kilo/pkg/k8s/clientset/versioned"
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1" kilov1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
fakekilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1/fake" fakekilov1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1/fake"
"k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/watch" "k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/discovery" "k8s.io/client-go/discovery"

View File

@@ -17,7 +17,7 @@
package fake package fake
import ( import (
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" kilov1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema" schema "k8s.io/apimachinery/pkg/runtime/schema"

View File

@@ -17,7 +17,7 @@
package scheme package scheme
import ( import (
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" kilov1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema" schema "k8s.io/apimachinery/pkg/runtime/schema"

View File

@@ -17,7 +17,7 @@
package fake package fake
import ( import (
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
rest "k8s.io/client-go/rest" rest "k8s.io/client-go/rest"
testing "k8s.io/client-go/testing" testing "k8s.io/client-go/testing"
) )

View File

@@ -19,7 +19,7 @@ package fake
import ( import (
"context" "context"
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
labels "k8s.io/apimachinery/pkg/labels" labels "k8s.io/apimachinery/pkg/labels"
schema "k8s.io/apimachinery/pkg/runtime/schema" schema "k8s.io/apimachinery/pkg/runtime/schema"

View File

@@ -17,8 +17,8 @@
package v1alpha1 package v1alpha1
import ( import (
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
"github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/scheme" "github.com/squat/kilo/pkg/k8s/clientset/versioned/scheme"
rest "k8s.io/client-go/rest" rest "k8s.io/client-go/rest"
) )

View File

@@ -20,8 +20,8 @@ import (
"context" "context"
"time" "time"
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
scheme "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/scheme" scheme "github.com/squat/kilo/pkg/k8s/clientset/versioned/scheme"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
types "k8s.io/apimachinery/pkg/types" types "k8s.io/apimachinery/pkg/types"
watch "k8s.io/apimachinery/pkg/watch" watch "k8s.io/apimachinery/pkg/watch"

View File

@@ -21,9 +21,9 @@ import (
sync "sync" sync "sync"
time "time" time "time"
versioned "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces" internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
kilo "github.com/kilo-io/kilo/pkg/k8s/informers/kilo" kilo "github.com/squat/kilo/pkg/k8s/informers/kilo"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
schema "k8s.io/apimachinery/pkg/runtime/schema" schema "k8s.io/apimachinery/pkg/runtime/schema"

View File

@@ -19,7 +19,7 @@ package informers
import ( import (
"fmt" "fmt"
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
schema "k8s.io/apimachinery/pkg/runtime/schema" schema "k8s.io/apimachinery/pkg/runtime/schema"
cache "k8s.io/client-go/tools/cache" cache "k8s.io/client-go/tools/cache"
) )

View File

@@ -19,7 +19,7 @@ package internalinterfaces
import ( import (
time "time" time "time"
versioned "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
cache "k8s.io/client-go/tools/cache" cache "k8s.io/client-go/tools/cache"

View File

@@ -17,8 +17,8 @@
package kilo package kilo
import ( import (
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces" internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/informers/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/informers/kilo/v1alpha1"
) )
// Interface provides access to each of this group's versions. // Interface provides access to each of this group's versions.

View File

@@ -17,7 +17,7 @@
package v1alpha1 package v1alpha1
import ( import (
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces" internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
) )
// Interface provides access to all the informers in this group version. // Interface provides access to all the informers in this group version.

View File

@@ -20,10 +20,10 @@ import (
"context" "context"
time "time" time "time"
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" kilov1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
versioned "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned" versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces" internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/listers/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/listers/kilo/v1alpha1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime" runtime "k8s.io/apimachinery/pkg/runtime"
watch "k8s.io/apimachinery/pkg/watch" watch "k8s.io/apimachinery/pkg/watch"

View File

@@ -17,7 +17,7 @@
package v1alpha1 package v1alpha1
import ( import (
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1" v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
"k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
"k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/cache"

View File

@@ -18,7 +18,7 @@ import (
"net" "net"
"time" "time"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
const ( const (

View File

@@ -20,8 +20,7 @@ import (
"strings" "strings"
"github.com/awalterschulze/gographviz" "github.com/awalterschulze/gographviz"
"github.com/squat/kilo/pkg/wireguard"
"github.com/kilo-io/kilo/pkg/wireguard"
) )
// Dot generates a Graphviz graph of the Topology in DOT fomat. // Dot generates a Graphviz graph of the Topology in DOT fomat.

View File

@@ -30,11 +30,11 @@ import (
"github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus"
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
"github.com/kilo-io/kilo/pkg/encapsulation" "github.com/squat/kilo/pkg/encapsulation"
"github.com/kilo-io/kilo/pkg/iproute" "github.com/squat/kilo/pkg/iproute"
"github.com/kilo-io/kilo/pkg/iptables" "github.com/squat/kilo/pkg/iptables"
"github.com/kilo-io/kilo/pkg/route" "github.com/squat/kilo/pkg/route"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
const ( const (
@@ -86,7 +86,7 @@ type Mesh struct {
} }
// New returns a new Mesh instance. // New returns a new Mesh instance.
func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularity, hostname string, port uint32, subnet *net.IPNet, local, cni bool, cniPath, iface string, cleanUpIface bool, createIface bool, mtu uint, resyncPeriod time.Duration, logger log.Logger) (*Mesh, error) { func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularity, hostname string, port uint32, subnet *net.IPNet, local, cni bool, cniPath, iface string, cleanUpIface bool, createIface bool, resyncPeriod time.Duration, logger log.Logger) (*Mesh, error) {
if err := os.MkdirAll(kiloPath, 0700); err != nil { if err := os.MkdirAll(kiloPath, 0700); err != nil {
return nil, fmt.Errorf("failed to create directory to store configuration: %v", err) return nil, fmt.Errorf("failed to create directory to store configuration: %v", err)
} }
@@ -111,7 +111,7 @@ func New(backend Backend, enc encapsulation.Encapsulator, granularity Granularit
} }
var kiloIface int var kiloIface int
if createIface { if createIface {
kiloIface, _, err = wireguard.New(iface, mtu) kiloIface, _, err = wireguard.New(iface)
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to create WireGuard interface: %v", err) return nil, fmt.Errorf("failed to create WireGuard interface: %v", err)
} }

View File

@@ -19,7 +19,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
func TestReady(t *testing.T) { func TestReady(t *testing.T) {

View File

@@ -22,8 +22,8 @@ import (
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"github.com/kilo-io/kilo/pkg/encapsulation" "github.com/squat/kilo/pkg/encapsulation"
"github.com/kilo-io/kilo/pkg/iptables" "github.com/squat/kilo/pkg/iptables"
) )
const kiloTableIndex = 1107 const kiloTableIndex = 1107

View File

@@ -21,7 +21,7 @@ import (
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"github.com/kilo-io/kilo/pkg/encapsulation" "github.com/squat/kilo/pkg/encapsulation"
) )
func TestRoutes(t *testing.T) { func TestRoutes(t *testing.T) {

View File

@@ -22,7 +22,7 @@ import (
"github.com/go-kit/kit/log" "github.com/go-kit/kit/log"
"github.com/go-kit/kit/log/level" "github.com/go-kit/kit/log/level"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
const ( const (

View File

@@ -22,7 +22,7 @@ import (
"github.com/go-kit/kit/log" "github.com/go-kit/kit/log"
"github.com/kylelemons/godebug/pretty" "github.com/kylelemons/godebug/pretty"
"github.com/kilo-io/kilo/pkg/wireguard" "github.com/squat/kilo/pkg/wireguard"
) )
func allowedIPs(ips ...string) string { func allowedIPs(ips ...string) string {

View File

@@ -24,9 +24,6 @@ import (
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
) )
// DefaultMTU is the the default MTU used by WireGuard.
const DefaultMTU = 1420
type wgLink struct { type wgLink struct {
a netlink.LinkAttrs a netlink.LinkAttrs
t string t string
@@ -44,7 +41,7 @@ func (w wgLink) Type() string {
// If the interface exists, its index is returned. // If the interface exists, its index is returned.
// Otherwise, a new interface is created. // Otherwise, a new interface is created.
// The function also returns a boolean to indicate if the interface was created. // The function also returns a boolean to indicate if the interface was created.
func New(name string, mtu uint) (int, bool, error) { func New(name string) (int, bool, error) {
link, err := netlink.LinkByName(name) link, err := netlink.LinkByName(name)
if err == nil { if err == nil {
return link.Attrs().Index, false, nil return link.Attrs().Index, false, nil
@@ -54,7 +51,6 @@ func New(name string, mtu uint) (int, bool, error) {
} }
wl := wgLink{a: netlink.NewLinkAttrs(), t: "wireguard"} wl := wgLink{a: netlink.NewLinkAttrs(), t: "wireguard"}
wl.a.Name = name wl.a.Name = name
wl.a.MTU = int(mtu)
if err := netlink.LinkAdd(wl); err != nil { if err := netlink.LinkAdd(wl); err != nil {
return 0, false, fmt.Errorf("failed to create interface %s: %v", name, err) return 0, false, fmt.Errorf("failed to create interface %s: %v", name, err)
} }

View File

@@ -9,8 +9,8 @@
"deploy": "docusaurus deploy" "deploy": "docusaurus deploy"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "^2.0.0-beta.3", "@docusaurus/core": "^2.0.0-beta.0",
"@docusaurus/preset-classic": "^2.0.0-beta.3", "@docusaurus/preset-classic": "^2.0.0-beta.0",
"classnames": "^2.3.1", "classnames": "^2.3.1",
"react": "^17.0.2", "react": "^17.0.2",
"react-dom": "^17.0.2" "react-dom": "^17.0.2"
@@ -26,5 +26,9 @@
"last 1 firefox version", "last 1 firefox version",
"last 1 safari version" "last 1 safari version"
] ]
},
"resolutions": {
"minimist": "^1.2.3",
"node-fetch": "^2.6.1"
} }
} }

File diff suppressed because it is too large Load Diff