code restructuring as per typical golang projects (#397)
* code restructuring as per typical golang projects * fix link in docs
10
Makefile
@ -41,11 +41,11 @@ ifeq "$(BUILD_IN_DOCKER)" "true"
|
|||||||
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
|
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
|
||||||
sh -c ' \
|
sh -c ' \
|
||||||
GOARCH=$(GOARCH) CGO_ENABLED=0 go build \
|
GOARCH=$(GOARCH) CGO_ENABLED=0 go build \
|
||||||
-ldflags "-X github.com/cloudnativelabs/kube-router/app.version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/app.buildDate=$(BUILD_DATE)" \
|
-ldflags "-X github.com/cloudnativelabs/kube-router/pkg/cmd.version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/pkg/cmd.buildDate=$(BUILD_DATE)" \
|
||||||
-o kube-router kube-router.go'
|
-o kube-router cmd/kube-router/kube-router.go'
|
||||||
@echo Finished kube-router binary build.
|
@echo Finished kube-router binary build.
|
||||||
else
|
else
|
||||||
GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-X github.com/cloudnativelabs/kube-router/app.version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/app.buildDate=$(BUILD_DATE)' -o kube-router kube-router.go
|
GOARCH=$(GOARCH) CGO_ENABLED=0 go build -ldflags '-X github.com/cloudnativelabs/kube-router/pkg/cmd.version=$(GIT_COMMIT) -X github.com/cloudnativelabs/kube-router/pkg/cmd.buildDate=$(BUILD_DATE)' -o kube-router cmd/kube-router/kube-router.go
|
||||||
endif
|
endif
|
||||||
|
|
||||||
test: gofmt gomoqs ## Runs code quality pipelines (gofmt, tests, coverage, lint, etc)
|
test: gofmt gomoqs ## Runs code quality pipelines (gofmt, tests, coverage, lint, etc)
|
||||||
@ -53,7 +53,7 @@ ifeq "$(BUILD_IN_DOCKER)" "true"
|
|||||||
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
|
$(DOCKER) run -v $(PWD):/go/src/github.com/cloudnativelabs/kube-router -w /go/src/github.com/cloudnativelabs/kube-router $(DOCKER_BUILD_IMAGE) \
|
||||||
sh -c 'go test github.com/cloudnativelabs/kube-router github.com/cloudnativelabs/kube-router/app/... github.com/cloudnativelabs/kube-router/utils/'
|
sh -c 'go test github.com/cloudnativelabs/kube-router github.com/cloudnativelabs/kube-router/app/... github.com/cloudnativelabs/kube-router/utils/'
|
||||||
else
|
else
|
||||||
go test github.com/cloudnativelabs/kube-router github.com/cloudnativelabs/kube-router/app/... github.com/cloudnativelabs/kube-router/utils/
|
go test github.com/cloudnativelabs/kube-router/cmd/kube-router/ github.com/cloudnativelabs/kube-router/pkg/...
|
||||||
endif
|
endif
|
||||||
|
|
||||||
vagrant-up: export docker=$(DOCKER)
|
vagrant-up: export docker=$(DOCKER)
|
||||||
@ -144,7 +144,7 @@ gofmt-fix: ## Fixes files that need to be gofmt'd.
|
|||||||
|
|
||||||
# List of all file_moq.go files which would need to be regenerated
|
# List of all file_moq.go files which would need to be regenerated
|
||||||
# from file.go if changed
|
# from file.go if changed
|
||||||
gomoqs: ./app/controllers/network_services_controller_moq.go
|
gomoqs: ./pkg/controllers/network_services_controller_moq.go
|
||||||
|
|
||||||
# file_moq.go file is generated from file.go "//go:generate moq ..." in-file
|
# file_moq.go file is generated from file.go "//go:generate moq ..." in-file
|
||||||
# annotation, as it needs to know which interfaces to create mock stubs for
|
# annotation, as it needs to know which interfaces to create mock stubs for
|
||||||
|
18
README.md
@ -20,7 +20,7 @@ single DaemonSet/Binary. It doesn't get any easier.
|
|||||||
### IPVS/LVS based service proxy | `--run-service-proxy`
|
### IPVS/LVS based service proxy | `--run-service-proxy`
|
||||||
|
|
||||||
kube-router uses the Linux kernel's LVS/IPVS features to implement its K8s Services
|
kube-router uses the Linux kernel's LVS/IPVS features to implement its K8s Services
|
||||||
Proxy. Kube-router fully leverages power off LVS/IPVS to provide rich set of [scheduling options](/Documentation#load-balancing-scheduling-algorithms) and unique features like DSR (Direct Server Return), L3 load balancing with ECMP for deployments where high throughput, minimal latency and high-availability are crucial.
|
Proxy. Kube-router fully leverages power off LVS/IPVS to provide rich set of [scheduling options](/docs#load-balancing-scheduling-algorithms) and unique features like DSR (Direct Server Return), L3 load balancing with ECMP for deployments where high throughput, minimal latency and high-availability are crucial.
|
||||||
|
|
||||||
Read more about the advantages of IPVS for container load balancing:
|
Read more about the advantages of IPVS for container load balancing:
|
||||||
- [Kubernetes network services proxy with IPVS/LVS](https://cloudnativelabs.github.io/post/2017-05-10-kube-network-service-proxy/)
|
- [Kubernetes network services proxy with IPVS/LVS](https://cloudnativelabs.github.io/post/2017-05-10-kube-network-service-proxy/)
|
||||||
@ -68,18 +68,18 @@ configured BGP peers. Kube-routes also support MD5 password based authentication
|
|||||||
uses strict export policies so you can be assured routes are advertised to underlay
|
uses strict export policies so you can be assured routes are advertised to underlay
|
||||||
only as you intended.
|
only as you intended.
|
||||||
|
|
||||||
For more details please refer to the [BGP documentation](Documentation/bgp.md).
|
For more details please refer to the [BGP documentation](docs/bgp.md).
|
||||||
|
|
||||||
### Standard Linux Networking
|
### Standard Linux Networking
|
||||||
|
|
||||||
A key design tenet of Kube-router is to use standard Linux networking stack and toolset. There is no overlays or
|
A key design tenet of Kube-router is to use standard Linux networking stack and toolset. There is no overlays or
|
||||||
SDN pixie dust, but just plain good old networking. You can use standard Linux networking tools like iptables, ipvsadm, ipset,
|
SDN pixie dust, but just plain good old networking. You can use standard Linux networking tools like iptables, ipvsadm, ipset,
|
||||||
iproute, traceroute, tcpdump etc. to troubleshoot or observe data path. When kube-router is ran as a daemonset, image also ships with these [tools](./Documentation/pod-toolbox.md#pod-toolbox) automatically configured for your cluster.
|
iproute, traceroute, tcpdump etc. to troubleshoot or observe data path. When kube-router is ran as a daemonset, image also ships with these [tools](./docs/pod-toolbox.md#pod-toolbox) automatically configured for your cluster.
|
||||||
|
|
||||||
### Small Footprint
|
### Small Footprint
|
||||||
|
|
||||||
Although it does the work of several of its peers in one binary, kube-router
|
Although it does the work of several of its peers in one binary, kube-router
|
||||||
does it all with a relatively [tiny codebase](https://github.com/cloudnativelabs/kube-router/tree/master/app/controllers), partly because IPVS is already
|
does it all with a relatively [tiny codebase](https://github.com/cloudnativelabs/kube-router/tree/master/pkg/controllers), partly because IPVS is already
|
||||||
there on your Kuberneres nodes waiting to help you do amazing things.
|
there on your Kuberneres nodes waiting to help you do amazing things.
|
||||||
kube-router brings that and GoBGP's modern BGP interface to you in an elegant
|
kube-router brings that and GoBGP's modern BGP interface to you in an elegant
|
||||||
package designed from the ground up for Kubernetes.
|
package designed from the ground up for Kubernetes.
|
||||||
@ -94,11 +94,11 @@ that has been thouroughly tested and optimized.
|
|||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
- [How it Works](./Documentation/how-it-works.md)
|
- [How it Works](./docs/how-it-works.md)
|
||||||
- [Architecture](./Documentation/README.md#architecture)
|
- [Architecture](./docs/README.md#architecture)
|
||||||
- [See Kube-router in action](./Documentation#see-kube-router-in-action)
|
- [See Kube-router in action](./docs/README.md#see-kube-router-in-action)
|
||||||
- [User Guide](./Documentation/README.md#user-guide)
|
- [User Guide](./docs/README.md#user-guide)
|
||||||
- [Developer Guide](./Documentation/developing.md)
|
- [Developer Guide](./docs/developing.md)
|
||||||
|
|
||||||
## Project status
|
## Project status
|
||||||
|
|
||||||
|
@ -8,8 +8,8 @@ import (
|
|||||||
|
|
||||||
_ "net/http/pprof"
|
_ "net/http/pprof"
|
||||||
|
|
||||||
"github.com/cloudnativelabs/kube-router/app"
|
"github.com/cloudnativelabs/kube-router/pkg/cmd"
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/spf13/pflag"
|
"github.com/spf13/pflag"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ func Main() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if config.Version {
|
if config.Version {
|
||||||
app.PrintVersion(false)
|
cmd.PrintVersion(false)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48,11 +48,11 @@ func Main() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if config.CleanupConfig {
|
if config.CleanupConfig {
|
||||||
app.CleanupConfigAndExit()
|
cmd.CleanupConfigAndExit()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
kubeRouter, err := app.NewKubeRouterDefault(config)
|
kubeRouter, err := cmd.NewKubeRouterDefault(config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Failed to parse kube-router config: %v", err)
|
return fmt.Errorf("Failed to parse kube-router config: %v", err)
|
||||||
}
|
}
|
@ -32,9 +32,9 @@ func TestMainHelp(t *testing.T) {
|
|||||||
stderrW.Close()
|
stderrW.Close()
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
|
|
||||||
docF, err := os.Open("Documentation/README.md")
|
docF, err := os.Open("../../docs/README.md")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("could not open Documentation/README.md: %s\n", err)
|
t.Fatalf("could not open docs/README.md: %s\n", err)
|
||||||
}
|
}
|
||||||
docBuf := bytes.NewBuffer(nil)
|
docBuf := bytes.NewBuffer(nil)
|
||||||
docBuf.ReadFrom(docF)
|
docBuf.ReadFrom(docF)
|
||||||
@ -44,6 +44,6 @@ func TestMainHelp(t *testing.T) {
|
|||||||
exp = append(exp, []byte("```\n")...)
|
exp = append(exp, []byte("```\n")...)
|
||||||
|
|
||||||
if !bytes.Contains(docBuf.Bytes(), exp) {
|
if !bytes.Contains(docBuf.Bytes(), exp) {
|
||||||
t.Errorf("Documentation/README.md 'command line options' section does not match `kube-router --help`.\nExpected:\n%s", exp)
|
t.Errorf("docs/README.md 'command line options' section does not match `kube-router --help`.\nExpected:\n%s", exp)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -79,16 +79,16 @@ However BGP can be leveraged to other use cases like advertising the cluster ip,
|
|||||||
The best way to get started is to deploy Kubernetes with Kube-router is with a cluster installer.
|
The best way to get started is to deploy Kubernetes with Kube-router is with a cluster installer.
|
||||||
|
|
||||||
#### kops
|
#### kops
|
||||||
Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/Documentation/kops.md) to deploy Kubernetes cluster with Kube-router using [Kops](https://github.com/kubernetes/kops)
|
Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/docs/kops.md) to deploy Kubernetes cluster with Kube-router using [Kops](https://github.com/kubernetes/kops)
|
||||||
|
|
||||||
#### bootkube
|
#### bootkube
|
||||||
Please see the [steps](https://github.com/cloudnativelabs/kube-router/tree/master/contrib/bootkube) to deploy Kubernetes cluster with Kube-router using [bootkube](https://github.com/kubernetes-incubator/bootkube)
|
Please see the [steps](https://github.com/cloudnativelabs/kube-router/tree/master/contrib/bootkube) to deploy Kubernetes cluster with Kube-router using [bootkube](https://github.com/kubernetes-incubator/bootkube)
|
||||||
|
|
||||||
#### kubeadm
|
#### kubeadm
|
||||||
Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/Documentation/kubeadm.md) to deploy Kubernetes cluster with Kube-router using [Kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)
|
Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/docs/kubeadm.md) to deploy Kubernetes cluster with Kube-router using [Kubeadm](https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/)
|
||||||
|
|
||||||
#### generic
|
#### generic
|
||||||
Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/Documentation/generic.md) to deploy kube-router on manually installed clusters
|
Please see the [steps](https://github.com/cloudnativelabs/kube-router/blob/master/docs/generic.md) to deploy kube-router on manually installed clusters
|
||||||
|
|
||||||
### deployment
|
### deployment
|
||||||
|
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 59 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 155 KiB After Width: | Height: | Size: 155 KiB |
@ -1,4 +1,4 @@
|
|||||||
package app
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
@ -9,8 +9,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/cloudnativelabs/kube-router/app/controllers"
|
"github.com/cloudnativelabs/kube-router/pkg/controllers"
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
@ -6,7 +6,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
@ -7,7 +7,7 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
@ -11,8 +11,8 @@ import (
|
|||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/cloudnativelabs/kube-router/utils"
|
"github.com/cloudnativelabs/kube-router/pkg/utils"
|
||||||
"github.com/coreos/go-iptables/iptables"
|
"github.com/coreos/go-iptables/iptables"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
@ -19,8 +19,8 @@ import (
|
|||||||
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
"github.com/aws/aws-sdk-go/aws/ec2metadata"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
"github.com/aws/aws-sdk-go/service/ec2"
|
"github.com/aws/aws-sdk-go/service/ec2"
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/cloudnativelabs/kube-router/utils"
|
"github.com/cloudnativelabs/kube-router/pkg/utils"
|
||||||
"github.com/coreos/go-iptables/iptables"
|
"github.com/coreos/go-iptables/iptables"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
bgpapi "github.com/osrg/gobgp/api"
|
bgpapi "github.com/osrg/gobgp/api"
|
@ -18,8 +18,8 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/cloudnativelabs/kube-router/app/options"
|
"github.com/cloudnativelabs/kube-router/pkg/options"
|
||||||
"github.com/cloudnativelabs/kube-router/utils"
|
"github.com/cloudnativelabs/kube-router/pkg/utils"
|
||||||
"github.com/coreos/go-iptables/iptables"
|
"github.com/coreos/go-iptables/iptables"
|
||||||
"github.com/docker/docker/client"
|
"github.com/docker/docker/client"
|
||||||
"github.com/docker/libnetwork/ipvs"
|
"github.com/docker/libnetwork/ipvs"
|