|Project Name||Stars||Downloads||Repos Using This||Packages Using This||Most Recent Commit||Total Releases||Latest Release||Open Issues||License||Language|
|Kong||36,409||9 hours ago||99||apache-2.0||Lua|
|🦍 The Cloud-Native API Gateway|
|Kuboard 是基于 Kubernetes 的微服务管理界面。同时提供 Kubernetes 免费中文教程，入门教程，最新版本的 Kubernetes v1.23.4 安装手册，(k8s install) 在线答疑，持续更新。|
|Authelia||18,065||2||8 hours ago||64||October 28, 2019||103||apache-2.0||Go|
|The Single Sign-On Multi-Factor portal for web apps|
|Ingress Nginx||16,031||1||9 hours ago||63||July 21, 2021||598||apache-2.0||Go|
|Ingress-NGINX Controller for Kubernetes|
|External Dns||6,868||12||10 hours ago||139||November 07, 2023||259||apache-2.0||Go|
|Configure external DNS servers (AWS Route53, Google CloudDNS and others) for Kubernetes Ingresses and Services|
|K8s For Docker Desktop||4,782||12 days ago||47||apache-2.0||PowerShell|
|为Docker Desktop for Mac/Windows开启Kubernetes和Istio。|
|Flagger||4,501||7||7 days ago||62||November 30, 2023||247||apache-2.0||Go|
|Progressive delivery Kubernetes operator (Canary, A/B Testing and Blue/Green deployments)|
|Kubernetes Ingress||4,422||3||7 hours ago||102||October 19, 2022||84||apache-2.0||Go|
|NGINX and NGINX Plus Ingress Controllers for Kubernetes|
|Aws Load Balancer Controller||3,591||6 days ago||18||June 28, 2021||214||apache-2.0||Go|
|A Kubernetes controller for Elastic Load Balancers|
|K8s Tutorials||3,572||a month ago||2||mit||Go|
|k8s tutorials | k8s 教程|
Skipper is an HTTP router and reverse proxy for service composition. It's designed to handle >300k HTTP route definitions with detailed lookup conditions, and flexible augmentation of the request flow with filters. It can be used out of the box or extended with custom lookup, filter logic and configuration sources.
An overview of deployments and data-clients shows some use cases to run skipper.
Skipper provides a default executable command with a few built-in filters. However, its primary use case is to be extended with custom filters, predicates or data sources. Go here for additional documentation.
A few examples for extending Skipper:
In order to build and run Skipper, only the latest version of Go needs to be installed. Skipper can use Innkeeper or Etcd as data sources for routes, or for the simplest cases, a local configuration file. See more details in the documentation: https://pkg.go.dev/github.com/zalando/skipper
Download binary tgz from https://github.com/zalando/skipper/releases/latest
Example, assumes that you have $GOBIN set to a directory that exists and is in your $PATH:
% curl -LO https://github.com/zalando/skipper/releases/download/v0.14.8/skipper-v0.14.8-linux-amd64.tar.gz % tar xzf skipper-v0.14.8-linux-amd64.tar.gz % mv skipper-v0.14.8-linux-amd64/* $GOBIN/ % skipper -version Skipper version v0.14.8 (commit: 95057948, runtime: go1.19.1)
% git clone https://github.com/zalando/skipper.git % make % ./bin/skipper -version Skipper version v0.14.8 (commit: 95057948, runtime: go1.19.3)
Create a file with a route:
echo 'hello: Path("/hello") -> "https://www.example.org"' > example.eskip
Optionally, verify the file's syntax:
eskip check example.eskip
If no errors are detected nothing is logged, else a descriptive error is logged.
Start Skipper and make an HTTP request:
skipper -routes-file example.eskip & curl localhost:9090/hello
To run the latest Docker container:
docker run registry.opensource.zalan.do/teapot/skipper:latest
eskip you first mount the
.eskip file, into the container, and run the command
docker run \ -v $(PWD)/doc-docker-intro.eskip:/doc-docker-intro.eskip \ registry.opensource.zalan.do/teapot/skipper:latest eskip print doc-docker-intro.eskip
skipper you first mount the
.eskip file, into the container, expose the ports and run the command
docker run -it \ -v $(PWD)/doc-docker-intro.eskip:/doc-docker-intro.eskip \ -p 9090:9090 \ -p 9911:9911 \ registry.opensource.zalan.do/teapot/skipper:latest skipper -routes-file doc-docker-intro.eskip
Skipper will then be available on http://localhost:9090
Skipper can be used as an authentication proxy, to check incoming requests with Basic auth or an OAuth2 provider or an OpenID Connect provider including audit logging. See the documentation at: https://pkg.go.dev/github.com/zalando/skipper/filters/auth.
Getting the code with the test dependencies (
git clone https://github.com/zalando/skipper.git cd skipper
Build and test all packages:
make deps make install make lint make shortcheck
On Mac the tests may fail because of low max open file limit. Please make sure you have correct limits setup by following these instructions.
To run or debug skipper from IntelliJ IDEA or GoLand, you need to create this configuration:
|Directory||skipper source dir +
|Working directory||skipper source dir (usually the default)|
For AWS integration, we provide an ingress controller zalando-incubator/kube-ingress-aws-controller, that manage ALBs or NLBs in front of your skipper deployment. A production example for skipper and a production example for kube-ingress-aws-controller, can be found in our Kubernetes configuration zalando-incubator/kubernetes-on-aws.
The following example shows a skipper routes file in eskip format, that has 3 named routes: baidu, google and yandex.
% cat doc-1min-intro.eskip baidu: Path("/baidu") -> setRequestHeader("Host", "www.baidu.com") -> setPath("/s") -> setQuery("wd", "godoc skipper") -> "http://www.baidu.com"; google: * -> setPath("/search") -> setQuery("q", "godoc skipper") -> "https://www.google.com"; yandex: * && Cookie("yandex", "true") -> setPath("/search/") -> setQuery("text", "godoc skipper") -> tee("http://127.0.0.1:12345/") -> "https://yandex.ru";
Matching the route:
Path()matching to differentiate the HTTP requests to select the route.
*if you have a cookie
Run skipper with the routes file doc-1min-intro.eskip shown above
% skipper -routes-file doc-1min-intro.eskip
To test each route you can use curl:
% curl -v localhost:9090/baidu % curl -v localhost:9090/ % curl -v --cookie "yandex=true" localhost:9090/
To see the shadow traffic request that is made by the
tee() filter you can use nc:
[terminal1]% nc -l 12345 [terminal2]% curl -v --cookie "yandex=true" localhost:9090/
This introduction was moved to ingress controller documentation.
In case you want to implement and link your own modules into your
skipper, there is https://github.com/skipper-plugins organization to
enable you to do so. In order to explain you the build process with
custom Go modules there is
skipper-plugins/skipper-tracing-build, that was
used to build skipper's opentracing package.
We moved the opentracing plugin source into the
tracing package, so
there is no need to use plugins for this case.
Because Go plugins are not very well supported by Go itself we do not recommend to use plugins, but you can extend skipper and build your own proxy.
User or developer questions can be asked in our public Google Group
The preferred communication channel is the slack channel, because the google group is a manual process to add members. Feel also free to create an issue, if you dislike chat and post your questions there.
We do our proposals open in Skipper's Google drive. If you want to make a proposal feel free to create an issue and if it is a bigger change we will invite you to a document, such that we can work together.
Zalando used this project as shop frontend http router with 350000 routes. We use it as Kubernetes ingress controller in more than 100 production clusters. With every day traffic between 500k and 7M RPS serving 15000 ingress and 3750 RouteGroups at less than 5/1M requests. We also run several custom skipper instances that use skipper as library.
Sergio Ballesteros from spotahome said 2018:
We also ran tests with several ingress controllers and skipper gave us the more reliable results. Currently we are running skipper since almost 2 years with like 20K Ingress rules. The fact that skipper is written in go let us understand the code, add features and fix bugs since all of our infra stack is golang.