Compare commits
12 Commits
release-0.
...
kiloio-git
Author | SHA1 | Date | |
---|---|---|---|
|
b749def837 | ||
|
1b5ad035d9 | ||
|
ee5300db4c | ||
|
6309529a3f | ||
|
2c74a560c4 | ||
|
daecc2a0bc | ||
|
7c8905f10d | ||
|
3a7e0908bd | ||
|
d1f7c32760 | ||
|
8306d92c79 | ||
|
abecadf707 | ||
|
e9d1ba88a8 |
@@ -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
|
apk add --no-cache ipset iptables ip6tables wireguard-tools graphviz font-noto
|
||||||
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"]
|
||||||
|
6
Makefile
6
Makefile
@@ -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/squat/$(PROJECT)
|
PKG := github.com/kilo-io/$(PROJECT)
|
||||||
REGISTRY ?= index.docker.io
|
REGISTRY ?= index.docker.io
|
||||||
IMAGE ?= squat/$(PROJECT)
|
IMAGE ?= kiloio/$(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/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/handlers.sh ./e2e/teardown.sh
|
||||||
|
|
||||||
header: .header
|
header: .header
|
||||||
@HEADER=$$(cat .header); \
|
@HEADER=$$(cat .header); \
|
||||||
|
26
README.md
26
README.md
@@ -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.
|
||||||
|
|
||||||
[](https://github.com/squat/kilo/actions?query=workflow%3ACI)
|
[](https://github.com/kilo-io/kilo/actions?query=workflow%3ACI)
|
||||||
[](https://goreportcard.com/report/github.com/squat/kilo)
|
[](https://goreportcard.com/report/github.com/kilo-io/kilo)
|
||||||
[](https://hub.docker.com/r/squat/kilo)
|
[](https://hub.docker.com/r/squat/kilo)
|
||||||
[](https://slack.k8s.io/)
|
[](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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-kubeadm.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-bootkube.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-typhoon.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-k3s.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-typhoon-flannel.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kilo-typhoon-flannel.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
[See the manifests directory for more examples](https://github.com/squat/kilo/tree/main/manifests).
|
[See the manifests directory for more examples](https://github.com/kilo-io/kilo/tree/main/manifests).
|
||||||
|
|
||||||
## VPN
|
## VPN
|
||||||
|
|
||||||
|
145
cmd/kg/handlers.go
Normal file
145
cmd/kg/handlers.go
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
// 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)
|
||||||
|
}
|
@@ -35,11 +35,12 @@ 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/squat/kilo/pkg/encapsulation"
|
"github.com/kilo-io/kilo/pkg/encapsulation"
|
||||||
"github.com/squat/kilo/pkg/k8s"
|
"github.com/kilo-io/kilo/pkg/k8s"
|
||||||
kiloclient "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
kiloclient "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned"
|
||||||
"github.com/squat/kilo/pkg/mesh"
|
"github.com/kilo-io/kilo/pkg/mesh"
|
||||||
"github.com/squat/kilo/pkg/version"
|
"github.com/kilo-io/kilo/pkg/version"
|
||||||
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -94,6 +95,7 @@ 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.")
|
||||||
@@ -180,7 +182,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, *resyncPeriod, log.With(logger, "component", "kilo"))
|
m, err := mesh.New(b, enc, gr, *hostname, uint32(port), s, *local, *cni, *cniPath, *iface, *cleanUpIface, *createIface, *mtu, *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)
|
||||||
}
|
}
|
||||||
@@ -196,9 +198,8 @@ func Main() error {
|
|||||||
{
|
{
|
||||||
// Run the HTTP server.
|
// Run the HTTP server.
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
mux.HandleFunc("/health", func(w http.ResponseWriter, _ *http.Request) {
|
mux.HandleFunc("/health", healthHandler)
|
||||||
w.WriteHeader(http.StatusOK)
|
mux.Handle("/graph", &graphHandler{m, gr, hostname, s})
|
||||||
})
|
|
||||||
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 {
|
||||||
|
@@ -18,7 +18,8 @@ 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 {
|
||||||
|
@@ -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/squat/kilo/pkg/k8s"
|
"github.com/kilo-io/kilo/pkg/k8s"
|
||||||
kiloclient "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
kiloclient "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned"
|
||||||
"github.com/squat/kilo/pkg/mesh"
|
"github.com/kilo-io/kilo/pkg/mesh"
|
||||||
"github.com/squat/kilo/pkg/version"
|
"github.com/kilo-io/kilo/pkg/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@@ -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/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
"github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
||||||
"github.com/squat/kilo/pkg/mesh"
|
"github.com/kilo-io/kilo/pkg/mesh"
|
||||||
"github.com/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@@ -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/squat/kilo.git
|
git clone https://github.com/kilo-io/kilo.git
|
||||||
cd kilo
|
cd kilo
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@@ -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/squat/kilo/tree/main/manifests).
|
Example manifests can be found [in the manifests directory](https://github.com/kilo-io/kilo/tree/main/manifests).
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
@@ -32,6 +32,7 @@ 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")
|
||||||
|
@@ -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/squat/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/kilo-io/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/squat/kilo/cmd/kgctl@latest
|
go install github.com/kilo-io/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/squat/kilo/cmd/kgctl@0.2.0
|
go install github.com/kilo-io/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.
|
||||||
|
@@ -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/squat/kilo/main/manifests/kube-router.yaml
|
kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/kilo-io/kilo/main/manifests/kube-router.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
@@ -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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-k3s-userspace.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/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/squat/kilo/main/manifests/crds.yaml
|
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/kilo-k3s-userspace-heterogeneous.yaml
|
kubectl apply -f https://raw.githubusercontent.com/kilo-io/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.
|
||||||
|
26
e2e/handlers.sh
Normal file
26
e2e/handlers.sh
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/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"
|
||||||
|
}
|
@@ -57,7 +57,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
@@ -102,7 +101,7 @@ spec:
|
|||||||
hostNetwork: true
|
hostNetwork: true
|
||||||
containers:
|
containers:
|
||||||
- name: kilo
|
- name: kilo
|
||||||
image: squat/kilo:test
|
image: kiloio/kilo:test
|
||||||
imagePullPolicy: Never
|
imagePullPolicy: Never
|
||||||
args:
|
args:
|
||||||
- --hostname=$(NODE_NAME)
|
- --hostname=$(NODE_NAME)
|
||||||
@@ -150,7 +149,7 @@ spec:
|
|||||||
readOnly: false
|
readOnly: false
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: install-cni
|
- name: install-cni
|
||||||
image: squat/kilo:test
|
image: kiloio/kilo:test
|
||||||
imagePullPolicy: Never
|
imagePullPolicy: Never
|
||||||
command:
|
command:
|
||||||
- /bin/sh
|
- /bin/sh
|
||||||
|
@@ -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:-squat/kilo}"
|
KILO_IMAGE="${KILO_IMAGE:-kiloio/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" squat/kilo:test
|
docker tag "$KILO_IMAGE" kiloio/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 squat/kilo:test --name $KIND_CLUSTER
|
$KIND_BINARY load docker-image kiloio/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/heptoprint/adjacency/master/example.yaml
|
_kubectl apply -f https://raw.githubusercontent.com/kilo-io/adjacency/main/example.yaml
|
||||||
block_until_ready_by_name adjacency adjacency
|
block_until_ready_by_name adjacency adjacency
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@@ -1,4 +1,4 @@
|
|||||||
module github.com/squat/kilo
|
module github.com/kilo-io/kilo
|
||||||
|
|
||||||
go 1.15
|
go 1.15
|
||||||
|
|
||||||
|
@@ -12,7 +12,7 @@ spec:
|
|||||||
listKind: PeerList
|
listKind: PeerList
|
||||||
plural: peers
|
plural: peers
|
||||||
singular: peer
|
singular: peer
|
||||||
scope: Cluster
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- name: v1alpha1
|
- name: v1alpha1
|
||||||
schema:
|
schema:
|
||||||
|
@@ -23,7 +23,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
|
@@ -57,7 +57,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
|
@@ -23,7 +23,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
@@ -45,6 +44,35 @@ 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:
|
||||||
@@ -89,7 +117,7 @@ spec:
|
|||||||
- name: kilo-dir
|
- name: kilo-dir
|
||||||
mountPath: /var/lib/kilo
|
mountPath: /var/lib/kilo
|
||||||
- name: kubeconfig
|
- name: kubeconfig
|
||||||
mountPath: /etc/kubernetes/kubeconfig
|
mountPath: /etc/kubernetes
|
||||||
readOnly: true
|
readOnly: true
|
||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
mountPath: /lib/modules
|
mountPath: /lib/modules
|
||||||
@@ -97,6 +125,28 @@ 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
|
||||||
@@ -107,11 +157,13 @@ 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:
|
||||||
# Since kilo runs as a daemonset, it is recommended that you copy the
|
path: /var/lib/rancher/k3s/agent
|
||||||
# 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
|
||||||
|
@@ -58,7 +58,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
@@ -80,6 +79,35 @@ 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:
|
||||||
@@ -126,7 +154,7 @@ spec:
|
|||||||
- name: kilo-dir
|
- name: kilo-dir
|
||||||
mountPath: /var/lib/kilo
|
mountPath: /var/lib/kilo
|
||||||
- name: kubeconfig
|
- name: kubeconfig
|
||||||
mountPath: /etc/kubernetes/kubeconfig
|
mountPath: /etc/kubernetes
|
||||||
readOnly: true
|
readOnly: true
|
||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
mountPath: /lib/modules
|
mountPath: /lib/modules
|
||||||
@@ -135,6 +163,27 @@ 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:
|
||||||
@@ -175,11 +224,13 @@ 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:
|
||||||
# Since kilo runs as a daemonset, it is recommended that you copy the
|
path: /var/lib/rancher/k3s/agent
|
||||||
# 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
|
||||||
@@ -235,7 +286,7 @@ spec:
|
|||||||
- name: kilo-dir
|
- name: kilo-dir
|
||||||
mountPath: /var/lib/kilo
|
mountPath: /var/lib/kilo
|
||||||
- name: kubeconfig
|
- name: kubeconfig
|
||||||
mountPath: /etc/kubernetes/kubeconfig
|
mountPath: /etc/kubernetes
|
||||||
readOnly: true
|
readOnly: true
|
||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
mountPath: /lib/modules
|
mountPath: /lib/modules
|
||||||
@@ -259,6 +310,27 @@ 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:
|
||||||
@@ -299,11 +371,13 @@ 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:
|
||||||
# Since kilo runs as a daemonset, it is recommended that you copy the
|
path: /var/lib/rancher/k3s/agent
|
||||||
# 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
|
||||||
@@ -332,6 +406,7 @@ 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
|
||||||
@@ -349,13 +424,36 @@ spec:
|
|||||||
containerPort: 8080
|
containerPort: 8080
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: kubeconfig
|
- name: kubeconfig
|
||||||
mountPath: /etc/kubernetes/kubeconfig
|
mountPath: /etc/kubernetes
|
||||||
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:
|
||||||
# since the above DaemonSets are dependant on the labels
|
path: /var/lib/rancher/k3s/agent
|
||||||
# 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
|
|
||||||
|
@@ -57,7 +57,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
@@ -79,6 +78,36 @@ 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:
|
||||||
@@ -124,7 +153,7 @@ spec:
|
|||||||
- name: kilo-dir
|
- name: kilo-dir
|
||||||
mountPath: /var/lib/kilo
|
mountPath: /var/lib/kilo
|
||||||
- name: kubeconfig
|
- name: kubeconfig
|
||||||
mountPath: /etc/kubernetes/kubeconfig
|
mountPath: /etc/kubernetes
|
||||||
readOnly: true
|
readOnly: true
|
||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
mountPath: /lib/modules
|
mountPath: /lib/modules
|
||||||
@@ -148,6 +177,27 @@ 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:
|
||||||
@@ -188,11 +238,13 @@ 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:
|
||||||
# Since kilo runs as a daemonset, it is recommended that you copy the
|
path: /var/lib/rancher/k3s/agent
|
||||||
# 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
|
||||||
|
@@ -57,7 +57,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
@@ -79,6 +78,35 @@ 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:
|
||||||
@@ -122,7 +150,7 @@ spec:
|
|||||||
- name: kilo-dir
|
- name: kilo-dir
|
||||||
mountPath: /var/lib/kilo
|
mountPath: /var/lib/kilo
|
||||||
- name: kubeconfig
|
- name: kubeconfig
|
||||||
mountPath: /etc/kubernetes/kubeconfig
|
mountPath: /etc/kubernetes
|
||||||
readOnly: true
|
readOnly: true
|
||||||
- name: lib-modules
|
- name: lib-modules
|
||||||
mountPath: /lib/modules
|
mountPath: /lib/modules
|
||||||
@@ -131,6 +159,27 @@ 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:
|
||||||
@@ -171,11 +220,13 @@ 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:
|
||||||
# Since kilo runs as a daemonset, it is recommended that you copy the
|
path: /var/lib/rancher/k3s/agent
|
||||||
# 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
|
||||||
|
@@ -23,7 +23,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
|
@@ -57,7 +57,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
|
@@ -23,7 +23,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
|
@@ -57,7 +57,6 @@ rules:
|
|||||||
- peers
|
- peers
|
||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- update
|
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- apiextensions.k8s.io
|
- apiextensions.k8s.io
|
||||||
|
@@ -17,7 +17,7 @@ package encapsulation
|
|||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/squat/kilo/pkg/iptables"
|
"github.com/kilo-io/kilo/pkg/iptables"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Strategy identifies which packets within a location should
|
// Strategy identifies which packets within a location should
|
||||||
|
@@ -19,8 +19,9 @@ 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"
|
||||||
|
@@ -18,8 +18,8 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/squat/kilo/pkg/iproute"
|
"github.com/kilo-io/kilo/pkg/iproute"
|
||||||
"github.com/squat/kilo/pkg/iptables"
|
"github.com/kilo-io/kilo/pkg/iptables"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ipip struct {
|
type ipip struct {
|
||||||
|
@@ -17,7 +17,7 @@ package encapsulation
|
|||||||
import (
|
import (
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/squat/kilo/pkg/iptables"
|
"github.com/kilo-io/kilo/pkg/iptables"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Noop is an encapsulation that does nothing.
|
// Noop is an encapsulation that does nothing.
|
||||||
|
@@ -48,7 +48,6 @@ 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 {
|
||||||
|
@@ -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/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
"github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
||||||
kiloclient "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
kiloclient "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned"
|
||||||
v1alpha1informers "github.com/squat/kilo/pkg/k8s/informers/kilo/v1alpha1"
|
v1alpha1informers "github.com/kilo-io/kilo/pkg/k8s/informers/kilo/v1alpha1"
|
||||||
v1alpha1listers "github.com/squat/kilo/pkg/k8s/listers/kilo/v1alpha1"
|
v1alpha1listers "github.com/kilo-io/kilo/pkg/k8s/listers/kilo/v1alpha1"
|
||||||
"github.com/squat/kilo/pkg/mesh"
|
"github.com/kilo-io/kilo/pkg/mesh"
|
||||||
"github.com/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@@ -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/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
"github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
||||||
"github.com/squat/kilo/pkg/mesh"
|
"github.com/kilo-io/kilo/pkg/mesh"
|
||||||
"github.com/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestTranslateNode(t *testing.T) {
|
func TestTranslateNode(t *testing.T) {
|
||||||
|
@@ -19,7 +19,7 @@ package versioned
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
kilov1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
|
kilov1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -17,9 +17,9 @@
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
clientset "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
clientset "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned"
|
||||||
kilov1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
|
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
|
||||||
fakekilov1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1/fake"
|
fakekilov1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
kilov1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
kilov1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
package scheme
|
package scheme
|
||||||
|
|
||||||
import (
|
import (
|
||||||
kilov1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
kilov1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
package fake
|
package fake
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/clientset/versioned/typed/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/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"
|
||||||
)
|
)
|
||||||
|
@@ -19,7 +19,7 @@ package fake
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
||||||
"github.com/squat/kilo/pkg/k8s/clientset/versioned/scheme"
|
"github.com/kilo-io/kilo/pkg/k8s/clientset/versioned/scheme"
|
||||||
rest "k8s.io/client-go/rest"
|
rest "k8s.io/client-go/rest"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@@ -20,8 +20,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
||||||
scheme "github.com/squat/kilo/pkg/k8s/clientset/versioned/scheme"
|
scheme "github.com/kilo-io/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"
|
||||||
|
@@ -21,9 +21,9 @@ import (
|
|||||||
sync "sync"
|
sync "sync"
|
||||||
time "time"
|
time "time"
|
||||||
|
|
||||||
versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
versioned "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned"
|
||||||
internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
|
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces"
|
||||||
kilo "github.com/squat/kilo/pkg/k8s/informers/kilo"
|
kilo "github.com/kilo-io/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"
|
||||||
|
@@ -19,7 +19,7 @@ package informers
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/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"
|
||||||
)
|
)
|
||||||
|
@@ -19,7 +19,7 @@ package internalinterfaces
|
|||||||
import (
|
import (
|
||||||
time "time"
|
time "time"
|
||||||
|
|
||||||
versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
versioned "github.com/kilo-io/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"
|
||||||
|
@@ -17,8 +17,8 @@
|
|||||||
package kilo
|
package kilo
|
||||||
|
|
||||||
import (
|
import (
|
||||||
internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
|
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces"
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/informers/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/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.
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
|
internalinterfaces "github.com/kilo-io/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.
|
||||||
|
@@ -20,10 +20,10 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
time "time"
|
time "time"
|
||||||
|
|
||||||
kilov1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
kilov1alpha1 "github.com/kilo-io/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
||||||
versioned "github.com/squat/kilo/pkg/k8s/clientset/versioned"
|
versioned "github.com/kilo-io/kilo/pkg/k8s/clientset/versioned"
|
||||||
internalinterfaces "github.com/squat/kilo/pkg/k8s/informers/internalinterfaces"
|
internalinterfaces "github.com/kilo-io/kilo/pkg/k8s/informers/internalinterfaces"
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/listers/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
v1alpha1 "github.com/squat/kilo/pkg/k8s/apis/kilo/v1alpha1"
|
v1alpha1 "github.com/kilo-io/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"
|
||||||
|
@@ -18,7 +18,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@@ -20,7 +20,8 @@ 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.
|
||||||
|
@@ -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/squat/kilo/pkg/encapsulation"
|
"github.com/kilo-io/kilo/pkg/encapsulation"
|
||||||
"github.com/squat/kilo/pkg/iproute"
|
"github.com/kilo-io/kilo/pkg/iproute"
|
||||||
"github.com/squat/kilo/pkg/iptables"
|
"github.com/kilo-io/kilo/pkg/iptables"
|
||||||
"github.com/squat/kilo/pkg/route"
|
"github.com/kilo-io/kilo/pkg/route"
|
||||||
"github.com/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/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, 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, mtu uint, 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)
|
kiloIface, _, err = wireguard.New(iface, mtu)
|
||||||
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)
|
||||||
}
|
}
|
||||||
|
@@ -19,7 +19,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestReady(t *testing.T) {
|
func TestReady(t *testing.T) {
|
||||||
|
@@ -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/squat/kilo/pkg/encapsulation"
|
"github.com/kilo-io/kilo/pkg/encapsulation"
|
||||||
"github.com/squat/kilo/pkg/iptables"
|
"github.com/kilo-io/kilo/pkg/iptables"
|
||||||
)
|
)
|
||||||
|
|
||||||
const kiloTableIndex = 1107
|
const kiloTableIndex = 1107
|
||||||
|
@@ -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/squat/kilo/pkg/encapsulation"
|
"github.com/kilo-io/kilo/pkg/encapsulation"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestRoutes(t *testing.T) {
|
func TestRoutes(t *testing.T) {
|
||||||
|
@@ -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/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@@ -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/squat/kilo/pkg/wireguard"
|
"github.com/kilo-io/kilo/pkg/wireguard"
|
||||||
)
|
)
|
||||||
|
|
||||||
func allowedIPs(ips ...string) string {
|
func allowedIPs(ips ...string) string {
|
||||||
|
@@ -24,6 +24,9 @@ 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
|
||||||
@@ -41,7 +44,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) (int, bool, error) {
|
func New(name string, mtu uint) (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
|
||||||
@@ -51,6 +54,7 @@ func New(name string) (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)
|
||||||
}
|
}
|
||||||
|
@@ -9,8 +9,8 @@
|
|||||||
"deploy": "docusaurus deploy"
|
"deploy": "docusaurus deploy"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "^2.0.0-beta.0",
|
"@docusaurus/core": "^2.0.0-beta.3",
|
||||||
"@docusaurus/preset-classic": "^2.0.0-beta.0",
|
"@docusaurus/preset-classic": "^2.0.0-beta.3",
|
||||||
"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,9 +26,5 @@
|
|||||||
"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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
3167
website/yarn.lock
3167
website/yarn.lock
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user