Skip to content

Commit a99b2c1

Browse files
authored
doc: update readme and docs to fit the current skipper project (zalando#2729)
Signed-off-by: Sandor Szücs <[email protected]>
1 parent 31c57f9 commit a99b2c1

File tree

3 files changed

+89
-68
lines changed

3 files changed

+89
-68
lines changed

docs/data-clients/kubernetes.md

+24-22
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Skipper's Kubernetes dataclient can be used, if you want to run Skipper as
44
[kubernetes-ingress-controller](https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-controllers).
55
It will get its route information from provisioned
66
[Ingress Objects](https://kubernetes.io/docs/concepts/services-networking/ingress).
7-
Detailed information you find in our [godoc for dataclient kubernetes](https://godoc.org/github.com/zalando/skipper/dataclients/kubernetes).
87

98
## Kubernetes Ingress Controller deployment
109

@@ -22,32 +21,35 @@ proxy made to apply updates very often. Skipper is used in
2221
production with more than 200.000 routing table entries.
2322
Skipper has Filters to change http data and Predicates to change the
2423
matching rules, both can combined and chained. You can set these in
25-
ingress.yaml files to build resiliency patterns like ratelimit or
24+
ingress.yaml files to build resiliency patterns like load shedding, ratelimit or
2625
circuitbreaker. You can also use them to build more highlevel
2726
deployment patterns, for example feature toggles, shadow traffic or
2827
blue-green deployments.
2928

3029
Skipper's main features:
3130

3231
- Filters - create, update, delete all kind of HTTP data
33-
- [collection of base http manipulations](https://godoc.org/github.com/zalando/skipper/filters/builtin): for example manipulating Path, Querystring, ResponseHeader, RequestHeader and redirect handling
34-
- [cookie handling](https://godoc.org/github.com/zalando/skipper/filters/cookie)
35-
- [circuitbreakers](https://godoc.org/github.com/zalando/skipper/filters/circuit): consecutiveBreaker or rateBreaker
36-
- [ratelimit](https://godoc.org/github.com/zalando/skipper/filters/ratelimit): based on client or backend data
37-
- Shadow traffic: [tee()](https://godoc.org/github.com/zalando/skipper/filters/tee)
38-
- Predicates - advanced matching capability
39-
- URL Path match: `Path("/foo")`
40-
- Host header match: `Host("^www.example.org$")`
41-
- [Querystring](https://godoc.org/github.com/zalando/skipper/predicates/query): `QueryParam("featureX")`
42-
- [Cookie based](https://godoc.org/github.com/zalando/skipper/predicates/cookie): `Cookie("alpha", /^enabled$/)`
43-
- [source whitelist](https://godoc.org/github.com/zalando/skipper/predicates/source): `Source("1.2.3.4/24")`
44-
- [time based interval](https://godoc.org/github.com/zalando/skipper/predicates/interval)
45-
- [traffic by percentage](https://godoc.org/github.com/zalando/skipper/predicates/traffic) supports also sticky sessions
32+
- [collection of base http manipulations](../reference/filters.md):
33+
for example [manipulating Path](../reference/filters.md#http-path), [Querystring](../reference/filters.md#http-query), [HTTP Headers](../reference/filters.md#http-headers) and [redirect](../reference/filters.md#http-redirect) handling
34+
- [cookie handling](../reference/filters.md#cookie-handling)
35+
- [circuitbreakers](../reference/filters.md#circuit-breakers)
36+
- [ratelimit](../reference/filters.md#rate-limit): based on client or backend data
37+
- [Shadow traffic filters](../reference/filters.md#shadow-traffic)
38+
- [Predicates](../reference/predicates.md) - advanced matching capability
39+
- URL [Path](../reference/predicates.md#the-path-tree) match: `Path("/foo")`
40+
- [Host header](../reference/predicates.md#host) match: `Host("^www.example.org$")`
41+
- [Querystring](../reference/predicates.md#queryparam): `QueryParam("featureX")`
42+
- [Cookie based](../reference/predicates.md#cookie): `Cookie("alpha", /^enabled$/)`
43+
- [source IP allowlist](../reference/predicates.md#source): `Source("1.2.3.4/24")` or `ClientIP("1.2.3.4/24")`
44+
- [time based interval](../reference/predicates.md#interval)
45+
- [traffic by percentage](../reference/predicates.md#trafficsegment) supports also sticky sessions
4646
- Kubernetes integration
47-
- All Filters and Predicates can be used with 2 annotations
48-
- Predicates: `zalando.org/skipper-predicate`
49-
- Filters: `zalando.org/skipper-filter`
50-
- Custom routes can be defined with the annotation `zalando.org/skipper-routes`
51-
- [metrics](https://godoc.org/github.com/zalando/skipper/metrics)
52-
- access logs
53-
- Blue-Green deployments, with another Ingress annotation `zalando.org/backend-weights`
47+
- All Filters and Predicates can be used with 2 [annotations](../kubernetes/ingress-usage.md#skipper-ingress-annotations)
48+
- Predicates: `zalando.org/skipper-predicate`
49+
- Filters: `zalando.org/skipper-filter`
50+
- Custom routes can be defined with the annotation `zalando.org/skipper-routes`
51+
- [RouteGroup CRD](../kubernetes/routegroups.md) to support all skipper features without limitation
52+
- [monitoring](../operation/operation.md#monitoring)
53+
- [opentracing](../operation/operation.md#opentracing)
54+
- access logs with fine granular control of logs by status codes
55+
- Blue-Green deployments, with another Ingress annotation `zalando.org/backend-weights`

docs/kubernetes/ingress-controller.md

+11-7
Original file line numberDiff line numberDiff line change
@@ -323,13 +323,10 @@ run:
323323
kubectl create -f docs/kubernetes/deploy/deployment
324324
```
325325

326-
!!! note
327-
The `extensions/v1beta1` and `networking.k8s.io/v1beta1` API versions of Ingress is no longer served as of v1.22.
328-
In order to use `networking.k8s.io/v1` extension, you need to add `-kubernetes-ingress-v1` to the `skipper-ingress` container's arguments. This feature is added from skipper version v0.13.149
329-
330326
Now, let's see what we have just deployed.
331327
This will create serviceaccount, PodSecurityPolicy and RBAC rules such that
332-
skipper-ingress is allowed to listen on the hostnetwork.
328+
skipper-ingress is allowed to listen on the hostnetwork and poll
329+
ingress resources.
333330

334331
```yaml
335332
# cat docs/kubernetes/deploy/deployment/rbac.yaml
@@ -495,7 +492,7 @@ The source code is available at [GitHub](https://github.com/baez90/skipper-helm)
495492
The chart includes resource definitions for the following use cases:
496493

497494
- RBAC
498-
- CoreOS [Prometheus-Operator](https://github.com/coreos/prometheus-operator)
495+
- [Prometheus-Operator](https://github.com/prometheus-operator/prometheus-operator)
499496

500497
As this chart is not maintained by the Skipper developers and is still under development only the basic deployment workflow is covered here.
501498
Check the GitHub repository for all details.
@@ -641,7 +638,7 @@ line option `-enable-swarm` and `-enable-ratelimits`.
641638
The rest depends on the implementation, that can be:
642639

643640
- [Redis](https://redis.io)
644-
- [SWIM](https://www.cs.cornell.edu/projects/Quicksilver/public_pdfs/SWIM.pdf)
641+
- alpha version: [SWIM](https://www.cs.cornell.edu/projects/Quicksilver/public_pdfs/SWIM.pdf)
645642

646643
### Redis based
647644

@@ -755,6 +752,13 @@ the communication work with TCP and UDP to the specified `swarm-port`:
755752

756753
## Upgrades
757754

755+
Please always read the announcements of the vX.Y.**0**
756+
[release page](https://github.com/zalando/skipper/releases/tag/v0.18.0),
757+
because these will document in case we break something in a backwards non
758+
compatible way. Most of the time it will be safe to deploy minor
759+
version updates, but better to know in advance if something could
760+
break.
761+
758762
### <v0.14.0 to >=v0.14.0
759763

760764
Kubernetes dataclient removes support for ingress v1beta1.

readme.md

+54-39
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,26 @@ Skipper
3131
- simultaneously streams incoming requests and backend responses
3232
- optionally acts as a final endpoint (shunt), e.g. as a static file server or a mock backend for diagnostics
3333
- updates routing rules without downtime, while supporting multiple types of data sources — including
34-
[etcd](https://github.com/coreos/etcd), [Kubernetes Ingress](https://opensource.zalando.com/skipper/data-clients/kubernetes/), [Innkeeper (deprecated)](https://github.com/zalando/innkeeper), [static files](https://opensource.zalando.com/skipper/data-clients/eskip-file/), [route string](https://opensource.zalando.com/skipper/data-clients/route-string/) and
35-
[custom configuration sources](https://godoc.org/github.com/zalando/skipper/predicates/#source)
34+
[etcd](https://github.com/coreos/etcd), [Kubernetes Ingress](https://opensource.zalando.com/skipper/data-clients/kubernetes/), [static files](https://opensource.zalando.com/skipper/data-clients/eskip-file/), [route string](https://opensource.zalando.com/skipper/data-clients/route-string/) and
35+
[custom configuration sources](https://opensource.zalando.com/skipper/tutorials/development/#dataclients)
3636
- can serve as a
3737
[Kubernetes Ingress controller](https://zalando.github.io/skipper/data-clients/kubernetes/)
3838
without reloads. You can use it in combination with a controller that will route public traffic to
3939
your skipper fleet; [see AWS example](https://github.com/zalando-incubator/kube-ingress-aws-controller)
40-
- shipped with eskip: a descriptive configuration language designed for routing rules
40+
- shipped with
41+
- eskip: a descriptive configuration language designed for routing
42+
rules
43+
- routesrv: proxy to omit kube-apiserver overload leveraging Etag
44+
header to reduce amount of CPU used in your skipper data plane
45+
- webhook: Kubernetes validation webhook to make sure your
46+
manifests are deployed safely
4147

4248
Skipper provides a default executable command with a few built-in filters. However, its primary use case is to
4349
be extended with custom filters, predicates or data sources. [Go here for additional documentation](https://pkg.go.dev/github.com/zalando/skipper).
4450

4551
A few examples for extending Skipper:
4652

53+
- Example proxy with custom filter https://github.com/szuecs/skipper-example-proxy
4754
- Image server https://github.com/zalando-stups/skrop
4855
- Plugins repository https://github.com/skipper-plugins/, [plugin docs](https://opensource.zalando.com/skipper/reference/plugins/)
4956

@@ -125,8 +132,8 @@ Skipper will then be available on http://localhost:9090
125132
#### Authentication Proxy
126133

127134
Skipper can be used as an authentication proxy, to check incoming
128-
requests with Basic auth or an OAuth2 provider including audit
129-
logging. See the documentation at:
135+
requests with Basic auth or an OAuth2 provider or an OpenID Connect
136+
provider including audit logging. See the documentation at:
130137
[https://pkg.go.dev/github.com/zalando/skipper/filters/auth](https://pkg.go.dev/github.com/zalando/skipper/filters/auth).
131138

132139

@@ -141,6 +148,7 @@ Build and test all packages:
141148

142149
make deps
143150
make install
151+
make lint
144152
make shortcheck
145153

146154
> On Mac the tests may fail because of low max open file limit. Please make sure you have correct limits setup
@@ -167,8 +175,9 @@ you will can be found in our [ingress-controller deployment docs](https://openso
167175

168176
For AWS integration, we provide an ingress controller
169177
https://github.com/zalando-incubator/kube-ingress-aws-controller, that
170-
manage ALBs in front of your skipper deployment.
171-
A [production example](https://github.com/zalando-incubator/kubernetes-on-aws/blob/stable/cluster/manifests/skipper/),
178+
manage ALBs or NLBs in front of your skipper deployment.
179+
A [production example for skipper](https://github.com/zalando-incubator/kubernetes-on-aws/blob/stable/cluster/manifests/skipper/)
180+
and a [production example for kube-ingress-aws-controller](https://github.com/zalando-incubator/kubernetes-on-aws/tree/dev/cluster/manifests/ingress-controller/),
172181
can be found in our Kubernetes configuration https://github.com/zalando-incubator/kubernetes-on-aws.
173182

174183
- [Comparison with other Ingress controllers](https://opensource.zalando.com/skipper/kubernetes/ingress-controller/#comparison-with-other-ingress-controllers)
@@ -182,20 +191,25 @@ includes information about [deployment use cases](https://opensource.zalando.com
182191
and detailed information on these topics:
183192

184193
- The [Routing](https://pkg.go.dev/github.com/zalando/skipper/routing) Mechanism
185-
- Matching Requests
194+
- [Matching Requests](https://opensource.zalando.com/skipper/tutorials/basics/#route-matching)
186195
- [Filters](https://opensource.zalando.com/skipper/reference/filters/) - Augmenting Requests and Responses
187-
- Service Backends
188-
- Route Definitions
189-
- Data Sources: [eskip file](https://pkg.go.dev/github.com/zalando/skipper/eskipfile), [etcd](https://pkg.go.dev/github.com/zalando/skipper/etcd), [Kubernetes](https://pkg.go.dev/github.com/zalando/skipper/dataclients/kubernetes), [Route string](https://pkg.go.dev/github.com/zalando/skipper/dataclients/routestring)
190-
- [Circuit Breakers](https://pkg.go.dev/github.com/zalando/skipper/filters/circuit)
191-
- Extending It with Customized [Predicates](https://opensource.zalando.com/skipper/reference/predicates/), [Filters](https://opensource.zalando.com/skipper/reference/filters/), can be done by [Plugins](https://opensource.zalando.com/skipper/reference/plugins/) or [Lua Scripts](https://opensource.zalando.com/skipper/reference/scripts/)
192196
- [Predicates](https://opensource.zalando.com/skipper/reference/predicates/) - additional predicates to match a route
193-
- [Proxy Packages](https://pkg.go.dev/github.com/zalando/skipper/proxy)
197+
- Service [Backends](https://opensource.zalando.com/skipper/reference/backends/)
198+
- Route Definitions fetched by dataclients:
199+
- [route string](https://opensource.zalando.com/skipper/data-clients/route-string/)
200+
- [eskip file](https://opensource.zalando.com/skipper/data-clients/eskip-file/)
201+
- [remote eskip](https://opensource.zalando.com/skipper/data-clients/eskip-remote/)
202+
- [etcd](https://opensource.zalando.com/skipper/data-clients/etcd/)
203+
- [kubernetes](https://opensource.zalando.com/skipper/data-clients/kubernetes/)
204+
- [Circuit Breakers](https://pkg.go.dev/github.com/zalando/skipper/filters/circuit)
205+
- Extending It with Custom [Predicates](https://opensource.zalando.com/skipper/tutorials/development/#predicates), [Filters](https://opensource.zalando.com/skipper/tutorials/development/#filters), can be done by [building your own proxy](https://opensource.zalando.com/skipper/tutorials/built-your-own/), [Plugins](https://opensource.zalando.com/skipper/reference/plugins/) or [Lua Scripts](https://opensource.zalando.com/skipper/reference/scripts/)
206+
- [Proxy Package](https://pkg.go.dev/github.com/zalando/skipper/proxy)
194207
- [Logging](https://pkg.go.dev/github.com/zalando/skipper/logging) and [Metrics](https://pkg.go.dev/github.com/zalando/skipper/metrics)
195-
- Performance Considerations
208+
- [Operations guide](https://opensource.zalando.com/skipper/operation/operation/)
209+
- [Authentication and Authorization](https://opensource.zalando.com/skipper/reference/filters/#authentication-and-authorization)
210+
- [Load Shedders](https://opensource.zalando.com/skipper/reference/filters/#load-shedding)
196211
- [Rate Limiters](https://pkg.go.dev/github.com/zalando/skipper/filters/ratelimit)
197-
- [Opentracing plugin](https://github.com/skipper-plugins/opentracing/) or extend [create your own](https://opensource.zalando.com/skipper/reference/plugins/#opentracing-plugins)
198-
- [WAF plugin](https://github.com/jptosso/coraza-waf) - Web Application Firewall filter for Skipper routes
212+
- [Opentracing tracers](https://pkg.go.dev/github.com/zalando/skipper/tracing/tracers) or extend [create your own](https://opensource.zalando.com/skipper/reference/plugins/#opentracing-plugins)
199213

200214
#### 1 Minute Skipper introduction
201215

@@ -222,9 +236,9 @@ The following example shows a skipper routes file in eskip format, that has 3 na
222236

223237
Matching the route:
224238

225-
- baidu is using Path() matching to differentiate the HTTP requests to select the route.
226-
- google is the default matching with wildcard '*'
227-
- yandex is the default matching with wildcard '*' if you have a cookie "yandex=true"
239+
- baidu is using `Path()` matching to differentiate the HTTP requests to select the route.
240+
- google is the default matching with wildcard `*`
241+
- yandex is the default matching with wildcard `*` if you have a cookie `yandex=true`
228242

229243
Request Filters:
230244

@@ -242,7 +256,7 @@ To test each route you can use curl:
242256
% curl -v localhost:9090/
243257
% curl -v --cookie "yandex=true" localhost:9090/
244258

245-
To see the request that is made by the tee() filter you can use nc:
259+
To see the shadow traffic request that is made by the `tee()` filter you can use nc:
246260

247261
[terminal1]% nc -l 12345
248262
[terminal2]% curl -v --cookie "yandex=true" localhost:9090/
@@ -253,33 +267,34 @@ This introduction was [moved to ingress controller documentation](https://openso
253267

254268
For More details, please check out our [Kubernetes ingress controller docs](https://opensource.zalando.com/skipper/kubernetes/ingress-controller/), our [ingress usage](https://opensource.zalando.com/skipper/kubernetes/ingress-usage/) and how to handle [common backend problems in Kubernetes](https://opensource.zalando.com/skipper/kubernetes/ingress-backends/).
255269

256-
You should have a base understanding of [Kubernetes](https://kubernetes.io) and
257-
[Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/).
258-
259270
### Packaging support
260271

261272
See https://github.com/zalando/skipper/blob/master/packaging/readme.md
262273

263-
Skipper uses Go modules, so you might need to add `GO111MODULE=on` in
264-
your custom build process.
265-
266274
In case you want to implement and link your own modules into your
267-
skipper, there is https://github.com/skipper-plugins organization to enable you to do
268-
so. In order to explain you the build process with custom Go modules
269-
there is https://github.com/skipper-plugins/skipper-tracing-build,
270-
that was used to build skipper's [opentracing
271-
package](https://github.com/skipper-plugins/opentracing).
272-
We moved the opentracing plugin source into the `tracing` package.
273-
275+
skipper, there is https://github.com/skipper-plugins organization to
276+
enable you to do so. In order to explain you the build process with
277+
custom Go modules there is
278+
https://github.com/skipper-plugins/skipper-tracing-build, that was
279+
used to build skipper's [opentracing package](https://github.com/skipper-plugins/opentracing).
280+
We moved the opentracing plugin source into the `tracing` package, so
281+
there is no need to use plugins for this case.
282+
283+
Because Go plugins are not very well supported by Go itself we do not
284+
recommend to use plugins, but you can extend skipper and
285+
[build your own proxy](https://opensource.zalando.com/skipper/tutorials/built-your-own/).
274286

275287
## Community
276288

277289
User or developer questions can be asked in our [public Google Group](https://groups.google.com/forum/#!forum/skipper-router)
278290

279-
We also have a slack channel #skipper in gophers.slack.com. Get an [invite](https://invite.slack.golangbridge.org).
291+
We have a slack channel #skipper in gophers.slack.com. Get an [invite](https://invite.slack.golangbridge.org).
280292
If for some reason this link doesn't work, you can find more information about
281293
the gophers communities [here](https://github.com/gobridge/about-us/blob/master/README.md#onlineoffline-communities).
282294

295+
The preferred communication channel is the slack channel, because the google group is a manual process to add members.
296+
Feel also free to [create an issue](https://github.com/zalando/skipper/issues/new/choose), if you dislike chat and post your questions there.
297+
283298
### Proposals
284299

285300
We do our proposals open in [Skipper's Google drive](https://drive.google.com/drive/folders/0B9LwJMF9koB-ZEk4bEhZal9uOWM).
@@ -289,11 +304,11 @@ bigger change we will invite you to a document, such that we can work together.
289304

290305
### Users
291306

292-
Zalando uses this project as shop frontend http router with 350000 routes, as
293-
Kubernetes ingress controller and runs several custom skipper
294-
instances that use skipper as library.
307+
Zalando used this project as shop frontend http router with 350000 routes.
308+
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.
309+
We also run several custom skipper instances that use skipper as library.
295310

296-
Sergio Ballesteros from [spotahome](https://www.spotahome.com/)
311+
Sergio Ballesteros from [spotahome](https://www.spotahome.com/) said 2018:
297312
> 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.
298313
> 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.
299314

0 commit comments

Comments
 (0)