* middleware/metrics: add more metrics
middleware/cache:
Add metrics for number of elements in the cache. Also export the total
size. Update README to detail the new metrics.
middleware/metrics
Move metrics into subpackage called "vars". This breaks the import
cycle and is cleaner. This allows vars.Report to be used in the
the dnsserver to log refused queries.
middleware/metrics: tests
Add tests to the metrics framework. The metrics/test subpackage allows
scraping of the local server. Do a few test scrape of the metrics that
are defined in the metrics middleware.
This also allows metrics integration tests to check if the caching and
dnssec middleware export their metrics correctly.
* update README
* typos
* fix tests
This fix uses docker container for kubectl. Since Kubernetes docker
image hyperkube has already been downloaded and it consists of
kubectl, there is really no need to download kubectl binary again.
This fix cleans up the Kubernetes related travis setup and removes
unneeded scripts.
This fix also fixes several mismatches of the Kubernetes version used,
so that any changes in version in the future only need to update .travis.yml.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
The DS record is handled specially in the server ServeDNS mux, but there
was no code that actually called the correct middleware handler chain
when encountering a DS.
This PR fixes that behavoir, additonal bugs has been files to look into
how we are handling delegation (secure and non-secure ones).
This fix adds a `cache_capacity` option to dnssec middleware, so that
it is possible to specify the capacity of the LRU cache used by dnssec
middleware.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
Add auto-load middleware that automatically picks up zones.
Every X seconds it will scan for new zones.
Add tests and documentation.
Make 'make test' use -race.
In the file middleware, if there are multiple zone files under a single root zone, watchers are only invoked on the last element of `zones.Names`. This is caused by loop override on the variable `n`.
This issue can be fixed by passing zone object, which calls reload watcher directly.
* Replace go-cache with golang-lru
This fix replace go-cache with golang-lru, as is specified in 335.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
* Move cache initialization to setup
This commit move cache initialization to setup in dnssec middleware.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This fix adds several needed comments in
`middleware/kubernetes/nametemplate/nametemplate.go`
to clean up golint output.
There are still 3 places that needs proper docs:
```
middleware/kubernetes/nametemplate/nametemplate.go:64:1: comment on exported type Template should be of the form "Template ..." (with optional leading article)
middleware/kubernetes/nametemplate/nametemplate.go:72:1: comment on exported method Template.SetTemplate should be of the form "SetTemplate ..."
middleware/kubernetes/nametemplate/nametemplate.go:188:1: comment on exported type NameValues should be of the form "NameValues ..." (with optional leading article)
```
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This PR adds the *root* middleware that specifies a path where
all zone file (the *file* middleware is the only consumer now) can
be found. It works the same as in Caddy.
Documentation can be found in the README.md of the middleware.
Fixes#307
This fix adds unit tests for `ExtractAddressFromReverse`. It also
updates the implementation of `ExtractAddressFromReverse` so that
only a valid IPv4 or IPv6 address (in string format) is returned.
If the addresses is not valid and can not be handled by golang's
`net.ParseIP` then an empty string (`""`) will be returned.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This still needs cleanup, but this is a first pass the cleans some
cruft and documents our style (in middleware.md) and makes all the
docs match that style.
Rename: positive -> success
negative -> denial
There is a third (unused category) which is error. Start using these
new in the caching middleware and later in the logging middleware.
* middleware/proxy
Use connection pooling for communicating with an upstream, instead of
opening a new socket every time.
This makes the proxy more efficient and allowed for some cleanups.
* Some cleanups
* Some fixes
* more
* Kill pool
* Add nil check
* remove pool
Make DefaultPort just be 53. And use the value of Port to make the zone
stanzas complete (instead of defaulting to 53 always). This allows you
to override the port with dns.port.
Make the methods that handle Metrics all use pointer receivers to fix
sync.Once not being initialized.
Finish the setup_test to test for failures. And make the check for the
address more strict and return an error when it does not have a port
number.
Add a toplevel test that starts a CoreDNS server with metrics enabled
so we catch these errors in the future.
Fix the unknown flags handling when receiving such message. We should
zero out all of the Z bits in the OPT record before returning.
Current behavior:
dig +norec +noad +ednsflags=0x80 soa miek.nl @deb.atoom.net
...
; EDNS: version: 0, flags:; MBZ: 0080 , udp: 4096
New:
dig +norec +noad +ednsflags=0x80 soa miek.nl @localhost -p 2053
...
; EDNS: version: 0, flags:; udp: 4096
Take care no to overwrite the Do bit.
We still accept *all* EDNS option; I do not consider that a bug in
itself.
Fixes#306
* Add a setup test for middleware/file
This fix adds a setup test for middleware/file so that there is
a basic coverage for the Corefile processing of middleware/file.
This fix is related to 308 (Will look into it).
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
* middleware/file: use helper function for test
Fixup setup_test.go and use the test.TempFile function to make things
somewhat shorter.
Use clean up the use of testing.T in TempFile - it is not used.
Make the cache memory bounded, by using a LRU cache. Also split the
cache in a positive and negative one - each with its own controls.
Extend the cache stanza to allow for this:
cache {
positive limit [ttl]
negative limit [ttl]
}
is now possible. This also add a cache_test.go in the toplevel test/
directory that exercises the caching path.
Fixes#260
This fix updates .travis.yml and Makefile for several places:
- Remove unneeded `docker pull gcr.io/google_containers/hyperkube-amd64:v1.2.4` (only v1.3.7 was used)
- Use docker to deploy etcd (insteadof downloading etcd binary).
- Merge `make testk8s` and `make testk8s-setup` (no need to have multiple targets for a couple of tests)
- Set version of etcd and kubernetes in .travis.yml (so that it is easy to update new version in the future)
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This fix moves the content of `.coverage.sh` to the Makefile
and creates a target of `make coverage`. This cleans up as
there is really no need to have a redundant script for
simple coverage test.
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
This fix cleans up `.travis.yml` and use `go_import_path`
to replace the customerized script for go import path
(in case the build is from a forked repo).
Signed-off-by: Yong Tang <yong.tang.github@outlook.com>
* Added TLS to k8s client
Added options for TLS kubernetes client connection.
* Fix k8s TLS config option parsing
Brings config option parsing for kubernetes TLS in line with recent changes.
* Put TLS config on one line
Put kubernetes tls config on one line to match style established in etcd tls config.
* Add tls option to README