Rename to Traefik Mesh

This commit is contained in:
Kevin Pollet
2020-09-16 18:12:04 +02:00
committed by GitHub
parent b440989708
commit 66f6556c96
153 changed files with 1637 additions and 1260 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
---
name: Bug Report
about: Create a report to help us improve Maesh
about: Create a report to help us improve Traefik Mesh.
---
<!-- PLEASE FOLLOW THE ISSUE TEMPLATE TO HELP TRIAGE AND SUPPORT! -->
@@ -29,7 +29,7 @@ HOW TO WRITE A GOOD BUG REPORT?
### Output of controller log: (_What version of Maesh are you using?_)
### Output of controller log: (_What version of Traefik Mesh are you using?_)
<!---
`latest` is not considered as a valid version.
+1
View File
@@ -3,3 +3,4 @@ contact_links:
- name: Question
about: Please ask and answer questions here.
url: https://community.containo.us/c/maesh
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: Feature Request
about: Propose a change to Maesh!
about: Propose a change to Traefik Mesh!
---
<!-- ⚠️ If you do not respect this template your issue will be closed. -->
+2 -3
View File
@@ -9,11 +9,10 @@
*.log
*.exe
cover.out
maesh
!maesh/
traefik-mesh
/dist/
.vscode
vendor
pages/
maesh-gh-pages*
mesh-gh-pages*
*.zip
+7 -7
View File
@@ -1,16 +1,16 @@
project_name: maesh
project_name: traefik-mesh
builds:
- binary: maesh
- binary: traefik-mesh
main: ./cmd/maesh/maesh.go
main: ./cmd/mesh/mesh.go
env:
- CGO_ENABLED=0
ldflags:
- -s -w
- -X github.com/containous/maesh/pkg/version.Version={{.Version}}
- -X github.com/containous/maesh/pkg/version.Commit={{.Commit}}
- -X github.com/containous/maesh/pkg/version.Date={{.Date}}
- -X github.com/traefik/mesh/pkg/version.Version={{.Version}}
- -X github.com/traefik/mesh/pkg/version.Commit={{.Commit}}
- -X github.com/traefik/mesh/pkg/version.Date={{.Date}}
goos:
- linux
- freebsd
@@ -30,7 +30,7 @@ builds:
goarch: arm64
archives:
- id: maesh
- id: traefik-mesh
name_template: '{{ .ProjectName }}_v{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
format: tar.gz
files:
+7 -7
View File
@@ -1,5 +1,5 @@
version: v1.0
name: Maesh Pipeline
name: Traefik Mesh Pipeline
agent:
machine:
@@ -33,9 +33,9 @@ blocks:
- name: Build and check
commands:
- make check build
- cache store maesh-dist-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID dist
- docker save containous/maesh:latest > maesh-img.tar
- cache store maesh-img-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID maesh-img.tar
- cache store traefik-mesh-dist-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID dist
- docker save traefik/mesh:latest > traefik-mesh-img.tar
- cache store traefik-mesh-img-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID traefik-mesh-img.tar
- name: Unit Tests
skip:
@@ -62,9 +62,9 @@ blocks:
- sudo semgo go1.15
- checkout
- cache restore
- cache restore maesh-dist-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID
- cache restore maesh-img-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID
- docker load < maesh-img.tar
- cache restore traefik-mesh-dist-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID
- cache restore traefik-mesh-img-$SEMAPHORE_GIT_BRANCH-$SEMAPHORE_WORKFLOW_ID
- docker load < traefik-mesh-img.tar
jobs:
- name: ACL Enabled Suite
commands:
+4 -4
View File
@@ -47,10 +47,10 @@ before_deploy:
if ! [ "$BEFORE_DEPLOY_RUN" ]; then
export BEFORE_DEPLOY_RUN=1;
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin;
curl -sfL https://raw.githubusercontent.com/containous/structor/master/godownloader.sh | bash -s -- -b "${GOPATH}/bin" ${STRUCTOR_VERSION};
curl -sfL https://raw.githubusercontent.com/traefik/structor/master/godownloader.sh | bash -s -- -b "${GOPATH}/bin" ${STRUCTOR_VERSION};
curl -sSfL https://raw.githubusercontent.com/traefik/mixtus/master/godownloader.sh | sh -s -- -b "${GOPATH}/bin" ${MIXTUS_VERSION};
structor -o containous -r maesh --dockerfile-url="https://raw.githubusercontent.com/containous/maesh/master/docs/docs.Dockerfile" --menu.js-url="https://raw.githubusercontent.com/containous/structor/master/traefik-menu.js.gotmpl" --rqts-url="https://raw.githubusercontent.com/containous/structor/master/requirements-override.txt" --force-edit-url --exp-branch=master --debug;
mixtus --dst-doc-path="./mesh" --dst-owner=traefik --dst-repo-name=doc --git-user-email="30906710+traefiker@users.noreply.github.com" --git-user-name=traefiker --src-doc-path="./site" --src-owner=containous --src-repo-name=maesh;
structor -o traefik -r mesh --dockerfile-url="https://raw.githubusercontent.com/traefik/mesh/master/docs/docs.Dockerfile" --menu.js-url="https://raw.githubusercontent.com/traefik/structor/master/traefik-menu.js.gotmpl" --rqts-url="https://raw.githubusercontent.com/traefik/structor/master/requirements-override.txt" --force-edit-url --exp-branch=master --debug;
mixtus --dst-doc-path="./mesh" --dst-owner=traefik --dst-repo-name=doc --git-user-email="30906710+traefiker@users.noreply.github.com" --git-user-name=traefiker --src-doc-path="./site" --src-owner=traefik --src-repo-name=mesh;
fi
# Copy helm packages
- cp -r pages/charts/. site/charts
@@ -94,5 +94,5 @@ deploy:
skip_cleanup: true
keep_history: true
on:
repo: containous/maesh
repo: traefik/mesh
all_branches: true
+15 -17
View File
@@ -1,35 +1,33 @@
# Contributing
Maesh is an open source project, and your feedback and contributions
are needed and always welcome.
Traefik Mesh is an open source project, and your feedback and contributions are needed and always welcome.
[Issues] and [Pull Requests] are opened at https://github.com/containous/maesh.
[Issues] and [Pull Requests] are opened at https://github.com/traefik/mesh.
Non trivial changes should be discussed with the project maintainers by
opening a [Feature Request] clearly explaining rationale, background
and possible implementation ideas. Feel free to provide code in such
discussions.
Non trivial changes should be discussed with the project maintainers by opening a [Feature Request] clearly explaining rationale,
background and possible implementation ideas. Feel free to provide code in such discussions.
Once the proposal is approved, a Pull Request can be opened. If you want
to provide early visibility to reviewers, create a [Draft Pull Request].
Once the proposal is approved, a Pull Request can be opened. If you want to provide early visibility to reviewers, create a [Draft Pull Request].
[Issues]: https://github.com/containous/maesh/issues
[Pull Requests]: https://github.com/containous/maesh/issues
[Feature Request]: https://github.com/containous/maesh/issues/new?template=feature_request.md
[Issues]: https://github.com/traefik/mesh/issues
[Pull Requests]: https://github.com/traefik/mesh/issues
[Feature Request]: https://github.com/traefik/mesh/issues/new?template=feature_request.md
[Draft Pull Request]: https://github.blog/2019-02-14-introducing-draft-pull-requests/
## Release Process
Maesh follows the [semver](https://semver.org/) scheme when releasing new versions.
Traefik Mesh follows the [semver](https://semver.org/) scheme when releasing new versions.
Therefore, all PR's (except fixing a bug in a specific version) should be made against the `master` branch. If you're attempting to fix a bug in an already released version, please use the correct branch of that release (e.g. `v1.1`). All bug-fixes made to a specific branch will be backported to master, prior to releasing a new (major / minor) version. Patch releases will be made out of the version branch.
Therefore, all PR's (except fixing a bug in a specific version) should be made against the `master` branch.
If you're attempting to fix a bug in an already released version, please use the correct branch of that release (e.g. `v1.1`).
All bug-fixes made to a specific branch will be backported to master, prior to releasing a new (major / minor) version. Patch releases will be made out of the version branch.
### Release steps
In order to release a new version of Maesh, the following steps have to be done:
In order to release a new version of Traefik Mesh, the following steps have to be done:
* Create a Prepare release PR updating the chart version and app version to upcoming release
* Prepare a list of release notes for the #maesh
* Prepare a list of release notes for the #traefik-mesh
* Merge Prepare release PR
* Create and push a tag on the release commit
* Create a new release branch (v1.x) on upstream to allow versioned docs to be built
* Create a new release branch (v1.x) on upstream to allow versioned docs to be built
+3 -4
View File
@@ -1,4 +1,3 @@
# Let's build maesh for linux-amd64
FROM golang:1.15-alpine AS base-image
# Package dependencies
@@ -16,7 +15,7 @@ RUN apk --no-cache --no-progress add \
&& update-ca-certificates \
&& rm -rf /var/cache/apk/*
WORKDIR /go/src/github.com/containous/maesh
WORKDIR /go/src/github.com/traefik/mesh
# Download goreleaser binary to bin folder in $GOPATH
RUN curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | sh
@@ -42,6 +41,6 @@ RUN addgroup -g 1000 -S app && \
adduser -u 1000 -S app -G app
COPY --from=base-image /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
COPY --from=maker /go/src/github.com/containous/maesh/dist/maesh /app/
COPY --from=maker /go/src/github.com/traefik/mesh/dist/traefik-mesh /app/
ENTRYPOINT ["/app/maesh"]
ENTRYPOINT ["/app/traefik-mesh"]
+2 -1
View File
@@ -186,7 +186,8 @@
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2019 Containous SAS
Copyright 2020 Containous SAS
Copyright 2020 Traefik Labs
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
+16 -16
View File
@@ -1,11 +1,11 @@
DOCKER_IMAGE_NAME := containous/maesh
DOCKER_IMAGE_NAME := traefik/mesh
UNAME := $(shell uname)
SRCS = $(shell git ls-files '*.go' | grep -v '^vendor/')
BINARY_NAME = maesh
BINARY_NAME = traefik-mesh
DIST_DIR = $(CURDIR)/dist
DIST_DIR_MAESH = $(DIST_DIR)/$(BINARY_NAME)
PROJECT ?= github.com/containous/$(BINARY_NAME)
DIST_DIR_TRAEFIK_MESH = $(DIST_DIR)/$(BINARY_NAME)
PROJECT ?= github.com/traefik/mesh
TAG_NAME ?= $(shell git tag -l --contains HEAD)
SHA := $(shell git rev-parse --short HEAD)
@@ -22,7 +22,7 @@ $(DIST_DIR):
mkdir -p $(DIST_DIR)
clean:
rm -rf $(CURDIR)/dist/ cover.out $(CURDIR)/pages $(CURDIR)/gh-pages.zip $(CURDIR)/maesh-gh-pages
rm -rf $(CURDIR)/dist/ cover.out $(CURDIR)/pages $(CURDIR)/gh-pages.zip $(CURDIR)/mesh-gh-pages
# Static linting of source files. See .golangci.toml for options
local-check: $(DIST_DIR) helm-lint
@@ -30,11 +30,11 @@ local-check: $(DIST_DIR) helm-lint
# Local commands
local-build: $(DIST_DIR)
CGO_ENABLED=0 go build -o ${DIST_DIR_MAESH} -ldflags="-s -w \
-X github.com/containous/$(BINARY_NAME)/pkg/version.Version=$(VERSION) \
-X github.com/containous/$(BINARY_NAME)/pkg/version.Commit=$(SHA) \
-X github.com/containous/$(BINARY_NAME)/pkg/version.Date=$(BUILD_DATE)" \
$(CURDIR)/cmd/$(BINARY_NAME)/*.go
CGO_ENABLED=0 go build -o ${DIST_DIR_TRAEFIK_MESH} -ldflags="-s -w \
-X github.com/traefik/mesh/pkg/version.Version=$(VERSION) \
-X github.com/traefik/mesh/pkg/version.Commit=$(SHA) \
-X github.com/traefik/mesh/pkg/version.Date=$(BUILD_DATE)" \
$(CURDIR)/cmd/mesh/mesh.go
local-test: clean
go test -v -cover ./...
@@ -105,19 +105,19 @@ helm:
@command -v helm >/dev/null 2>&1 || curl -L https://git.io/get_helm.sh | bash -s -- -v v3.0.1
helm-lint: helm
helm lint helm/chart/maesh
helm lint helm/chart/mesh
k3d:
@command -v k3d >/dev/null 2>&1 || curl -s https://raw.githubusercontent.com/rancher/k3d/v3.0.1/install.sh | TAG=v3.0.1 bash
pages:
mkdir -p $(CURDIR)/pages
rm -rf $(CURDIR)/gh-pages.zip $(CURDIR)/maesh-gh-pages
rm -rf $(CURDIR)/gh-pages.zip $(CURDIR)/mesh-gh-pages
curl -sSLO https://$(PROJECT)/archive/gh-pages.zip
unzip $(CURDIR)/gh-pages.zip
# We only keep the directory "charts" so documentation may remove files
cp -r $(CURDIR)/maesh-gh-pages/charts $(CURDIR)/pages/
rm -rf $(CURDIR)/gh-pages.zip $(CURDIR)/maesh-gh-pages
cp -r $(CURDIR)/mesh-gh-pages/charts $(CURDIR)/pages/
rm -rf $(CURDIR)/gh-pages.zip $(CURDIR)/mesh-gh-pages
docs-package: pages
make -C $(CURDIR)/docs
@@ -125,8 +125,8 @@ docs-package: pages
cp $(CURDIR)/docs/CNAME $(CURDIR)/pages/CNAME
helm-package: helm-lint pages
helm package --app-version $(TAG_NAME) $(CURDIR)/helm/chart/maesh
cp helm/chart/maesh/README.md index.md
helm package --app-version $(TAG_NAME) $(CURDIR)/helm/chart/mesh
cp helm/chart/mesh/README.md index.md
mkdir -p $(CURDIR)/pages/charts
mv *.tgz index.md $(CURDIR)/pages/charts/
helm repo index $(CURDIR)/pages/charts/
+17 -18
View File
@@ -1,23 +1,22 @@
<p align="center">
<img width="400" src="docs/content/assets/img/maesh.png" alt="Maesh" title="Maesh" />
<img width="400" src="docs/content/assets/img/traefik-mesh.png" alt="Traefik Mesh" title="Traefik Mesh" />
</p>
[![Travis CI Build Status](https://travis-ci.com/containous/maesh.svg?branch=master)](https://travis-ci.com/containous/maesh)
[![Semaphore CI Build Status](https://containous.semaphoreci.com/badges/maesh/branches/master.svg?style=shields)](https://containous.semaphoreci.com/projects/maesh)
[![Travis CI Build Status](https://travis-ci.com/traefik/mesh.svg?branch=master)](https://travis-ci.com/traefik/mesh)
[![Semaphore CI Build Status](https://traefik.semaphoreci.com/badges/mesh/branches/master.svg?style=shields)](https://traefik.semaphoreci.com/projects/mesh)
[![Docs](https://img.shields.io/badge/docs-current-brightgreen.svg)](https://docs.mae.sh)
[![Go Report Card](https://goreportcard.com/badge/github.com/containous/maesh)](https://goreportcard.com/report/github.com/containous/maesh)
[![Release](https://img.shields.io/github/tag-date/containous/maesh.svg)](https://github.com/containous/maesh/releases)
[![GitHub](https://img.shields.io/github/license/containous/maesh)](https://github.com/containous/maesh/blob/master/LICENSE)
[![Go Report Card](https://goreportcard.com/badge/github.com/traefik/mesh)](https://goreportcard.com/report/github.com/traefik/mesh)
[![Release](https://img.shields.io/github/tag-date/traefik/mesh.svg)](https://github.com/traefik/mesh/releases)
[![GitHub](https://img.shields.io/github/license/traefik/mesh)](https://github.com/traefik/mesh/blob/master/LICENSE)
[![Discourse status](https://img.shields.io/discourse/https/community.containo.us/status?label=Community&style=social)](https://community.containo.us/c/maesh)
## Maesh: Simpler Service Mesh
## Traefik Mesh: Simpler Service Mesh
Maesh is a simple, yet full-featured service mesh.
Traefik Mesh is a simple, yet full-featured service mesh.
It is container-native and fits as your de-facto service mesh in your Kubernetes cluster.
It supports the latest Service Mesh Interface specification [SMI](https://smi-spec.io) that facilitates integration with pre-existing solution.
Moreover, Maesh is opt-in by default,
which means that your existing services are unaffected until you decide to add them to the mesh.
Moreover, Traefik Mesh is opt-in by default, which means that your existing services are unaffected until you decide to add them to the mesh.
<p align="center">
<a href="https://smi-spec.io" target="_blank"><img width="150" src="docs/content/assets/img/smi.png" alt="SMI" title="SMI" /></a>
@@ -26,15 +25,15 @@ which means that your existing services are unaffected until you decide to add t
## Non-Invasive Service Mesh
Maesh does not use any sidecar container but handles routing through proxy endpoints running on each node.
Traefik Mesh does not use any sidecar container but handles routing through proxy endpoints running on each node.
The mesh controller runs in a dedicated pod and handles all the configuration parsing and deployment to the proxy nodes.
Maesh supports multiple configuration options: annotations on user service objects, and SMI objects.
Not using sidecars means that Maesh does not modify your Kubernetes objects, and does not modify your traffic without your knowledge.
Using the Maesh endpoints is all that is required.
Traefik Mesh supports multiple configuration options: annotations on user service objects, and SMI objects.
Not using sidecars means that Traefik Mesh does not modify your Kubernetes objects, and does not modify your traffic without your knowledge.
Using the Traefik Mesh endpoints is all that is required.
<p align="center">
<img width="400" src="docs/content/assets/img/before-maesh-graphic.png" alt="Maesh" title="Maesh" />
<img width="400" src="docs/content/assets/img/after-maesh-graphic.png" alt="Maesh" title="Maesh" />
<img width="400" src="docs/content/assets/img/before-traefik-mesh-graphic.png" alt="Traefik Mesh" title="Traefik Mesh" />
<img width="400" src="docs/content/assets/img/after-traefik-mesh-graphic.png" alt="Traefik Mesh" title="Traefik Mesh" />
</p>
## Prerequisites
@@ -48,9 +47,9 @@ To run this app, you require the following:
## Install (Helm v3 only)
```shell
helm repo add maesh https://containous.github.io/maesh/charts
helm repo add traefik-mesh https://traefik.github.io/mesh/charts
helm repo update
helm install maesh maesh/maesh
helm install traefik-mesh traefik-mesh/traefik-mesh
```
You can find the complete documentation at https://docs.mae.sh.
+5 -5
View File
@@ -4,9 +4,9 @@ import (
"context"
"fmt"
"github.com/containous/maesh/cmd"
"github.com/containous/maesh/pkg/cleanup"
"github.com/containous/maesh/pkg/k8s"
"github.com/traefik/mesh/cmd"
"github.com/traefik/mesh/pkg/cleanup"
"github.com/traefik/mesh/pkg/k8s"
"github.com/traefik/paerser/cli"
)
@@ -14,7 +14,7 @@ import (
func NewCmd(cConfig *cmd.CleanupConfiguration, loaders []cli.ResourceLoader) *cli.Command {
return &cli.Command{
Name: "cleanup",
Description: `Removes Maesh shadow services from a Kubernetes cluster.`,
Description: `Removes Traefik Mesh shadow services from a Kubernetes cluster.`,
Configuration: cConfig,
Run: func(_ []string) error {
return cleanupCommand(cConfig)
@@ -31,7 +31,7 @@ func cleanupCommand(cConfig *cmd.CleanupConfiguration) error {
return fmt.Errorf("could not create logger: %w", err)
}
logger.Debug("Starting maesh cleanup...")
logger.Debug("Starting cleanup...")
logger.Debugf("Using masterURL: %q", cConfig.MasterURL)
logger.Debugf("Using kubeconfig: %q", cConfig.KubeConfig)
+8 -8
View File
@@ -4,8 +4,8 @@ import (
"os"
)
// MaeshConfiguration wraps the static configuration and extra parameters.
type MaeshConfiguration struct {
// TraefikMeshConfiguration wraps the static configuration and extra parameters.
type TraefikMeshConfiguration struct {
ConfigFile string `description:"Configuration file to use. If specified all other flags are ignored." export:"true"`
KubeConfig string `description:"Path to a kubeconfig. Only required if out-of-cluster." export:"true"`
MasterURL string `description:"The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster." export:"true"`
@@ -15,7 +15,7 @@ type MaeshConfiguration struct {
ACL bool `description:"Enable ACL mode." export:"true"`
SMI bool `description:"Enable SMI operation, deprecated, use --acl instead." export:"true"`
DefaultMode string `description:"Default mode for mesh services." export:"true"`
Namespace string `description:"The namespace that maesh is installed in." export:"true"`
Namespace string `description:"The namespace that Traefik Mesh is installed in." export:"true"`
WatchNamespaces []string `description:"Namespaces to watch." export:"true"`
IgnoreNamespaces []string `description:"Namespaces to ignore." export:"true"`
APIPort int32 `description:"API port for the controller." export:"true"`
@@ -25,9 +25,9 @@ type MaeshConfiguration struct {
LimitUDPPort int32 `description:"Number of UDP ports allocated." export:"true"`
}
// NewMaeshConfiguration creates a MaeshConfiguration with default values.
func NewMaeshConfiguration() *MaeshConfiguration {
return &MaeshConfiguration{
// NewTraefikMeshConfiguration creates a TraefikMeshConfiguration with default values.
func NewTraefikMeshConfiguration() *TraefikMeshConfiguration {
return &TraefikMeshConfiguration{
ConfigFile: "",
KubeConfig: os.Getenv("KUBECONFIG"),
LogLevel: "error",
@@ -53,7 +53,7 @@ type PrepareConfiguration struct {
LogLevel string `description:"The log level." export:"true"`
LogFormat string `description:"The log format." export:"true"`
Debug bool `description:"Debug mode, deprecated, use --loglevel=debug instead." export:"true"`
Namespace string `description:"The namespace that maesh is installed in." export:"true"`
Namespace string `description:"The namespace that Traefik Mesh is installed in." export:"true"`
ClusterDomain string `description:"Your internal K8s cluster domain." export:"true"`
SMI bool `description:"Enable SMI operation, deprecated, use --acl instead." export:"true"`
ACL bool `description:"Enable ACL mode." export:"true"`
@@ -77,7 +77,7 @@ type CleanupConfiguration struct {
ConfigFile string `description:"Configuration file to use. If specified all other flags are ignored." export:"true"`
KubeConfig string `description:"Path to a kubeconfig. Only required if out-of-cluster." export:"true"`
MasterURL string `description:"The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster." export:"true"`
Namespace string `description:"The namespace that maesh is installed in." export:"true"`
Namespace string `description:"The namespace that Traefik Mesh is installed in." export:"true"`
LogLevel string `description:"The log level." export:"true"`
LogFormat string `description:"The log format." export:"true"`
}
+38 -6
View File
@@ -14,21 +14,39 @@ import (
"github.com/traefik/paerser/parser"
)
const maeshPrefix = "MAESH_"
const (
meshPrefix = "MESH_"
maeshPrefix = "MAESH_"
traefikMeshPrefix = "TRAEFIK_MESH_"
)
// EnvLoader loads a configuration from all the environment variables prefixed with "MAESH_".
// EnvLoader loads a configuration from all the environment variables.
type EnvLoader struct{}
// Load loads the command's configuration from the environment variables.
// Load loads the command's configuration from the environment variables prefixed with "TRAEFIK_MESH_" or "MAESH_".
// The "MAESH_" prefix is deprecated and will be removed in the next major release.
// If "TRAEFIK_MESH_" and "MAESH_" env variables are mixed up an error is returned.
// As it is not possible to have a prefix with multiple "_" everything is normalized to "MESH_" under the hood for the decoding.
func (e *EnvLoader) Load(_ []string, cmd *cli.Command) (bool, error) {
logger := logrus.StandardLogger()
vars := env.FindPrefixedEnvVars(os.Environ(), maeshPrefix, cmd.Configuration)
traefikMeshVars := findAndNormalizePrefixedEnvVars(traefikMeshPrefix, cmd.Configuration)
maeshVars := findAndNormalizePrefixedEnvVars(maeshPrefix, cmd.Configuration)
if len(maeshVars) > 0 && len(traefikMeshVars) > 0 {
return false, fmt.Errorf("environment variable prefixed by %q cannot be mixed with variable prefixed by %q", maeshPrefix, traefikMeshPrefix)
}
vars := traefikMeshVars
if len(maeshVars) > 0 {
vars = maeshVars
}
if len(vars) == 0 {
return false, nil
}
if err := env.Decode(vars, maeshPrefix, cmd.Configuration); err != nil {
if err := env.Decode(vars, meshPrefix, cmd.Configuration); err != nil {
logger.Debug("environment variables", strings.Join(vars, ", "))
return false, fmt.Errorf("failed to decode configuration from environment variables: %w ", err)
}
@@ -38,6 +56,16 @@ func (e *EnvLoader) Load(_ []string, cmd *cli.Command) (bool, error) {
return true, nil
}
func findAndNormalizePrefixedEnvVars(prefix string, config interface{}) []string {
vars := env.FindPrefixedEnvVars(os.Environ(), prefix, config)
for _, v := range vars {
vars = append(vars, strings.Replace(v, prefix, meshPrefix, 1))
}
return vars
}
// FileLoader loads a configuration from a file.
type FileLoader struct{}
@@ -72,9 +100,13 @@ func (f *FileLoader) Load(args []string, cmd *cli.Command) (bool, error) {
// loadConfigFiles tries to decode the given configuration file and all default locations for the configuration file.
// It stops as soon as decoding one of them is successful.
// The default maesh locations are deprecated and will be removed in a future major release.
func loadConfigFiles(configFile string, element interface{}) (string, error) {
finder := cli.Finder{
BasePaths: []string{"/etc/maesh/maesh", "$XDG_CONFIG_HOME/maesh", "$HOME/.config/maesh", "./maesh"},
BasePaths: []string{
"/etc/maesh/maesh", "$XDG_CONFIG_HOME/maesh", "$HOME/.config/maesh", "./maesh",
"/etc/traefik-mesh/traefik-mesh", "$XDG_CONFIG_HOME/traefik-mesh", "$HOME/.config/traefik-mesh", "./traefik-mesh",
},
Extensions: []string{"toml", "yaml", "yml"},
}
+21 -21
View File
@@ -9,14 +9,14 @@ import (
"sync"
"time"
"github.com/containous/maesh/cmd"
"github.com/containous/maesh/cmd/cleanup"
"github.com/containous/maesh/cmd/prepare"
"github.com/containous/maesh/cmd/version"
"github.com/containous/maesh/pkg/api"
"github.com/containous/maesh/pkg/controller"
"github.com/containous/maesh/pkg/k8s"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/cmd"
"github.com/traefik/mesh/cmd/cleanup"
"github.com/traefik/mesh/cmd/prepare"
"github.com/traefik/mesh/cmd/version"
"github.com/traefik/mesh/pkg/api"
"github.com/traefik/mesh/pkg/controller"
"github.com/traefik/mesh/pkg/k8s"
"github.com/traefik/paerser/cli"
)
@@ -27,37 +27,37 @@ const (
)
func main() {
maeshConfig := cmd.NewMaeshConfiguration()
maeshLoaders := []cli.ResourceLoader{&cmd.FileLoader{}, &cli.FlagLoader{}, &cmd.EnvLoader{}}
traefikMeshConfig := cmd.NewTraefikMeshConfiguration()
traefikMeshLoaders := []cli.ResourceLoader{&cmd.FileLoader{}, &cli.FlagLoader{}, &cmd.EnvLoader{}}
cmdMaesh := &cli.Command{
Name: "maesh",
Description: `maesh`,
Configuration: maeshConfig,
Resources: maeshLoaders,
cmdTraefikMesh := &cli.Command{
Name: "traefik-mesh",
Description: `traefik-mesh`,
Configuration: traefikMeshConfig,
Resources: traefikMeshLoaders,
Run: func(_ []string) error {
return maeshCommand(maeshConfig)
return traefikMeshCommand(traefikMeshConfig)
},
}
prepareConfig := cmd.NewPrepareConfiguration()
if err := cmdMaesh.AddCommand(prepare.NewCmd(prepareConfig, maeshLoaders)); err != nil {
if err := cmdTraefikMesh.AddCommand(prepare.NewCmd(prepareConfig, traefikMeshLoaders)); err != nil {
stdlog.Println(err)
os.Exit(1)
}
cleanupConfig := cmd.NewCleanupConfiguration()
if err := cmdMaesh.AddCommand(cleanup.NewCmd(cleanupConfig, maeshLoaders)); err != nil {
if err := cmdTraefikMesh.AddCommand(cleanup.NewCmd(cleanupConfig, traefikMeshLoaders)); err != nil {
stdlog.Println(err)
os.Exit(1)
}
if err := cmdMaesh.AddCommand(version.NewCmd()); err != nil {
if err := cmdTraefikMesh.AddCommand(version.NewCmd()); err != nil {
stdlog.Println(err)
os.Exit(1)
}
if err := cli.Execute(cmdMaesh); err != nil {
if err := cli.Execute(cmdTraefikMesh); err != nil {
stdlog.Println(err)
os.Exit(1)
}
@@ -65,7 +65,7 @@ func main() {
os.Exit(0)
}
func maeshCommand(config *cmd.MaeshConfiguration) error {
func traefikMeshCommand(config *cmd.TraefikMeshConfiguration) error {
ctx := cmd.ContextWithSignal(context.Background())
log, err := cmd.NewLogger(config.LogFormat, config.LogLevel, config.Debug)
@@ -73,7 +73,7 @@ func maeshCommand(config *cmd.MaeshConfiguration) error {
return fmt.Errorf("could not create logger: %w", err)
}
log.Debug("Starting maesh controller...")
log.Debug("Starting controller...")
log.Debugf("Using masterURL: %q", config.MasterURL)
log.Debugf("Using kubeconfig: %q", config.KubeConfig)
+4 -4
View File
@@ -4,9 +4,9 @@ import (
"context"
"fmt"
"github.com/containous/maesh/cmd"
"github.com/containous/maesh/pkg/dns"
"github.com/containous/maesh/pkg/k8s"
"github.com/traefik/mesh/cmd"
"github.com/traefik/mesh/pkg/dns"
"github.com/traefik/mesh/pkg/k8s"
"github.com/traefik/paerser/cli"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@@ -32,7 +32,7 @@ func prepareCommand(pConfig *cmd.PrepareConfiguration) error {
return fmt.Errorf("could not create logger: %w", err)
}
log.Debug("Starting maesh prepare...")
log.Debug("Starting prepare...")
log.Debugf("Using masterURL: %q", pConfig.MasterURL)
log.Debugf("Using kubeconfig: %q", pConfig.KubeConfig)
+2 -2
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"runtime"
"github.com/containous/maesh/pkg/version"
"github.com/traefik/mesh/pkg/version"
"github.com/traefik/paerser/cli"
)
@@ -21,7 +21,7 @@ platform : %s/%s
func NewCmd() *cli.Command {
return &cli.Command{
Name: "version",
Description: `Shows the current Maesh version.`,
Description: `Shows the current Traefik Mesh version.`,
Configuration: nil,
Run: func(_ []string) error {
printVersion()
+1 -1
View File
@@ -1 +1 @@
docs.mae.sh
+10 -10
View File
@@ -1,12 +1,12 @@
#######
# This Makefile contains all targets related to the documentation
# This Makefile contains all targets related to the documentation.
#######
DOCS_VERIFY_SKIP ?= false
DOCS_LINT_SKIP ?= false
MAESH_DOCS_BUILD_IMAGE ?= maesh-docs
MAESH_DOCS_CHECK_IMAGE ?= $(MAESH_DOCS_BUILD_IMAGE)-check
TRAEFIK_MESH_DOCS_BUILD_IMAGE ?= traefik-mesh-docs
TRAEFIK_MESH_DOCS_CHECK_IMAGE ?= $(TRAEFIK_MESH_DOCS_BUILD_IMAGE)-check
SITE_DIR := $(CURDIR)/site
@@ -19,28 +19,28 @@ docs: clean image lint build verify
# Writer Mode: build and serve docs on http://localhost:8000 with livereload
serve: image
docker run $(DOCKER_RUN_DOC_OPTS) $(MAESH_DOCS_BUILD_IMAGE) mkdocs serve
docker run $(DOCKER_RUN_DOC_OPTS) $(TRAEFIK_MESH_DOCS_BUILD_IMAGE) mkdocs serve
# Utilities Targets for each step
image:
docker build -t $(MAESH_DOCS_BUILD_IMAGE) -f docs.Dockerfile ./
docker build -t $(TRAEFIK_MESH_DOCS_BUILD_IMAGE) -f docs.Dockerfile ./
build: image
docker run $(DOCKER_RUN_DOC_OPTS) $(MAESH_DOCS_BUILD_IMAGE) sh -c "mkdocs build \
docker run $(DOCKER_RUN_DOC_OPTS) $(TRAEFIK_MESH_DOCS_BUILD_IMAGE) sh -c "mkdocs build \
&& chown -R $(shell id -u):$(shell id -g) ./site"
verify: build
@if [ "$(DOCS_VERIFY_SKIP)" != "true" ]; then \
docker build -t $(MAESH_DOCS_CHECK_IMAGE) -f check.Dockerfile ./; \
docker run --rm -v $(CURDIR):/app $(MAESH_DOCS_CHECK_IMAGE) /verify.sh; \
docker build -t $(TRAEFIK_MESH_DOCS_CHECK_IMAGE) -f check.Dockerfile ./; \
docker run --rm -v $(CURDIR):/app $(TRAEFIK_MESH_DOCS_CHECK_IMAGE) /verify.sh; \
else \
echo "DOCS_VERIFY_SKIP is true: no verification done."; \
fi
lint:
@if [ "$(DOCS_LINT_SKIP)" != "true" ]; then \
docker build -t $(MAESH_DOCS_CHECK_IMAGE) -f check.Dockerfile ./ && \
docker run --rm -v $(CURDIR):/app $(MAESH_DOCS_CHECK_IMAGE) /lint.sh; \
docker build -t $(TRAEFIK_MESH_DOCS_CHECK_IMAGE) -f check.Dockerfile ./ && \
docker run --rm -v $(CURDIR):/app $(TRAEFIK_MESH_DOCS_CHECK_IMAGE) /lint.sh; \
else \
echo "DOCS_LINT_SKIP is true: no linting done."; \
fi
+7 -7
View File
@@ -1,7 +1,7 @@
# API
Maesh includes a built-in API that can be used for debugging purposes.
This can be useful when Maesh is not working as intended.
Traefik Mesh includes a built-in API that can be used for debugging purposes.
This can be useful when Traefik Mesh is not working as intended.
The API is accessed via the controller pod, and for security reasons is not exposed via service.
The API can be accessed by making a `GET` request to `http://<control pod IP>:9000` combined with one of the following paths:
@@ -14,16 +14,16 @@ This endpoint provides raw json of the current configuration built by the contro
## `/api/status/nodes`
This endpoint provides a json array containing some details about the readiness of the Maesh nodes visible by the controller
This endpoint provides a json array containing some details about the readiness of the Traefik Mesh nodes visible by the controller.
This endpoint will still return a 200 if there are no visible nodes.
## `/api/status/node/{maesh-pod-name}/configuration`
## `/api/status/node/{traefik-mesh-pod-name}/configuration`
This endpoint provides raw json of the current configuration on the Maesh node with the pod name given in `{maesh-pod-name}`.
This endpoint provides raw json of the current configuration on the Traefik Mesh node with the pod name given in `{traefik-mesh-pod-name}`.
This endpoint provides a 404 response if the pod cannot be found, or other non-200 status codes on other errors.
If errors are encountered, the error will be returned in the body, and logged on the controller.
## `/api/status/readiness`
This endpoint returns a 200 response if the controller successfully deployed a configuration to all Maesh nodes, and Maesh
is ready for use. Otherwise, it will return a 500.
This endpoint returns a 200 response if the controller has successfully started.
Otherwise, it will return a 500.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.2 KiB

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 7.6 KiB

Before

Width:  |  Height:  |  Size: 267 KiB

After

Width:  |  Height:  |  Size: 267 KiB

+8 -7
View File
@@ -1,18 +1,19 @@
# Compatibility
Maesh supports [similiar to Kubernetes](https://kubernetes.io/docs/setup/release/version-skew-policy/#supported-versions) at least the latest 3 minor versions of Kubernetes, therefore currently:
Traefik Mesh supports, [similar to Kubernetes](https://kubernetes.io/docs/setup/release/version-skew-policy/#supported-versions), at least the latest three minor versions of Kubernetes, therefore currently:
* 1.17
* 1.18
* 1.19
General functionality can not be guaranted for versions older than that. However, we expect it to work with Kubernetes down to 1.11 currently.
General functionality cannot be guaranted for versions older than that. However, we expect it to work with Kubernetes down to 1.11 currently.
## Compatibility by Features
Some of Maesh's features are only supported on certain Kubernetes versions. Please see the table below.
Some of Traefik Mesh's features are only supported on certain Kubernetes versions.
Please see the table below.
| Features | K8s 1.17 | K8s 1.18 | K8s 1.19 |
|-----------------------|----------|----------|----------|
| General functionality | ✔ | ✔ | ✔ |
| Service Topology | ✔ | ✔ | ✔ |
| Features | K8s 1.17 | K8s 1.18 | K8s 1.19 |
|-----------------------|----------|----------|----------|
| General functionality | ✔ | ✔ | ✔ |
| Service Topology | ✔ | ✔ | ✔ |
+17 -17
View File
@@ -1,6 +1,6 @@
# Configuration
The configuration for Maesh is broken down into two parts: the static configuration, and the dynamic configuration.
The configuration for Traefik Mesh is broken down into two parts: the static configuration, and the dynamic configuration.
The static configuration is configured when the service mesh is installed and is configured via the `values.yaml` file in the Helm install.
## Static configuration
@@ -15,13 +15,13 @@ The static configuration is configured when the service mesh is installed and is
- Tracing can be enabled.
- Access-Control List (ACL) mode can be enabled.
This configures Maesh to run in ACL mode, where all traffic is forbidden unless explicitly allowed via an SMI
This configures Traefik Mesh to run in ACL mode, where all traffic is forbidden unless explicitly allowed via an SMI
[TrafficTarget](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-access/v1alpha2/traffic-access.md#traffictarget). Please see
the [SMI Specification](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-access/v1alpha2/traffic-access.md) for more information.
## Dynamic configuration
Dynamic configuration can be provided to Maesh using annotations on Kubernetes services and via SMI objects.
Dynamic configuration can be provided to Traefik Mesh using annotations on Kubernetes services and via SMI objects.
| Features | ACL disabled | ACL enabled |
|-----------------------|--------------|-------------|
@@ -35,14 +35,14 @@ Dynamic configuration can be provided to Maesh using annotations on Kubernetes s
### Kubernetes Service Annotations
Annotations on services give the ability to configure how Maesh interprets them.
Annotations on services give the ability to configure how Traefik Mesh interprets them.
#### Traffic type
The traffic type can be configured by using the following annotation:
```yaml
maesh.containo.us/traffic-type: "http"
mesh.traefik.io/traffic-type: "http"
```
This annotation can be set to either `http`, `tcp` or `udp` and will specifies the mode for that service operation.
@@ -58,32 +58,32 @@ If this annotation is not present, the mesh service will operate in the default
The scheme used to define custom scheme for request:
```yaml
maesh.containo.us/scheme: "h2c"
mesh.traefik.io/scheme: "h2c"
```
This annotation can be set to either `http`, `https` or `h2c` and is available for `maesh.containo.us/traffic-type: "http"`.
This annotation can be set to either `http`, `https` or `h2c` and is available for `mesh.traefik.io/traffic-type: "http"`.
??? Note "Limitations"
Please keep in mind, that if you set the scheme to `https` your service needs to expose itself via HTTPS as there is no
mTLS in Maesh.
mTLS in Traefik Mesh.
#### Retry
Retries can be enabled by using the following annotation:
```yaml
maesh.containo.us/retry-attempts: "2"
mesh.traefik.io/retry-attempts: "2"
```
This annotation sets the number of retry attempts that Maesh will make if a network error occurs.
This annotation sets the number of retry attempts that Traefik Mesh will make if a network error occurs.
Please note that this value is a string, and needs to be quoted.
#### Circuit breaker
Circuit breaker can be enabled by using the following annotation:
```yaml
maesh.containo.us/circuit-breaker-expression: "Expression"
mesh.traefik.io/circuit-breaker-expression: "Expression"
```
This annotation sets the expression for circuit breaking.
@@ -97,8 +97,8 @@ All configuration options are available [here](https://docs.traefik.io/v2.0/midd
Rate limiting can be enabled by using the following annotations:
```yaml
maesh.containo.us/ratelimit-average: "100"
maesh.containo.us/ratelimit-burst: "200"
mesh.traefik.io/ratelimit-average: "100"
mesh.traefik.io/ratelimit-burst: "200"
```
These annotation sets average and burst requests per second limit for the service.
@@ -170,7 +170,7 @@ spec:
In this example, we grant access to all pods running with the service account `client` under the namespace `client` to the HTTP route `api` specified by on the group `server-routes` on all pods running with the service account `server` under the namespace `server`.
Any client running with the service account `client` under the `client` namespace accessing `server.server.maesh/api` is allowed to access the `/api` resource. Others will receive 404 answers from the Maesh node.
Any client running with the service account `client` under the `client` namespace accessing `server.server.traefik.mesh/api` is allowed to access the `/api` resource. Others will receive 404 answers from the Traefik Mesh node.
More information can be found [in the SMI specification](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-access/v1alpha2/traffic-access.md).
@@ -194,10 +194,10 @@ spec:
```
In this example, we define a traffic split for our server service between two versions of our server, v1 and v2.
`server.server.maesh` directs 80% of the traffic to the server-v1 pods, and 20% of the traffic to the server-v2 pods.
`server.server.traefik.mesh` directs 80% of the traffic to the server-v1 pods, and 20% of the traffic to the server-v2 pods.
More information can be found [in the SMI specification](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-split/v1alpha3/traffic-split.md).
#### Traffic Metrics
At the moment, Maesh does not implement the [Traffic Metrics specification](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-metrics/traffic-metrics-WD.md).
At the moment, Traefik Mesh does not implement the [Traffic Metrics specification](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-metrics/traffic-metrics-WD.md).
+20 -20
View File
@@ -1,22 +1,22 @@
# Building and Testing
So you want to build your own Maesh binary from the sources? Let's see how.
So you want to build your own Traefik Mesh binary from the sources? Let's see how.
## Building
To build Maesh from the sources you need either [Docker](https://github.com/docker/docker) and [make](https://www.gnu.org/software/make/manual/make.html),
To build Traefik Mesh from the sources you need either [Docker](https://github.com/docker/docker) and [make](https://www.gnu.org/software/make/manual/make.html),
or [Go](https://github.com/golang/go).
### With `Docker` and `make`
Maesh can be built from the sources by using the `make` command. This will create a binary for the Linux platform in
the `dist` directory and a Docker image:
Traefik Mesh can be built from the sources by using the `make` command.
This will create a binary for the Linux platform in the `dist` directory and a Docker image:
```bash
$ make
#[...]
Successfully tagged containous/maesh:latest
docker run --name=build -t "containous/maesh:latest" version
Successfully tagged traefik/mesh:latest
docker run --name=build -t "traefik/mesh:latest" version
version:
version : b417901
commit : b417901
@@ -27,7 +27,7 @@ version:
#[...]
$ ls dist/
maesh
traefik-mesh
```
!!! Note
@@ -40,12 +40,12 @@ Requirements:
- `Go` v1.14+
- Environment variable `GO111MODULE=on`
One your Go environment is set up, you can build Maesh from the sources by using the `go build` command. The Go compiler
will build an executable for your platform.
One your Go environment is set up, you can build Traefik Mesh from the sources by using the `go build` command.
The Go compiler will build an executable for your platform.
```bash
$ go build -o dist/maesh cmd/maesh/*.go
$ ./dist/maesh version
$ go build -o dist/traefik-mesh cmd/mesh/mesh.go
$ ./dist/traefik-mesh version
version:
version : dev
commit : I don't remember exactly
@@ -63,18 +63,18 @@ Run unit tests by using the `test` target:
```bash
$ make test
docker build --tag "containous/maesh:test" --target maker --build-arg="MAKE_TARGET=local-test" /home/user/maesh/
docker build --tag "traefik/mesh:test" --target maker --build-arg="MAKE_TARGET=local-test" /home/user/traefik-mesh/
#[...]
--- PASS: TestBuildConfiguration (0.00s)
--- PASS: TestBuildConfiguration/simple_configuration_build_with_HTTP_service (0.20s)
PASS
coverage: 69.7% of statements
ok github.com/containous/maesh/pkg/providers/smi 1.982s coverage: 69.7% of statements
? github.com/containous/maesh/pkg/signals [no test files]
ok github.com/traefik/mesh/pkg/providers/smi 1.982s coverage: 69.7% of statements
? github.com/traefik/mesh/pkg/signals [no test files]
Removing intermediate container 4e887c16ddee
---> 75d44229a46e
Successfully built 75d44229a46e
Successfully tagged containous/maesh:test
Successfully tagged traefik/mesh:test
```
Run the integration tests by using the `test-integration` target. For development purposes, you can specify which tests
@@ -117,8 +117,8 @@ time="2020-04-09T16:09:16+04:00" level=debug msg="Found trafficsplits for servic
--- PASS: TestBuildConfiguration (0.00s)
--- PASS: TestBuildConfiguration/simple_configuration_build_with_HTTP_service (0.21s)
PASS
ok github.com/containous/maesh/pkg/providers/smi 3.634s
? github.com/containous/maesh/pkg/signals [no test files]
ok github.com/traefik/mesh/pkg/providers/smi 3.634s
? github.com/traefik/mesh/pkg/signals [no test files]
```
Run the integration tests in the `integration` directory by using the `go test ./integration -integration` command:
@@ -129,9 +129,9 @@ $ go test -v ./integration -integration -check.f HelmSuite
OK: 2 passed
--- PASS: Test (161.20s)
PASS
ok github.com/containous/maesh/integration 162.695s
ok github.com/traefik/mesh/integration 162.695s
```
!!! Important
Before running the integration tests, build the Maesh Docker image. Check out the [Building](#building) section for
more details.
Before running the integration tests, build the Traefik Mesh Docker image.
Check out the [Building](#building) section for more details.
+4 -4
View File
@@ -13,9 +13,9 @@ You can build the documentation and test it locally (with live reloading), using
```bash
$ make serve
docker build -t maesh-docs -f docs.Dockerfile ./
docker build -t traefik-mesh-docs -f docs.Dockerfile ./
# […]
docker run --rm -v /Users/kevinpollet/Documents/Dev/maesh/docs:/mkdocs -p 8000:8000 maesh-docs mkdocs serve
docker run --rm -v /home/user/traefik-mesh/docs:/mkdocs -p 8000:8000 traefik-mesh-docs mkdocs serve
# […]
INFO - Building documentation...
INFO - Cleaning site directory
@@ -66,9 +66,9 @@ If you've made changes to the documentation, it's safer to clean it before verif
```bash
$ make clean verify
docker build -t maesh-docs -f docs.Dockerfile ./
docker build -t traefik-mesh-docs -f docs.Dockerfile ./
# […]
docker run --rm -v /Users/kevinpollet/Documents/Dev/maesh/docs:/mkdocs -p 8000:8000 maesh-docs sh -c "mkdocs build && chown -R 501:20 ./site"
docker run --rm -v /home/user/traefik-mesh/docs:/mkdocs -p 8000:8000 traefik-mesh-docs sh -c "mkdocs build && chown -R 501:20 ./site"
=== Checking HTML content...
# […]
```
@@ -1,13 +1,13 @@
# Submitting Issues
We use the [GitHub issue tracker](https://github.com/containous/maesh/issues) to keep track of Maesh issues.
We use the [GitHub issue tracker](https://github.com/traefik/mesh/issues) to keep track of Traefik Mesh issues.
The process of sorting and checking the issues requires a lot of work. To save us some time and get quicker feedback,
be sure to follow the guidelines below.
!!! Important "Getting Help"
The issue tracker is not a general support forum, but a place to report bugs and asks for new features. For end-user
related support questions, use the [Maesh community forum](https://community.containo.us/c/maesh/15).
The issue tracker is not a general support forum, but a place to report bugs and asks for new features.
For end-user related support questions, use the [Traefik Mesh community forum](https://community.containo.us/c/maesh).
## Issue Title
@@ -15,7 +15,7 @@ The title must be short and descriptive. (~60 characters)
## Description
Follow the [issue template](https://github.com/containous/maesh/blob/master/.github/ISSUE_TEMPLATE/) as much as possible.
Follow the [issue template](https://github.com/traefik/mesh/blob/master/.github/ISSUE_TEMPLATE/) as much as possible.
Explain in which context you encountered the issue.
@@ -28,9 +28,9 @@ what matters, and help them understand the structure of your message (see the [G
Remember, when asking for new features, they must be useful to the majority (and not only useful in edge case scenarios, or hack-like setups).
Do your best to explain what you're looking for, and why it would improve Maesh for everyone.
Do your best to explain what you're looking for, and why it would improve Traefik Mesh for everyone.
## International English
Maesh maintainers/users are not all native English speakers, so if you sometimes feel that some messages sound rude,
Traefik Mesh maintainers/users are not all native English speakers, so if you sometimes feel that some messages sound rude,
remember that it's probably a language barrier problem from someone willing to help you.
@@ -1,6 +1,6 @@
# Submitting Pull Requests
So you've decided to improve Maesh? Thank You! Now the last step is to submit your Pull Request in a way that makes sure
So you've decided to improve Traefik Mesh? Thank You! Now the last step is to submit your Pull Request in a way that makes sure
it gets the attention it deserves.
Let's go through the classic pitfalls to make sure everything is right.
@@ -11,7 +11,7 @@ The title must be short and descriptive. (~60 characters)
## Description
Follow the [pull request template](https://github.com/containous/maesh/blob/master/.github/PULL_REQUEST_TEMPLATE.md)
Follow the [pull request template](https://github.com/traefik/mesh/blob/master/.github/PULL_REQUEST_TEMPLATE.md)
as much as possible.
Explain the conditions which led you to write this PR: give us context. The context should lead to something, an idea or
+2 -2
View File
@@ -1,6 +1,6 @@
# Thank You!
Maesh is an [open-source project](https://github.com/containous/maesh/), your feedback and contributions are needed and
Traefik Mesh is an [open-source project](https://github.com/traefik/mesh/), your feedback and contributions are needed and
always welcome!
!!! Question "Where to Go Next?"
@@ -10,7 +10,7 @@ always welcome!
read the page [Submitting Issues](./submitting-issues.md).
- Discover how to make an efficient contribution,
read the page [Submitting Pull Requests](./submitting-pull-requests.md).
- Learn how to build and test Maesh,
- Learn how to build and test Traefik Mesh,
the page [Building and Testing](./building-testing.md) is for you.
- Contribute to the documentation,
read the related page [Documentation](./documentation.md).
+19 -21
View File
@@ -1,9 +1,9 @@
# Examples
Here are some examples on how to easily deploy Maesh on your cluster.
Here are some examples on how to easily deploy Traefik Mesh on your cluster.
??? Note "Prerequisites"
Before following those examples, make sure your cluster follows [the prerequisites for deploying Maesh](quickstart.md#prerequisites).
Before following those examples, make sure your cluster follows [the prerequisites for deploying Traefik Mesh](quickstart.md#prerequisites).
## Simple Example
@@ -50,7 +50,7 @@ spec:
serviceAccount: whoami-server
containers:
- name: whoami
image: containous/whoami:v1.4.0
image: traefik/whoami:latest
imagePullPolicy: IfNotPresent
---
@@ -72,7 +72,7 @@ spec:
serviceAccount: whoami-server
containers:
- name: whoami-tcp
image: containous/whoamitcp:latest
image: traefik/whoamitcp:latest
imagePullPolicy: IfNotPresent
---
@@ -174,13 +174,13 @@ my data
Received: my data
```
You can now install Maesh [by following this documentation](install.md) on your cluster.
You can now install Traefik Mesh [by following this documentation](install.md) on your cluster.
Since Maesh is not intrusive, it has to be explicitly given access to services before it can be used. You can ensure that the HTTP endpoint of your service does not pass through Maesh since no `X-Forwarded-For` header should be added.
Since Traefik Mesh is not intrusive, it has to be explicitly given access to services before it can be used. You can ensure that the HTTP endpoint of your service does not pass through Traefik Mesh since no `X-Forwarded-For` header should be added.
Now, in order to configure Maesh for your `whoami` service, you just need to update the `whoami` service specs, in order to add the appropriate annotations.
Now, in order to configure Traefik Mesh for your `whoami` service, you just need to update the `whoami` service specs, in order to add the appropriate annotations.
The HTTP service needs to have `maesh.containo.us/traffic-type: "http"` and the TCP service, `maesh.containo.us/traffic-type: "tcp"`.
The HTTP service needs to have `mesh.traefik.io/traffic-type: "http"` and the TCP service, `mesh.traefik.io/traffic-type: "tcp"`.
```yaml
---
@@ -191,10 +191,9 @@ metadata:
namespace: whoami
labels:
app: whoami
# These annotations enable Maesh for this service:
annotations:
maesh.containo.us/traffic-type: "http"
maesh.containo.us/retry-attempts: "2"
mesh.traefik.io/traffic-type: "http"
mesh.traefik.io/retry-attempts: "2"
spec:
type: ClusterIP
ports:
@@ -211,9 +210,8 @@ metadata:
namespace: whoami
labels:
app: whoami-tcp
# These annotations enable Maesh for this service:
annotations:
maesh.containo.us/traffic-type: "tcp"
mesh.traefik.io/traffic-type: "tcp"
spec:
type: ClusterIP
ports:
@@ -223,10 +221,10 @@ spec:
app: whoami-tcp
```
You should now be able to access your HTTP and TCP services through the Maesh endpoint:
You should now be able to access your HTTP and TCP services through the Traefik Mesh endpoint:
```bash tab="Command"
kubectl -n whoami exec whoami-client -- curl -s whoami.whoami.maesh
kubectl -n whoami exec whoami-client -- curl -s whoami.whoami.traefik.mesh
```
```text tab="Expected Output"
@@ -235,7 +233,7 @@ IP: 127.0.0.1
IP: 5.6.7.8
RemoteAddr: 1.2.3.4:12345
GET / HTTP/1.1
Host: whoami.whoami.maesh
Host: whoami.whoami.traefik.mesh
User-Agent: curl/7.64.0
Accept: */*
X-Forwarded-For: 3.4.5.6
@@ -243,12 +241,12 @@ X-Forwarded-For: 3.4.5.6
## ACL Example
The [ACL mode](install.md#access-control-list) can be enabled when installing Maesh. Once activated, all traffic is forbidden unless explicitly authorized
using the SMI [TrafficTarget](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-access/v1alpha2/traffic-access.md#traffictarget) resource. This example will present the configuration required to allow the client
pod to send traffic to the HTTP and TCP services defined in the previous example.
The [ACL mode](install.md#access-control-list) can be enabled when installing Traefik Mesh.
Once activated, all traffic is forbidden unless explicitly authorized using the SMI [TrafficTarget](https://github.com/servicemeshinterface/smi-spec/blob/master/apis/traffic-access/v1alpha2/traffic-access.md#traffictarget) resource.
This example will present the configuration required to allow the client pod to send traffic to the HTTP and TCP services defined in the previous example.
Each `TrafficTarget` defines that a set of source `ServiceAccount` is capable of sending traffic to a destination `ServiceAccount`. To authorize the `whoami-client` pod to send traffic to `whoami.whoami.maesh`, we need to
explicitly allow it to hit the pods exposed by the `whoami` service.
Each `TrafficTarget` defines that a set of source `ServiceAccount` is capable of sending traffic to a destination `ServiceAccount`.
To authorize the `whoami-client` pod to send traffic to `whoami.whoami.traefik.mesh`, we need to explicitly allow it to hit the pods exposed by the `whoami` service.
```yaml
---
+11 -11
View File
@@ -1,14 +1,14 @@
# Maesh: Simpler Service Mesh
# Traefik Mesh: Simpler Service Mesh
<p align="center">
<img width="400" src="assets/img/maesh.png" alt="Maesh" title="Maesh" />
<img width="400" src="assets/img/traefik-mesh.png" alt="Traefik Mesh" title="Traefik Mesh" />
</p>
Maesh is a lightweight and simpler service mesh designed from the ground up to be straightforward, easy to install and easy to use.
Traefik Mesh is a lightweight and simpler service mesh designed from the ground up to be straightforward, easy to install and easy to use.
Built on top of Traefik, Maesh fits as your de-facto service mesh in your Kubernetes cluster supporting the latest Service Mesh Interface specification (SMI).
Built on top of Traefik, Traefik Mesh fits as your de-facto service mesh in your Kubernetes cluster supporting the latest Service Mesh Interface specification (SMI).
Moreover, Maesh is opt-in by default, which means that your existing services are unaffected until you decide to add them to the mesh.
Moreover, Traefik Mesh is opt-in by default, which means that your existing services are unaffected until you decide to add them to the mesh.
<p align="center">
<a href="https://smi-spec.io" target="_blank"><img width="150" src="assets/img/smi.png" alt="SMI" title="SMI" /></a>
@@ -16,15 +16,15 @@ Moreover, Maesh is opt-in by default, which means that your existing services ar
## Non-Invasive Service Mesh
Maesh does not use any sidecar container but handles routing through proxy endpoints running on each node.
Traefik Mesh does not use any sidecar container but handles routing through proxy endpoints running on each node.
The mesh controller runs in a dedicated pod and handles all the configuration parsing and deployment to the proxy nodes.
Maesh supports multiple configuration options: annotations on user service objects, and SMI objects.
Not using sidecars means that Maesh does not modify your Kubernetes objects and does not modify your traffic without your knowledge.
Using the Maesh endpoints is all that is required.
Traefik Mesh supports multiple configuration options: annotations on user service objects, and SMI objects.
Not using sidecars means that Traefik Mesh does not modify your Kubernetes objects and does not modify your traffic without your knowledge.
Using the Traefik Mesh endpoints is all that is required.
<p align="center">
<img width="360" src="assets/img/before-maesh-graphic.png" alt="Maesh" title="Maesh" />
<img width="360" src="assets/img/after-maesh-graphic.png" alt="Maesh" title="Maesh" />
<img width="360" src="assets/img/before-traefik-mesh-graphic.png" alt="Traefik Mesh" title="Traefik Mesh" />
<img width="360" src="assets/img/after-traefik-mesh-graphic.png" alt="Traefik Mesh" title="Traefik Mesh" />
</p>
## Prerequisites
+34 -35
View File
@@ -1,23 +1,23 @@
# Installation
To install Maesh, the installation method is quite simple:
To install Traefik Mesh, the installation method is quite simple:
```bash
helm repo add maesh https://containous.github.io/maesh/charts
helm repo add traefik-mesh https://traefik.github.io/mesh/charts
helm repo update
```
Install Maesh Helm Chart:
Install Traefik Mesh Helm Chart:
```bash
helm install maesh maesh/maesh
helm install traefik-mesh traefik-mesh/traefik-mesh
```
## Install from source
!!! Note "Supported Installations"
Please be aware that the supported installation method is via Helm, using official releases.
If you want to build/install/run Maesh from source, we may not be able to provide support.
If you want to build/install/run Traefik Mesh from source, we may not be able to provide support.
Installing from source is intended for development/contributing.
To build the image locally, run:
@@ -33,40 +33,39 @@ You will then be able to use the tagged image as your image in your `values.yaml
To deploy the Helm Chart, run:
```shell
helm install maesh helm/chart/maesh --set controller.image.pullPolicy=IfNotPresent --set controller.image.tag=latest
helm install traefik-mesh helm/chart/mesh --set controller.image.pullPolicy=IfNotPresent --set controller.image.tag=latest
```
## KubeDNS support
Maesh supports KubeDNS:
Traefik Mesh supports KubeDNS:
```bash
helm install maesh maesh/maesh --set kubedns=true
helm install traefik-mesh traefik-mesh/traefik-mesh --set kubedns=true
```
With the `kubedns` parameter Maesh will install CoreDNS and patch KubeDNS to use it as a [stubDomain](https://v1-17.docs.kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/#example-stub-domain).
With the `kubedns` parameter Traefik Mesh will install CoreDNS and patch KubeDNS to use it as a [stubDomain](https://v1-17.docs.kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/#example-stub-domain).
## Custom cluster domain
If you use a cluster domain other than `cluster.local` set it by using the `clusterDomain` parameter:
```bash
helm install maesh maesh/maesh --set clusterDomain=my.custom.domain.com
helm install traefik-mesh traefik-mesh/traefik-mesh --set clusterDomain=my.custom.domain.com
```
## Access Control List
By default, Maesh does not restrict traffic between pods and services. However, some scenarios require more control
over the rules for internal communication. The Access Control List mode (ACL) requires a set of rules to explicitly allow
traffic between different resources.
By default, Traefik Mesh does not restrict traffic between pods and services. However, some scenarios require more control over the rules for internal communication.
The Access Control List mode (ACL) requires a set of rules to explicitly allow traffic between different resources.
To enable ACL, install Maesh in ACL mode by setting the `acl` Helm Chart option to `true`.
To enable ACL, install Traefik Mesh in ACL mode by setting the `acl` Helm Chart option to `true`.
```bash
helm install maesh --namespace=maesh maesh/maesh --set acl=true
helm install traefik-mesh --namespace=traefik-mesh traefik-mesh/traefik-mesh --set acl=true
```
Maesh supports the [SMI specification](https://smi-spec.io/) which defines a set of custom resources
Traefik Mesh supports the [SMI specification](https://smi-spec.io/) which defines a set of custom resources
to provide a fine-grained control over instrumentation, routing and access control of east-west communications.
!!! Note "CRDs"
@@ -77,45 +76,45 @@ to provide a fine-grained control over instrumentation, routing and access contr
## Platform recommendations
Maesh works on Kubernetes environments that conforms to the global Kubernetes specification.
Traefik Mesh works on Kubernetes environments that conforms to the global Kubernetes specification.
That being said, we have had users encounter issues when using variants such as minikube, microk8s,
and other development distributions.
Maesh runs without issue on most public clouds (AWS, GKE, Azure, DigitalOcean, and more).
If you want to run Maesh in development, we would recommend using [k3s](https://k3s.io/), as it is fully conformant.
We use k3s in Maesh's integration tests, so you can be sure that it works properly.
Traefik Mesh runs without issue on most public clouds (AWS, GKE, Azure, DigitalOcean, and more).
If you want to run Traefik Mesh in development, we would recommend using [k3s](https://k3s.io/), as it is fully conformant.
We use k3s in Traefik Mesh's integration tests, so you can be sure that it works properly.
If you encounter issues on variants such as minikube or microk8s, please try and reproduce the issue on k3s.
If you are unable to reproduce, it may be an issue with the distribution behaving differently than official Kubernetes.
## Verify your installation
You can check that Maesh has been installed properly by running the following command:
You can check that Traefik Mesh has been installed properly by running the following command:
```bash tab="Command"
kubectl get all -n maesh
kubectl get all -n traefik-mesh
```
```text tab="Expected Output"
NAME READY STATUS RESTARTS AGE
pod/maesh-controller-676fb86b89-pj8ph 1/1 Running 0 11s
pod/maesh-mesh-w62z5 1/1 Running 0 11s
pod/maesh-mesh-zjlpf 1/1 Running 0 11s
NAME READY STATUS RESTARTS AGE
pod/traefik-mesh-controller-676fb86b89-pj8ph 1/1 Running 0 11s
pod/traefik-mesh-proxy-w62z5 1/1 Running 0 11s
pod/traefik-mesh-proxy-zjlpf 1/1 Running 0 11s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/maesh-mesh 2 2 0 2 0 <none> 29s
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/traefik-mesh-proxy 2 2 0 2 0 <none> 29s
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/maesh-controller 1 1 1 0 28s
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.apps/traefik-mesh-controller 1 1 1 0 28s
NAME DESIRED CURRENT READY AGE
replicaset.apps/maesh-controller-676fb86b89 1 1 0 28s
NAME DESIRED CURRENT READY AGE
replicaset.apps/traefik-mesh-controller-676fb86b89 1 1 0 28s
```
## Usage
To use Maesh, instead of referencing services via their normal `<servicename>.<namespace>`, instead use `<servicename>.<namespace>.maesh`.
This will access the Maesh service mesh, and will allow you to route requests through Maesh.
To use Traefik Mesh, instead of referencing services via their normal `<servicename>.<namespace>`, instead use `<servicename>.<namespace>.traefik.mesh`.
This will access the Traefik Mesh service mesh, and will allow you to route requests through Traefik Mesh.
By default, Maesh is opt-in, meaning you have to use the Maesh service names to access the mesh, so you can have some services running through the mesh, and some services not.
By default, Traefik Mesh is opt-in, meaning you have to use the Traefik Mesh service names to access the mesh, so you can have some services running through the mesh, and some services not.
+27 -19
View File
@@ -5,44 +5,52 @@ Helm Chart
## v2.1 to v3.0
### Traefik Mesh renaming
All existing resources have been renamed and prefixed by `traefik-mesh`.
For example, the `maesh-controller`resource has been renamed to `traefik-mesh-controller`.
### Mesh Property Name
Inside the Traefik Mesh helm chart, the `mesh` property has been renamed to `proxy`.
### Image version
Since version `v1.4`, Maesh uses plain [Traefik](https://github.com/containous/traefik/) Docker image for mesh proxies.
Therefore, to change the image version used for the controller, or the mesh proxies you should use the `controller.image`
and `mesh.image` options.
Since version `v1.4`, Traefik Mesh uses plain [Traefik](https://github.com/traefik/traefik/) Docker image for proxies.
Therefore, to change the image version used for the controller, or the proxies you should use the `controller.image` and `proxy.image` options.
### Default Mode
The `mesh.defaultMode` option has been removed.
You should use the new `defaultMode` option to configure the default traffic mode.
## v2.0 to v2.1
### Default Mode
The `mesh.defaultMode` option has been deprecated and will be removed in a future major release.
You should use the new `defaultMode` option to configure the default traffic mode for Maesh services.
You should use the new `defaultMode` option to configure the default traffic mode.
### Prometheus and Grafana services
Prior to version `v2.1`, when the Metrics chart is deployed, Prometheus and Grafana services are exposed by default through
a `NodePort`. For security reasons, those services are not exposed by default anymore. To expose them you should use the
new `prometheus.service` and `grafana.service` options, more details in the corresponding [values.yaml](https://github.com/containous/maesh/blob/e59b861ac91261b950663410a6223a02fc7e2290/helm/chart/maesh/charts/metrics/values.yaml).
Prior to version `v2.1`, when the Metrics chart is deployed, Prometheus and Grafana services are exposed by default through a `NodePort`.
For security reasons, those services are not exposed by default anymore.
To expose them you should use the new `prometheus.service` and `grafana.service` options, more details in the corresponding [values.yaml](https://github.com/traefik/mesh/blob/e59b861ac91261b950663410a6223a02fc7e2290/helm/chart/maesh/charts/metrics/values.yaml).
## v1.x to v2.0
### Default Mode
The `mesh.defaultMode` option has been removed. You should use the new `defaultMode` option to configure the default traffic
mode for Maesh services.
### Image version
Since version `v1.2`, Maesh uses [Traefik](https://github.com/containous/traefik/) as a library and does not rely on its
Docker image anymore. Therefore, the `controller.image` and `mesh.image` options have been removed. You should use the
new `image` option as described in the [documentation](../install.md#deploy-helm-chart).
Since version `v1.2`, [Traefik](https://github.com/traefik/traefik/) is used as a library.
Therefore, the `controller.image` and `mesh.image` options have been removed.
You should use the new `image` option as described in the [documentation](../install.md#deploy-helm-chart).
### Log Level
The `controller.logging.debug` and `mesh.logging` options have been removed. You should use the new `controller.logLevel`
and `mesh.logLevel` options to configure the logging level for the controller and proxies.
The `controller.logging.debug` and `mesh.logging` options have been removed.
You should use the new `controller.logLevel` and `mesh.logLevel` options to configure the logging level for the controller and proxies.
### SMI Mode
The `smi.enable` option has been deprecated and removed. You should use the new and backward compatible ACL mode
option as described in the [documentation](../install.md#access-control-list).
The `smi.enable` option has been deprecated and removed.
You should use the new and backward compatible ACL mode option as described in the [documentation](../install.md#access-control-list).
-16
View File
@@ -1,16 +0,0 @@
# Minor Migrations
Maesh v1
{: .subtitle }
## v1.1 to v1.2
### Debug
The `--debug` CLI flag is deprecated and will be removed in a future major release. Instead, you should use the new
`--logLevel` flag with `debug` as value.
### SMI Mode
The `--smi` CLI flag is deprecated and will be removed in a future major release. Instead, you should use the new and
backward compatible `--acl` flag.
+55
View File
@@ -0,0 +1,55 @@
# Minor Migrations
Traefik Mesh v1
{: .subtitle }
## Traefik Mesh v1.4
Maesh has been renamed to Traefik Mesh in an effort to rename all of our products and make them look closer.
Through this renaming process, a couple of things changed which might be worth mentioning for a migration process.
All areas that changed are mentioned below with the appropriate actions needed to do.
Everything called Maesh references to `v1.3`, while Traefik Mesh refers to `v1.4`.
### Environment Variable Prefix
Prior to Traefik Mesh, environment variables were prefixed with `MAESH_`.
Now they're prefixed with `TRAEFIK_MESH_` and the `MAESH_` prefix is deprecated.
You need to decide on either using `MAESH_` or `TRAEFIK_MESH_` as mixing both will result in an error.
### Configuration File Name
The default configuration file name is changed from `maesh` to `traefik-mesh` as well.
### DNS Name
The well known internal DNS name, to opt in into the usage of Maesh was `.maesh`.
Now, with the rebranding process this has been changed to `traefik.mesh` and thus, you now need to use the DNS name of `servicename.servicenamespace.traefik.maesh` to opt-in into the usage of Traefik Mesh.
The old name `.maesh`, is deprecated and will be removed eventually.
### Docker Image Name
As part of the process, the docker-image has been moved from `containous/maesh` to `traefik/mesh`.
The old image will not be updated anymore and `traefik/mesh` starts with `v1.4.0`.
### Binary
The new binary name is `traefik-mesh`, rather than `maesh` before.
However, as Traefik Mesh is running inside k8s this change should not be critical as it's hidden by the docker-image name.
### Annotations
As part of the rebranding process, the annotation prefix has changed.
The annotation prefix `maesh.containo.us/` has been deprecated in favour of `mesh.traefik.io`.
## v1.1 to v1.2
### Debug
The `--debug` CLI flag is deprecated and will be removed in a future major release.
Instead, you should use the new `--logLevel` flag with `debug` as value.
### SMI Mode
The `--smi` CLI flag is deprecated and will be removed in a future major release.
Instead, you should use the new and backward compatible `--acl` flag.
+29 -32
View File
@@ -1,6 +1,6 @@
# Quickstart
Maesh can be installed in your cluster without affecting any running services.
Traefik Mesh can be installed in your cluster without affecting any running services.
It can safely be installed using the [Helm Chart](https://helm.sh/docs/intro/using_helm/#helm-install-installing-a-package).
## Prerequisites
@@ -11,15 +11,12 @@ It can safely be installed using the [Helm Chart](https://helm.sh/docs/intro/usi
### RBAC
Depending on the tool you used to deploy your cluster you might need
to tweak RBAC permissions.
Depending on the tool you used to deploy your cluster you might need to tweak RBAC permissions.
#### `kubeadm`
If you used `kubeadm` to deploy your cluster, a fast way to allow the
helm installation to perform all steps it needs is to edit the
`cluster-admin` `ClusterRoleBinding`, adding the following to the
`subjects` section:
If you used `kubeadm` to deploy your cluster, a fast way to allow the helm installation to perform all steps it needs is to edit the
`cluster-admin` `ClusterRoleBinding`, adding the following to the `subjects` section:
```yaml
- kind: ServiceAccount
@@ -27,31 +24,31 @@ helm installation to perform all steps it needs is to edit the
namespace: kube-system
```
## Installing Maesh
## Installing Traefik Mesh
```bash tab="Command"
helm repo add maesh https://containous.github.io/maesh/charts
helm repo add traefik-mesh https://traefik.github.io/mesh/charts
helm repo update
helm install maesh maesh/maesh
helm install traefik-mesh traefik-mesh/traefik-mesh
```
```bash tab="Expected output"
[...]
NOTES:
Thank you for installing maesh.
Thank you for installing traefik-mesh.
Your release is named maesh.
Your release is named traefik-mesh.
To learn more about the release, try:
$ helm status maesh
$ helm get maesh
$ helm status traefik-mesh
$ helm get traefik-mesh
```
## Using Maesh
## Using Traefik Mesh
As an example, let's deploy a server application and a client application under the `maesh-test` namespace.
As an example, let's deploy a server application and a client application under the `test` namespace.
```yaml tab="server.yaml"
---
@@ -59,7 +56,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: server
namespace: maesh-test
namespace: test
labels:
app: server
spec:
@@ -74,7 +71,7 @@ spec:
spec:
containers:
- name: server
image: containous/whoami:v1.4.0
image: traefik/whoami:latest
ports:
- containerPort: 80
---
@@ -82,7 +79,7 @@ kind: Service
apiVersion: v1
metadata:
name: server
namespace: maesh-test
namespace: test
spec:
selector:
app: server
@@ -99,7 +96,7 @@ apiVersion: apps/v1
kind: Deployment
metadata:
name: client
namespace: maesh-test
namespace: test
labels:
app: client
spec:
@@ -124,7 +121,7 @@ spec:
Create the namespace then deploy those two applications:
```bash
kubectl create namespace maesh-test
kubectl create namespace test
kubectl apply -f server.yaml
kubectl apply -f client.yaml
```
@@ -132,7 +129,7 @@ kubectl apply -f client.yaml
You should now see the following output:
```bash tab="Command"
kubectl get all -n maesh-test
kubectl get all -n test
```
```text tab="Expected output"
@@ -156,13 +153,13 @@ replicaset.apps/server-7c8fd58db5 2 2 2 77s
Take note of the client app pod name (here it's `client-7446fdf848-x96fq`) and open a new terminal session inside this pod using `kubectl exec`.
```bash
kubectl -n maesh-test exec -ti client-7446fdf848-x96fq ash
kubectl -n test exec -ti client-7446fdf848-x96fq ash
```
From inside the client container, make sure your server is reachable using the Kubernetes DNS service discovery.
```bash tab="Command"
curl server.maesh-test.svc.cluster.local
curl server.test.svc.cluster.local
```
```test tab="Expected Output"
@@ -173,17 +170,17 @@ IP: 10.42.2.10
IP: fe80::a4ec:77ff:fe37:1cdd
RemoteAddr: 10.42.2.9:46078
GET / HTTP/1.1
Host: server.maesh-test.svc.cluster.local
Host: server.test.svc.cluster.local
User-Agent: curl/7.64.0
Accept: */*
```
You can note that all this server application is doing is to respond with the content of the request it receives.
Now replace the `svc.cluster.local` suffix by `maesh`, and tada: you are now using Maesh to reach your server!
Now replace the `svc.cluster.local` suffix by `traefik.mesh`, and tada: you are now using Traefik Mesh to reach your server!
```bash tab="Command"
curl server.maesh-test.maesh
curl server.test.traefik.mesh
```
```test tab="Expected Output"
@@ -194,21 +191,21 @@ IP: 10.42.1.7
IP: fe80::601d:7cff:fe26:c8c6
RemoteAddr: 10.42.1.5:59478
GET / HTTP/1.1
Host: server.maesh-test.maesh
Host: server.test.traefik.mesh
User-Agent: curl/7.64.0
Accept: */*
Accept-Encoding: gzip
Uber-Trace-Id: 3f9e7129a059f70:7e889a1ebcb147ac:3f9e7129a059f70:1
X-Forwarded-For: 10.42.2.9
X-Forwarded-Host: server.maesh-test.maesh
X-Forwarded-Host: server.test.traefik.mesh
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: maesh-mesh-w95q2
X-Forwarded-Server: traefik-mesh-proxy-w95q2
X-Real-Ip: 10.42.2.9
```
Note the presence of `X-Forwarded` headers as well as other instrumentation headers like `Uber-Trace-Id`, indicating than your request has been processed and instrumented by Maesh.
Note the presence of `X-Forwarded` headers as well as other instrumentation headers like `Uber-Trace-Id`, indicating than your request has been processed and instrumented by Traefik Mesh.
## What's next
See the [examples page](examples.md) to see a more advanced example, or dive into the [configuration](configuration.md) to discover all Maesh capabilities.
See the [examples page](examples.md) to see a more advanced example, or dive into the [configuration](configuration.md) to discover all Traefik Mesh capabilities.
+7 -7
View File
@@ -1,11 +1,11 @@
site_name: Maesh
site_description: Maesh Documentation
site_name: Traefik Mesh
site_description: Traefik Mesh Documentation
site_author: containo.us
site_url: https://docs.mae.sh
dev_addr: 0.0.0.0:8000
repo_name: 'GitHub'
repo_url: 'https://github.com/containous/maesh'
repo_url: 'https://github.com/traefik/mesh'
docs_dir: 'content'
edit_uri: 'edit/master/docs/content/'
@@ -16,8 +16,8 @@ theme:
custom_dir: 'theme'
language: en
include_sidebar: true
favicon: assets/img/maesh-logo.svg
logo: assets/img/maesh-logo.svg
favicon: assets/img/traefik-mesh-logo.svg
logo: assets/img/traefik-mesh-logo.svg
feature:
tabs: false
palette:
@@ -27,7 +27,7 @@ theme:
prev: 'Previous'
next: 'Next'
copyright: "Copyright &copy; 2016-2020 Containous"
copyright: "Copyright &copy; 2020 Traefik Labs"
extra_css:
- assets/styles/root.css
@@ -76,7 +76,7 @@ nav:
- 'Examples': 'examples.md'
- 'API': 'api.md'
- 'Migration':
- 'Maesh v1': 'migration/maesh-v1.md'
- 'Traefik Mesh v1': 'migration/traefik-mesh-v1.md'
- 'Helm Chart': 'migration/helm-chart.md'
- 'Contributing':
- 'Thank You!': 'contributing/thank-you.md'
+3 -3
View File
@@ -19,10 +19,10 @@ find "${PATH_TO_SITE}" -type f -not -path "/app/site/theme/*" \
htmlproofer \
--check-html \
--check_external_hash \
--alt_ignore="/maesh-logo.png/" \
--alt_ignore="/maesh-logo.svg/" \
--alt_ignore="/traefik-mesh-logo.png/" \
--alt_ignore="/traefik-mesh-logo.svg/" \
--http_status_ignore="0,500,501,503" \
--url_ignore="/fonts.gstatic.com/,/docs.mae.sh/,/github.com\/containous\/maesh\/edit*/,/pilot.traefik.io\/profile/,/containo.us/,/docs.traefik.io/,/www.mkdocs.org/,/squidfunk.github.io/,/ietf.org/" \
--url_ignore="/fonts.gstatic.com/,/docs.mae.sh/,/github.com\/traefik\/mesh\/edit*/,/pilot.traefik.io\/profile/,/containo.us/,/docs.traefik.io/,/www.mkdocs.org/,/squidfunk.github.io/,/ietf.org/" \
'{}' 1>/dev/null
## HTML-proofer options at https://github.com/gjtorikian/html-proofer#configuration
+2 -2
View File
@@ -6,12 +6,12 @@
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-W6HPV6C');</script>
})(window,document,'script','dataLayer','GTM-KVZ2ZDK');</script>
<!-- End Google Tag Manager -->
{%- endblock %}
{% block header %}
{% include "partials/containous-header.html" %}
{% include "partials/company-header.html" %}
{% include "partials/header.html" %}
{% endblock %}
@@ -197,7 +197,7 @@
</div>
</div>
<div class="dm-right">
<p>Interested in joining Containous?</p>
<p>Interested in joining Traefik Labs?</p>
<a
class="btn-type-1"
href="https://containo.us/careers/#open-positions"
@@ -225,4 +225,4 @@
</div>
</header>
</div>
</div>
+2 -2
View File
@@ -1,10 +1,9 @@
module github.com/containous/maesh
module github.com/traefik/mesh
go 1.15
require (
github.com/cenkalti/backoff/v4 v4.0.2
github.com/containous/traefik/v2 v2.3.0-rc4
github.com/go-check/check v0.0.0-20180628173108-788fd7840127
github.com/google/uuid v1.1.1
github.com/gorilla/mux v1.7.3
@@ -13,6 +12,7 @@ require (
github.com/sirupsen/logrus v1.6.0
github.com/stretchr/testify v1.6.1
github.com/traefik/paerser v0.1.0
github.com/traefik/traefik/v2 v2.3.0-rc6
github.com/vdemeester/shakers v0.1.0
k8s.io/api v0.18.6
k8s.io/apimachinery v0.18.6
+143 -60
View File
@@ -64,6 +64,7 @@ github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798 h1:2T/jmrHeTezcCM58
github.com/DataDog/zstd v1.3.6-0.20190409195224-796139022798/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/ExpediaDotCom/haystack-client-go v0.0.0-20190315171017-e7edbdf53a61 h1:1NIUJ+MAMpqDr4LWIfNsoJR+G7zg/8GZVwuRkmJxtTc=
github.com/ExpediaDotCom/haystack-client-go v0.0.0-20190315171017-e7edbdf53a61/go.mod h1:62qWSDaEI0BLykU+zQza5CAKgW0lOy9oBSz3/DvYz4w=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Masterminds/goutils v1.1.0 h1:zukEsf/1JZwCMgHiK3GZftabmxiCw4apj3a28RPBiVg=
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc=
@@ -83,8 +84,10 @@ github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMo
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87 h1:xPMsUicZ3iosVPSIP7bW5EcGUzjiiMl1OYTe14y/R24=
github.com/OpenDNS/vegadns2client v0.0.0-20180418235048-a3fa4a771d87/go.mod h1:iGLljf5n9GjT6kc0HBvyI1nOKnGQbNB66VzSNbK5iks=
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI=
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/sarama v1.23.1 h1:XxJBCZEoWJtoWjf/xRbmGUpAmTZGnuuF0ON0EvxxBrs=
@@ -95,13 +98,15 @@ github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrd
github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/abronan/valkeyrie v0.0.0-20200127174252-ef4277a138cd h1:UlQRt3CZdeD+WfDamDtdDDOu84CYbGIh9/B28TgzCZk=
github.com/abronan/valkeyrie v0.0.0-20200127174252-ef4277a138cd/go.mod h1:2RUNONRAQ8bS1QcVJF3dYO/faiEro6NAAIQ6CqBkpD0=
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.8 h1:6rJvj+NXjjauunLeS7uGy891F1cuAwsWKa9iGzTjz1s=
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.8/go.mod h1:aVvklgKsPENRkl29bNwrHISa1F+YLGTHArMxZMBqWM8=
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/akamai/AkamaiOPEN-edgegrid-golang v0.9.18/go.mod h1:L+HB2uBoDgi3+r1pJEJcbGwyyHhd2QXaGsKLbDwtm8Q=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.112 h1:E273ePcLllLIBGg5BHr3T0Fp1BJTvUyh5Y57ziSy81w=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.112/go.mod h1:pUKYbK5JQ+1Dfxk80P0qxGqe5dkxDoabbZS7zOcouyA=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/aliyun/alibaba-cloud-sdk-go v1.61.458/go.mod h1:pUKYbK5JQ+1Dfxk80P0qxGqe5dkxDoabbZS7zOcouyA=
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878 h1:EFSB7Zo9Eg91v7MJPVsifUysc/wPdN+NOnVe6bWbdBM=
@@ -109,9 +114,13 @@ github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQh
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI=
github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A=
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
github.com/aws/aws-sdk-go v1.16.23/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
github.com/aws/aws-sdk-go v1.30.20 h1:ktsy2vodSZxz/arYqo7DlpkIeNohHL+4Rmjdo7YGtrE=
github.com/aws/aws-sdk-go v1.30.20/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -122,19 +131,23 @@ github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
github.com/c0va23/go-proxyprotocol v0.9.1 h1:5BCkp0fDJOhzzH1lhjUgHhmZz9VvRMMif1U2D31hb34=
github.com/c0va23/go-proxyprotocol v0.9.1/go.mod h1:TNjUV+llvk8TvWJxlPYAeAYZgSzT/iicNr3nWBWX320=
github.com/cenkalti/backoff/v4 v4.0.0/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff/v4 v4.0.2 h1:JIufpQLbh4DkbQoii76ItQIUFzevQSqOLZca4eamEDs=
github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg=
github.com/census-instrumentation/opencensus-proto v0.2.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cloudflare/cloudflare-go v0.10.2 h1:VBodKICVPnwmDxstcW3biKcDSpFIfS/RELUXsZSBYK4=
github.com/cloudflare/cloudflare-go v0.10.2/go.mod h1:qhVI5MKwBGhdNU89ZRz2plgYutcJ5PCekLxXn56w6SY=
github.com/cloudflare/cloudflare-go v0.13.2/go.mod h1:27kfc1apuifUmJhp069y0+hwlKDg4bd8LWlu7oKeZvM=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/codegangsta/negroni v1.0.0 h1:+aYywywx4bnKXWvoWtRfJ91vC59NbEhEY03sZjQhbVY=
@@ -161,24 +174,23 @@ github.com/containous/multibuf v0.0.0-20190809014333-8b6c9a7e6bba h1:PhR03pep+5e
github.com/containous/multibuf v0.0.0-20190809014333-8b6c9a7e6bba/go.mod h1:zkWcASFUJEst6QwCrxLdkuw1gvaKqmflEipm+iecV5M=
github.com/containous/mux v0.0.0-20200408164629-f779179d490a h1:9HowJycBgtJU6s+2ic6cTeAV1CaJC+dJfC7rFoMwoyc=
github.com/containous/mux v0.0.0-20200408164629-f779179d490a/go.mod h1:z8WW7n06n8/1xF9Jl9WmuDeZuHAhfL+bwarNjsciwwg=
github.com/containous/traefik/v2 v2.3.0-rc4 h1:WEOM8Un8RTK65CZHXqaWIhokdcX3BlE6TGNaduW9QLc=
github.com/containous/traefik/v2 v2.3.0-rc4/go.mod h1:xHE4peU2VKKZL2A5VqAovE+nDhrFH/Au/AqkwJr1sfk=
github.com/containous/yaegi v0.8.14/go.mod h1:Yj82MHpXQ9/h3ukzc2numJQ/Wr4+M3C9YLMzNjFtd3o=
github.com/coreos/bbolt v1.3.3 h1:n6AiVyVRKQFNb6mJlwESEvvLoDyiTzXX7ORAUlkeBdY=
github.com/coreos/bbolt v1.3.3/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.13+incompatible h1:8F3hqu9fGYLBifCmRCJsicFqDx/D68Rt3q1JMazcgBQ=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-semver v0.2.0 h1:3Jm3tLmsgAYcjC+4Up7hJrFBPr+n7rAqYeSw/SZazuY=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf h1:iW4rZ826su+pqaw19uhpSCzhj44qo35pNgKFGqzDKkU=
github.com/coreos/go-systemd v0.0.0-20191104093116-d3cd4ed1dbcf/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f h1:lBNOc5arjvs8E5mO2tbpBpLoyyu8B6e44T7hJy6potg=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpu/goacmedns v0.0.2 h1:hYAgjnPu7HogTgb8trqQouR/RrBgXq1TPBgmxbK9eRA=
github.com/cpu/goacmedns v0.0.2/go.mod h1:4MipLkI+qScwqtVxcNO6okBhbgRrr7/tKXUSgSL0teQ=
github.com/cpu/goacmedns v0.0.3/go.mod h1:4MipLkI+qScwqtVxcNO6okBhbgRrr7/tKXUSgSL0teQ=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -186,10 +198,7 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumC
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2 h1:G9/PqfhOrt8JXnw0DGTfVoOkKHDhOlEZqhE/cu+NvQM=
github.com/dnaeon/go-vcr v0.0.0-20180814043457-aafff18a5cc2/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/dnsimple/dnsimple-go v0.60.0 h1:N+q+ML1CZGf+5r4udu9Opy7WJNtOaFT9aM86Af9gLhk=
github.com/dnsimple/dnsimple-go v0.60.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg=
github.com/dnsimple/dnsimple-go v0.63.0/go.mod h1:O5TJ0/U6r7AfT8niYNlmohpLbCSG+c71tQlGr9SeGrg=
github.com/docker/cli v0.0.0-20200221155518-740919cc7fc0 h1:hlGHcYGaaHs/yffSubcUKlp8TyV1v7qhcZZ5nGNQ2Fw=
github.com/docker/cli v0.0.0-20200221155518-740919cc7fc0/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
@@ -207,6 +216,7 @@ github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNE
github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM=
github.com/donovanhide/eventsource v0.0.0-20170630084216-b8f31a59085e h1:rMOGp6HPeMHbdLrZkX2nD+94uqDunc27tXVuS+ey4mQ=
github.com/donovanhide/eventsource v0.0.0-20170630084216-b8f31a59085e/go.mod h1:56wL82FO0bfMU5RvfXoIwSOP2ggqqxT+tAfNEIyxuHw=
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eapache/channels v1.1.0 h1:F1taHcn7/F0i8DYqKXJnyhJcVpp2kgFcNePxXtnyu4k=
github.com/eapache/channels v1.1.0/go.mod h1:jMm2qB5Ubtg9zLd+inMZd2/NUvXgzmWXsDaLyQIGfH0=
github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU=
@@ -215,6 +225,7 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385 h1:clC1lXBpe2kTj2VHdaIu9ajZQe4kcEY9j0NsnDDBZ3o=
github.com/eknkc/amber v0.0.0-20171010120322-cdade1c07385/go.mod h1:0vRUJqYpeSZifjYj7uP3BG/gKcuzL9xWVV/Y+cK33KM=
github.com/elastic/go-sysinfo v1.1.1 h1:ZVlaLDyhVkDfjwPGU55CQRCRolNpc7P0BbyhhQZQmMI=
@@ -225,6 +236,7 @@ github.com/elazarl/go-bindata-assetfs v1.0.0 h1:G/bYguwHIzWq9ZoyUQqrjTmJbbYn3j3C
github.com/elazarl/go-bindata-assetfs v1.0.0/go.mod h1:v+YaWX3bdea5J/mo8dSETolEo7R71Vk1u8bnjau5yw4=
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -232,14 +244,15 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.5.0+incompatible h1:ouOWdg56aJriqS0huScTkVXPC5IcNrDCXZ6OoTAWu7M=
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/exoscale/egoscale v0.18.1 h1:1FNZVk8jHUx0AvWhOZxLEDNlacTU0chMXUUNkm9EZaI=
github.com/exoscale/egoscale v0.18.1/go.mod h1:Z7OOdzzTOz1Q1PjQXumlz9Wn/CddH0zSYdCF3rnBKXE=
github.com/exoscale/egoscale v0.23.0/go.mod h1:hRo78jkjkCDKpivQdRBEpNYF5+cVpCJCPDg2/r45KaY=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo=
github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
github.com/felixge/httpsnoop v1.0.0 h1:gh8fMGz0rlOv/1WmRZm7OgncIOTsAj21iNJot48omJQ=
github.com/felixge/httpsnoop v1.0.0/go.mod h1:3+D9sFq0ahK/JeJPhCBUV1xlf4/eIYrUQaxulT0VzX8=
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/gambol99/go-marathon v0.0.0-20180614232016-99a156b96fb2 h1:df6OFl8WNXk82xxP3R9ZPZ5seOA8XZkwLdbEzZF1/xI=
@@ -247,8 +260,8 @@ github.com/gambol99/go-marathon v0.0.0-20180614232016-99a156b96fb2/go.mod h1:GLy
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-acme/lego/v3 v3.8.0 h1:9OOEn54eZvEPRRdM7xiC5f7EBW0MlEeChr+kzlIhdN8=
github.com/go-acme/lego/v3 v3.8.0/go.mod h1:kYiHYgSRzb1l2NQPWvWvkVG5etNCusGFsZc2MTak3m0=
github.com/go-acme/lego/v4 v4.0.1 h1:vPwbTYfw5+fOaON9rWCN43iNrPw5cdJBhNMnA8oxBTM=
github.com/go-acme/lego/v4 v4.0.1/go.mod h1:pIFm5tWkXSgiAEfJ/XQCQIvX1cEvHFwbgLZyx8OVSUE=
github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
@@ -258,21 +271,29 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.10.1-0.20200915143503-439c4d2ed3ea/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0 h1:MP4Eh7ZCb31lleYCFuwm0oe4/YGak+5l1vA2NOE80nA=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0=
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg=
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
github.com/go-openapi/spec v0.19.3 h1:0XRyw8kguri6Yw4SxhsQA/atC88yqrk0+G4YhI2wabc=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-resty/resty/v2 v2.1.1-0.20191201195748-d7b97669fe48/go.mod h1:dZGr0i9PLlaaTD4H/hoZIDjQ+r6xq8mgbRzHZf7f2J8=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
@@ -331,6 +352,7 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
@@ -341,12 +363,14 @@ github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTV
github.com/googleapis/gnostic v0.2.0 h1:l6N3VoaVzTncYYW+9yOz2LJJammFZGBO13sqgEhpy9g=
github.com/googleapis/gnostic v0.2.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY=
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
github.com/gophercloud/gophercloud v0.3.0 h1:6sjpKIpVwRIIwmcEGp+WwNovNsem+c+2vm6oxshRpL8=
github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
github.com/gophercloud/gophercloud v0.6.1-0.20191122030953-d8ac278c1c9d/go.mod h1:ozGNgr9KYOVATV5jsgHl/ceCDXGuguqOZAzoQ/2vcNM=
github.com/gophercloud/gophercloud v0.7.0/go.mod h1:gmC5oQqMDOMO1t1gq5DquX/yAU808e/4mzjjDA76+Ss=
github.com/gophercloud/utils v0.0.0-20200508015959-b0167b94122c/go.mod h1:ehWUbLQJPqS0Ep+CxeD559hsm9pthPXadJNKwZkp43w=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -355,6 +379,7 @@ github.com/gravitational/trace v0.0.0-20190726142706-a535a178675f/go.mod h1:RvdO
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0 h1:Iju5GlWwrvL6UBg4zJJt3btmonfrMlCDdsejg4CZE7c=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
@@ -385,8 +410,7 @@ github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM=
github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
github.com/hashicorp/go-retryablehttp v0.6.7/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
github.com/hashicorp/go-rootcerts v1.0.0 h1:Rqb66Oo1X/eSV1x66xbDccZjhJigjg0+e82kpwzSwCI=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=
@@ -413,6 +437,7 @@ github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs=
github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df h1:MZf03xP9WdakyXhOWuAD5uPK3wHh96wCsqe3hCMKh8E=
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
@@ -420,8 +445,8 @@ github.com/imdario/mergo v0.3.5 h1:JboBksRwiiAJWvIYJVo46AfV+IAIKZpfrSzVKj42R4Q=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e h1:txQltCyjXAqVVSZDArPEhUTg35hKwVIuXwtQo7eAMNQ=
github.com/influxdata/influxdb1-client v0.0.0-20190809212627-fc22c7df067e/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/instana/go-sensor v1.5.1 h1:GLxYsYiDWD15RSXDHS70VvTVU/CbwUimWrK6/e4eBPQ=
github.com/instana/go-sensor v1.5.1/go.mod h1:5dEieTqu59XZr2/X53xF2Px4v83aSRRZa/47VbxAVa4=
github.com/jcmturner/gofork v0.0.0-20190328161633-dc7c13fece03 h1:FUwcHNlEqkqLjLBdCp5PRlCFijNjvcYANOZXzCfXwCM=
@@ -468,10 +493,10 @@ github.com/labbsr0x/goh v1.0.1/go.mod h1:8K2UhVoaWXcCU7Lxoa2omWnC8gyW8px7/lmO61c
github.com/libkermit/compose v0.0.0-20171122111507-c04e39c026ad/go.mod h1:GyCk/ifDcqsU1tsRMMWqXANnTtxzcwEWscb7j5qmblM=
github.com/libkermit/docker v0.0.0-20171122101128-e6674d32b807/go.mod h1:std11u6pTaNwryy0Hy1dTQNdHKka1jNpflEieKtv5VE=
github.com/libkermit/docker-check v0.0.0-20171122104347-1113af38e591/go.mod h1:EBQ0jeOrBpOTkquwjmJl4W6z5xqlf5oA2LZfTqRNcO0=
github.com/linode/linodego v0.10.0 h1:AMdb82HVgY8o3mjBXJcUv9B+fnJjfDMn2rNRGbX+jvM=
github.com/linode/linodego v0.10.0/go.mod h1:cziNP7pbvE3mXIPneHj0oRY8L1WtGEIKlZ8LANE4eXA=
github.com/liquidweb/liquidweb-go v1.6.0 h1:vIj1I/Wf97fUnyirD+bi6Y63c0GiXk9nKI1+sFFl3G0=
github.com/liquidweb/liquidweb-go v1.6.0/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
github.com/linode/linodego v0.21.0/go.mod h1:UTpq1JUZD0CZsJ8rt+0CRkqbzrp1MbGakVPt2DXY5Mk=
github.com/liquidweb/liquidweb-go v1.6.1/go.mod h1:UDcVnAMDkZxpw4Y7NOHkqoeiGacVLEIG/i5J9cyixzQ=
github.com/looplab/fsm v0.1.0 h1:Qte7Zdn/5hBNbXzP7yxVU4OIFHWXBovyTT2LaBTyC20=
github.com/looplab/fsm v0.1.0/go.mod h1:m2VaOfDHxqXBBMgc26m6yUOwkFn8H2AlJDE+jd/uafI=
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
@@ -484,17 +509,18 @@ github.com/mailgun/ttlmap v0.0.0-20170619185759-c1c17f74874f/go.mod h1:8heskWJ5c
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.27 h1:aEH/kqUzUxGJ/UHcEKdJY+ugH6WEzsEBBSPa8zuy1aM=
github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ=
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
@@ -510,9 +536,7 @@ github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1D
github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.3.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY=
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -528,17 +552,27 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 h1:o6uBwrhM5C8Ll3MAAxrQxRHEu7FkapwTuI2WmL1rw4g=
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8=
github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg=
github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU=
github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k=
github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w=
github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
github.com/nrdcg/auroradns v1.0.1 h1:m/kBq83Xvy3cU261MOknd8BdnOk12q4lAWM+kOdsC2Y=
github.com/nrdcg/auroradns v1.0.1/go.mod h1:y4pc0i9QXYlFCWrhWrUSIETnZgrf4KuwjDIWmmXo3JI=
github.com/nrdcg/desec v0.5.0/go.mod h1:2ejvMazkav1VdDbv2HeQO7w+Ta1CGHqzQr27ZBYTuEQ=
github.com/nrdcg/dnspod-go v0.4.0 h1:c/jn1mLZNKF3/osJ6mz3QPxTudvPArXTjpkmYj0uK6U=
github.com/nrdcg/dnspod-go v0.4.0/go.mod h1:vZSoFSFeQVm2gWLMkyX61LZ8HI3BaqtHZWgPTGKr6KQ=
github.com/nrdcg/goinwx v0.7.0 h1:j6JlOp0nNwtvaP09TvKqc9pktjH81nOad0+Gx9S1t9U=
github.com/nrdcg/goinwx v0.7.0/go.mod h1:4tKJOCi/1lTxuw9/yB2Ez0aojwtUCSkckjc22eALpqE=
github.com/nrdcg/goinwx v0.8.1/go.mod h1:tILVc10gieBp/5PMvbcYeXM6pVQ+c9jxDZnpaR1UW7c=
github.com/nrdcg/namesilo v0.2.1 h1:kLjCjsufdW/IlC+iSfAqj0iQGgKjlbUUeDJio5Y6eMg=
github.com/nrdcg/namesilo v0.2.1/go.mod h1:lwMvfQTyYq+BbjJd30ylEG4GPSS6PII0Tia4rRpRiyw=
github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -550,6 +584,7 @@ github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
@@ -563,6 +598,7 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo=
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU=
@@ -571,15 +607,16 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ
github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/openzipkin/zipkin-go v0.2.2 h1:nY8Hti+WKaP0cRsSeQ026wU03QsM762XBeCXBb9NAWI=
github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4=
github.com/oracle/oci-go-sdk v7.0.0+incompatible h1:oj5ESjXwwkFRdhZSnPlShvLWYdt/IZ65RQxveYM3maA=
github.com/oracle/oci-go-sdk v7.0.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014 h1:37VE5TYj2m/FLA9SNr4z0+A0JefvTmR60Zwf8XSEV7c=
github.com/ovh/go-ovh v0.0.0-20181109152953-ba5adb4cf014/go.mod h1:joRatxRJaZBsY3JAOEMcoOp05CnZzsx4scTxi95DHyQ=
github.com/oracle/oci-go-sdk v24.2.0+incompatible/go.mod h1:VQb79nF8Z2cwLkLS35ukwStZIg5F66tcBccjip/j888=
github.com/ovh/go-ovh v1.1.0/go.mod h1:AxitLZ5HBRPyUd+Zl60Ajaag+rNTdVXWIkzfrVuTXWA=
github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
@@ -603,16 +640,19 @@ github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8=
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 h1:gQz4mCbXsO+nc9n1hCxHcGA3Zx3Eo+UHZoInFGUIXNM=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -621,6 +661,7 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.0.5 h1:3+auTFlqw+ZaQYJARz6ArODtkaIwtvBTx3N2NehQlL8=
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/rainycape/memcache v0.0.0-20150622160815-1031fa0ce2f2/go.mod h1:7tZKcyumwBO6qip7RNQ5r77yrssm9bfCowcLEBcU5IA=
github.com/rancher/go-rancher-metadata v0.0.0-20200311180630-7f4c936a06ac h1:wBGhHdXKICZmvAPWS8gQoMyOWDH7QAi9bU4Z1nDWnFU=
github.com/rancher/go-rancher-metadata v0.0.0-20200311180630-7f4c936a06ac/go.mod h1:67sLWL17mVlO1HFROaTBmU71NB4R8UNCesFHhg0f6LQ=
@@ -630,10 +671,10 @@ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6So
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sacloud/libsacloud v1.26.1 h1:td3Kd7lvpSAxxHEVpnaZ9goHmmhi0D/RfP0Rqqf/kek=
github.com/sacloud/libsacloud v1.26.1/go.mod h1:79ZwATmHLIFZIMd7sxA3LwzVy/B77uj3LDoToVTxDoQ=
github.com/sacloud/libsacloud v1.36.2/go.mod h1:P7YAOVmnIn3DKHqCZcUKYUXmSwGBm3yS7IBEjKVSrjg=
github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec h1:6ncX5ko6B9LntYM0YBRXkiSaZMmLYeZ/NWcmeB43mMY=
github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
github.com/santhosh-tekuri/jsonschema v1.2.4 h1:hNhW8e7t+H1vgY+1QeEQpveR6D4+OwKPXCfD2aieJis=
github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
@@ -654,13 +695,18 @@ github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIK
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
@@ -675,16 +721,17 @@ github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stvp/go-udp-testing v0.0.0-20191102171040-06b61409b154 h1:XGopsea1Dw7ecQ8JscCNQXDGYAKDiWjDeXnpN/+BY9g=
github.com/stvp/go-udp-testing v0.0.0-20191102171040-06b61409b154/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7 h1:CpHxIaZzVy26GqJn8ptRyto8fuoYOd1v0fXm9bG3wQ8=
github.com/timewasted/linode v0.0.0-20160829202747-37e84520dcf7/go.mod h1:imsgLplxEC/etjIhdr3dNzV3JeT27LbVu5pYWm0JCBY=
github.com/tinylib/msgp v1.0.2 h1:DfdQrzQa7Yh2es9SuLkixqxuXS2SxsdYn0KbdrOGWD8=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 h1:LnC5Kc/wtumK+WB441p7ynQJzVuNRJiqddSIE3IlSEQ=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/traefik/paerser v0.1.0 h1:B4v1tbvd8YnHsA7spwHKEWJoGrRP+2jYpIozsCMHhl0=
github.com/traefik/paerser v0.1.0/go.mod h1:yYnAgdEC2wJH5CgG75qGWC8SsFDEapg09o9RrA6FfrE=
github.com/transip/gotransip/v6 v6.0.2 h1:rOCMY607PYF+YvMHHtJt7eZRd0mx/uhyz6dsXWPmn+4=
github.com/transip/gotransip/v6 v6.0.2/go.mod h1:pQZ36hWWRahCUXkFWlx9Hs711gLd8J4qdgLdRzmtY+g=
github.com/traefik/traefik/v2 v2.3.0-rc6 h1:B1+uYaP9cyscs1K9+SQ2rJYO6BVoY18JwNKMzorF4vQ=
github.com/traefik/traefik/v2 v2.3.0-rc6/go.mod h1:CAemATo18BZPU8YbSRDLF/Q9v7W52WnRblbo2/BsizM=
github.com/traefik/yaegi v0.9.0/go.mod h1:FAYnRlZyuVlEkvnkHq3bvJ1lW5be6XuwgLdkYgYG6Lk=
github.com/transip/gotransip/v6 v6.2.0/go.mod h1:pQZ36hWWRahCUXkFWlx9Hs711gLd8J4qdgLdRzmtY+g=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/uber-go/atomic v1.3.2 h1:Azu9lPBWRNKzYXSIwRfgRuDuS0YKsK4NFhiQv98gkxo=
github.com/uber-go/atomic v1.3.2/go.mod h1:/Ct5t2lcmbJ4OSe/waGBoaVvVqtO0bmtfVNex1PFV8g=
@@ -696,15 +743,16 @@ github.com/unrolled/render v1.0.2/go.mod h1:gN9T0NhL4Bfbwu8ann7Ry/TGHYfosul+J0ob
github.com/unrolled/secure v1.0.7 h1:BcQHp3iKZyZCKj5gRqwQG+5urnGBF00wGgoPPwtheVQ=
github.com/unrolled/secure v1.0.7/go.mod h1:uGc1OcRF8gCVBA+ANksKmvM85Hka6SZtQIbrKc3sHS4=
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/vdemeester/shakers v0.1.0 h1:K+n9sSyUCg2ywmZkv+3c7vsYZfivcfKhMh8kRxCrONM=
github.com/vdemeester/shakers v0.1.0/go.mod h1:IZ1HHynUOQt32iQ3rvAeVddXLd19h/6LWiKsh9RZtAQ=
github.com/vulcand/oxy v1.1.0 h1:DbBijGo1+6cFqR9jarkMxasdj0lgWwrrFtue6ijek4Q=
github.com/vulcand/oxy v1.1.0/go.mod h1:ADiMYHi8gkGl2987yQIzDRoXZilANF4WtKaQ92OppKY=
github.com/vulcand/predicate v1.1.0 h1:Gq/uWopa4rx/tnZu2opOSBqHK63Yqlou/SzrbwdJiNg=
github.com/vulcand/predicate v1.1.0/go.mod h1:mlccC5IRBoc2cIFmCB8ZM62I3VDb6p2GXESMHa3CnZg=
github.com/vultr/govultr v0.4.2 h1:9i8xKZ+xp6vwZ9raqHoBLzhB4wCnMj7nOQTj5YIRLWY=
github.com/vultr/govultr v0.4.2/go.mod h1:TUuUizMOFc7z+PNMssb6iGjKjQfpw5arIaOLfocVudQ=
github.com/vultr/govultr v0.5.0/go.mod h1:wZZXZbYbqyY1n3AldoeYNZK4Wnmmoq6dNFkvd5TV3ss=
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
@@ -723,6 +771,8 @@ go.elastic.co/fastjson v1.0.0 h1:ooXV/ABvf+tBul26jcVViPT3sBir0PvXgibYB1IQQzg=
go.elastic.co/fastjson v1.0.0/go.mod h1:PmeUOMMtLHQr9ZS9J9owrAVg0FkaZDRZJEFTTGHtchs=
go.etcd.io/bbolt v1.3.1-etcd.8 h1:6J7QAKqfFBGnU80KRnuQxfjjeE5xAGE/qB810I3FQHQ=
go.etcd.io/bbolt v1.3.1-etcd.8/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg=
go.etcd.io/etcd v3.3.13+incompatible h1:jCejD5EMnlGxFvcGRyEV4VGlENZc7oPQX6o0t7n3xbw=
go.etcd.io/etcd v3.3.13+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI=
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
@@ -735,12 +785,16 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277 h1:d9qaMM+ODpCq+9We41//fu/sHsTnXcrqd1en3x+GKy4=
go.uber.org/ratelimit v0.0.0-20180316092928-c15da0234277/go.mod h1:2X8KaoNd1J0lZV+PxJk/5+DGbO/tpwLR1m++a7FnB/Y=
go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA=
go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
golang.org/x/crypto v0.0.0-20180621125126-a49355c7e3f8/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
@@ -753,12 +807,14 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191202143827-86a70503ff7e/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6 h1:TjszyFsQsyZNHwdVdZ5m7bjmreu0znc2kRYsEml9/Ww=
golang.org/x/crypto v0.0.0-20200317142112-1b76d66859c6/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200414173820-0848c9571904 h1:bXoxMPcSLOq08zI3/c5dEBT6lE4eh+jOh886GHrn6V8=
golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -790,7 +846,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -808,11 +863,13 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190930134127-c5a3c61f89f3/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191126235420-ef20fe5d7933/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -820,6 +877,8 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -857,12 +916,15 @@ golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191025021431-6c3a3bfe00ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191128015809-6d18c012aee9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -871,17 +933,21 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190921001708-c4c64cad1fd0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e h1:EHBhcS0mlXEAVwNyO2dLfjToGsyY4j24pTs2ScHnX7s=
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -904,14 +970,18 @@ golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191203134012-c197fd4bf371/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
@@ -938,6 +1008,7 @@ google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/
google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
@@ -948,6 +1019,7 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
@@ -967,9 +1039,11 @@ google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZi
google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
@@ -980,9 +1054,13 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
gopkg.in/h2non/gock.v1 v1.0.15 h1:SzLqcIlb/fDfg7UvukMpNcWsu7sI5tWwL+KCATZqks0=
gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
@@ -990,6 +1068,7 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.51.1 h1:GyboHr4UqMiLUybYjd22ZjQIKEJEpgtLXtuGbR21Oho=
gopkg.in/ini.v1 v1.51.1/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/jcmturner/aescts.v1 v1.0.1 h1:cVVZBK2b1zY26haWB4vbBiZrfFQnfbTVrE3xZq6hrEw=
gopkg.in/jcmturner/aescts.v1 v1.0.1/go.mod h1:nsR8qBOg+OucoIW+WMhB3GspUQXq9XorLnQb9XtvcOo=
gopkg.in/jcmturner/dnsutils.v1 v1.0.1 h1:cIuC1OLRGZrld+16ZJvvZxVJeKPsvd5eUIvxfoN5hSM=
@@ -1000,20 +1079,21 @@ gopkg.in/jcmturner/gokrb5.v7 v7.2.3 h1:hHMV/yKPwMnJhPuPx7pH2Uw/3Qyf+thJYlisUc440
gopkg.in/jcmturner/gokrb5.v7 v7.2.3/go.mod h1:l8VISx+WGYp+Fp7KRbsiUuXTTOnxIc3Tuvyavf11/WM=
gopkg.in/jcmturner/rpc.v1 v1.1.0 h1:QHIUxTX1ISuAv9dD2wJ9HWQVuWDX/Zc0PfeC2tjc4rU=
gopkg.in/jcmturner/rpc.v1 v1.1.0/go.mod h1:YIdkC4XfD6GXbzje11McwsDuOlZQSb9W4vfLvuNnlv8=
gopkg.in/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc h1:GAcf+t0o8gdJAdSFYdE9wChu4bIyguMVqz0RHiFL5VY=
gopkg.in/ns1/ns1-go.v2 v2.0.0-20190730140822-b51389932cbc/go.mod h1:VV+3haRsgDiVLxyifmMBrBIuCWFBPYKbRssXB9z67Hw=
gopkg.in/ns1/ns1-go.v2 v2.4.2/go.mod h1:GMnKY+ZuoJ+lVLL+78uSTjwTz2jMazq6AfGKQOYhsPk=
gopkg.in/redis.v5 v5.2.9 h1:MNZYOLPomQzZMfpN3ZtD1uyJ2IDonTTlxYiV/pEApiw=
gopkg.in/redis.v5 v5.2.9/go.mod h1:6gtv0/+A4iM08kdRfocWYB3bLX2tebpNtfKlFT6H4mY=
gopkg.in/resty.v1 v1.9.1/go.mod h1:vo52Hzryw9PnPHcJfPsBiFW62XhNx5OczbV9y+IMpgc=
gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/square/go-jose.v2 v2.3.1 h1:SK5KegNXmKmqE342YYN2qPHEnUYeoMiXXl1poUlI+o4=
gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
@@ -1045,8 +1125,10 @@ k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU=
k8s.io/client-go v0.18.6 h1:I+oWqJbibLSGsZj8Xs8F0aWVXJVIoUHWaaJV3kUN/Zw=
k8s.io/client-go v0.18.6/go.mod h1:/fwtGLjYMS1MaM5oi+eXhKwG+1UHidUEXRh6cNsdO0Q=
k8s.io/code-generator v0.18.0/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
k8s.io/code-generator v0.18.2 h1:C1Nn2JiMf244CvBDKVPX0W2mZFJkVBg54T8OV7/Imso=
k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc=
k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4=
k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk=
@@ -1070,3 +1152,4 @@ sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnM
sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o=
sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU=
@@ -1,8 +1,8 @@
apiVersion: v2
name: maesh
name: traefik-mesh
version: 2.1.2
appVersion: v1.3.2
description: Maesh - Simpler Service Mesh
description: Traefik Mesh - Simpler Service Mesh
type: application
keywords:
- traefik
@@ -10,7 +10,7 @@ keywords:
- smi
home: https://mae.sh/
sources:
- https://github.com/containous/maesh/
- https://github.com/traefik/mesh/
maintainers:
- name: emilevauge
email: emile@vauge.com
@@ -24,7 +24,7 @@ maintainers:
email: harold@containo.us
- name: kevinpollet
email: kevin@containo.us
icon: https://raw.githubusercontent.com/containous/maesh/v1.2/docs/content/assets/img/maesh.png
icon: https://raw.githubusercontent.com/traefik/mesh/master/docs/content/assets/img/traefik-mesh.png
dependencies:
- name: tracing
version: 0.0.3
@@ -1,10 +1,10 @@
# Maesh Helm Chart Guidelines
# Traefik Mesh Helm Chart Guidelines
This document outlines the guidelines for developing, managing and extending the Maesh Helm Chart.
This document outlines the guidelines for developing, managing and extending the Traefik Mesh Helm Chart.
## Optionality
All non-critical features (features not mandatory to start Maesh) in the Helm Chart must be optional.
All non-critical features (features not mandatory to start Traefik Mesh) in the Helm Chart must be optional.
All non-critical features should be disabled (commented out) in the `values.yaml` file.
All optional non-critical features should be disabled (commented out) in the `values.yaml` file, and have a comment `# (Optional)` in the line above.
This allows minimal configuration, and ease of extension.
@@ -13,7 +13,7 @@ This allows minimal configuration, and ease of extension.
```yaml
image:
name: containous/maesh
name: traefik/mesh
```
This feature is critical, and therefore is defined clearly in the `values.yaml` file.
@@ -64,7 +64,7 @@ These should just be added as an uncommented non-critical feature:
```yaml
image:
name: containous/maesh
name: traefik/mesh
# (Optional)
# pullPolicy: IfNotPresent
```
@@ -1,9 +1,9 @@
# Maesh
# Traefik Mesh
Maesh is a simple, yet full-featured service mesh. It is container-native and fits as your de-facto service mesh in your Kubernetes cluster.
Traefik Mesh is a simple, yet full-featured service mesh. It is container-native and fits as your de-facto service mesh in your Kubernetes cluster.
It supports the latest Service Mesh Interface specification [SMI](https://smi-spec.io/) that facilitates integration with pre-existing solution.
Moreover, Maesh is opt-in by default, which means that your existing services are unaffected until you decide to add them to the mesh.
Moreover, Traefik Mesh is opt-in by default, which means that your existing services are unaffected until you decide to add them to the mesh.
## Prerequisites
@@ -13,83 +13,82 @@ Moreover, Maesh is opt-in by default, which means that your existing services ar
## Installing the Chart
To install the chart with the release name `maesh`:
To install the chart with the release name `traefik-mesh`:
```bash
$ helm repo add maesh https://containous.github.io/maesh/charts
$ helm repo add traefik-mesh https://traefik.github.io/mesh/charts
$ helm repo update
$ helm install maesh maesh/maesh
$ helm install traefik-mesh traefik-mesh/traefik-mesh
```
You can use the `--namespace my-namespace` flag to deploy Maesh in a custom namespace and the `--set "key1=val1,key2=val2,..."`
flag to configure it. Where `key1=val1`, `key2=val2`, `...` are chart values that you can find at
https://github.com/containous/maesh/blob/master/helm/chart/maesh/values.yaml.
You can use the `--namespace my-namespace` flag to deploy Traefik Mesh in a custom namespace and the `--set "key1=val1,key2=val2,..."` flag to configure it.
Where `key1=val1`, `key2=val2`, `...` are chart values that you can find at https://github.com/traefik/mesh/blob/master/helm/chart/mesh/values.yaml.
## Uninstalling the Chart
To uninstall the chart with the release name `maesh`:
To uninstall the chart with the release name `traefik-mesh`:
```bash
$ helm uninstall maesh
$ helm uninstall traefik-mesh
```
## Configuration
The following table lists the configurable parameters of the Maesh chart and their default values.
The following table lists the configurable parameters of the Traefik Mesh chart and their default values.
| Key | Description | Default |
|--------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
| acl | Enable ACL mode. | `false` |
| clusterDomain | Custom cluster domain. | `"cluster.local"` |
| controller.affinity | Node/Pod affinities for the controller. | `{}` |
| controller.ignoreNamespaces | Namespace to ignore for the controller. | `[]` |
| controller.image.name | Docker image for the controller. | `"containous/maesh"` |
| controller.image.pullPolicy | Pull policy for the controller Docker image. | `"IfNotPresent"` |
| controller.image.pullSecret | Name of the Secret resource containing the private registry credentials for the controller image. | |
| controller.image.tag | Tag for the controller container Docker image. | `{{ .Chart.AppVersion }}` |
| controller.logFormat | Controller log format. | `"common"` |
| controller.logLevel | Controller log level. | `"error"` |
| controller.nodeSelector | Node labels for pod assignment. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) for more details. | `{}` |
| controller.resources.limit.cpu | Maximum amount of CPU units that the controller container can use. | `"200m"` |
| controller.resources.limit.mem | Maximum amount of memory that the controller container can use. | `"100Mi"` |
| controller.resources.request.cpu | Amount of CPU units that the controller container requests. | `"100m"` |
| controller.resources.request.mem | Amount of memory that the controller container requests. | `"50Mi"` |
| controller.tolerations | Tolerations section for the controller. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for more details. | `[]` |
| controller.watchNamespaces | Namespace to watch for the controller. | `[]` |
| defaultMode | The default mesh mode. This means that new mesh services will operate by default in HTTP mode. | `"http"` |
| kubedns | Enable KubeDNS support. | `false` |
| limits.http | Number of HTTP ports to allocate. | `10` |
| limits.tcp | Number of TCP ports to allocate. | `25` |
| limits.udp | Number of UDP ports to allocate. | `25` |
| logFormat | Log format for the controller and the mesh proxy. | `"common"` |
| logLevel | Log level for the controller and the mesh proxy. | `"error"` |
| mesh.additionalArguments | Arguments to be added to the mesh proxy container args. | `[]` |
| mesh.annotations | Annotations to be added to the mesh proxy deployment. | `{}` |
| mesh.env | Additional environment variables to set in the mesh proxy pods. | `[]` |
| mesh.envFrom | Additional environment variables to set in the mesh proxy pods. | `[]` |
| mesh.forwardingTimeouts.dialTimeout | Maximum duration allowed for a connection to a backend server to be established. See the [Traefik documentation](https://docs.traefik.io/routing/overview/#forwardingtimeoutsdialtimeout) for more details. | `"30s"` |
| mesh.forwardingTimeouts.idleConnTimeout | Maximum amount of time an idle (keep-alive) connection will remain idle before closing itself. See the [Traefik documentation](https://docs.traefik.io/routing/overview/#forwardingtimeoutsresponseheadertimeout) for more details. | `"1s"` |
| mesh.forwardingTimeouts.responseHeaderTimeout | Maximum amount of time, if non-zero, to wait for a server's response headers after fully writing the request (including its body, if any). See the [Traefik documentation](https://docs.traefik.io/routing/overview/#forwardingtimeoutsresponseheadertimeout) for more details. | `"0s"` |
| mesh.image.name | Docker image for the mesh proxy. | `"traefik"` |
| mesh.image.pullPolicy | Pull policy for the mesh proxy image. | `"IfNotPresent"` |
| mesh.image.pullSecret | Name of the Secret resource containing the private registry credentials for the mesh proxy image. | |
| mesh.image.tag | Tag for the mesh proxy container Docker image. | `"v2.3"` |
| mesh.logFormat | Mesh proxy log format. | `"common"` |
| mesh.logLevel | Mesh proxy log level. | `"error"` |
| mesh.nodeSelector | Node labels for pod assignment. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) for more details. | `{}` |
| mesh.podAnnotations | Annotations to be added to the mesh proxy pods. | `{}` |
| mesh.pollInterval | Polling interval to get the configuration from the controller. | `"1s"` |
| mesh.pollTimeout | Polling timeout when connecting to the controller configuration endpoint. | `"1s"` |
| mesh.resources.limit.cpu | Maximum amount of CPU units that the mesh proxy container can use. | `"200m"` |
| mesh.resources.limit.mem | Maximum amount of memory that the mesh proxy container can use. | `"100Mi"` |
| mesh.resources.request.cpu | Amount of CPU units that the mesh proxy container requests. | `"100m"` |
| mesh.resources.request.mem | Amount of memory that the mesh proxy container requests. | `"50Mi"` |
| mesh.tolerations | Tolerations section for the mesh proxy. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for more details. | `[]` |
| Key | Description | Default |
|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------|
| acl | Enable ACL mode. | `false` |
| clusterDomain | Custom cluster domain. | `"cluster.local"` |
| controller.affinity | Node/Pod affinities for the controller. | `{}` |
| controller.ignoreNamespaces | Namespace to ignore for the controller. | `[]` |
| controller.image.name | Docker image for the controller. | `"traefik/mesh"` |
| controller.image.pullPolicy | Pull policy for the controller Docker image. | `"IfNotPresent"` |
| controller.image.pullSecret | Name of the Secret resource containing the private registry credentials for the controller image. | |
| controller.image.tag | Tag for the controller container Docker image. | `{{ .Chart.AppVersion }}` |
| controller.logFormat | Controller log format. | `"common"` |
| controller.logLevel | Controller log level. | `"error"` |
| controller.nodeSelector | Node labels for pod assignment. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) for more details. | `{}` |
| controller.resources.limit.cpu | Maximum amount of CPU units that the controller container can use. | `"200m"` |
| controller.resources.limit.mem | Maximum amount of memory that the controller container can use. | `"100Mi"` |
| controller.resources.request.cpu | Amount of CPU units that the controller container requests. | `"100m"` |
| controller.resources.request.mem | Amount of memory that the controller container requests. | `"50Mi"` |
| controller.tolerations | Tolerations section for the controller. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for more details. | `[]` |
| controller.watchNamespaces | Namespace to watch for the controller. | `[]` |
| defaultMode | The default mesh mode. This means that new services will operate by default in HTTP mode. | `"http"` |
| kubedns | Enable KubeDNS support. | `false` |
| limits.http | Number of HTTP ports to allocate. | `10` |
| limits.tcp | Number of TCP ports to allocate. | `25` |
| limits.udp | Number of UDP ports to allocate. | `25` |
| logFormat | Log format for the controller and the proxy. | `"common"` |
| logLevel | Log level for the controller and the proxy. | `"error"` |
| proxy.additionalArguments | Arguments to be added to the proxy container args. | `[]` |
| proxy.annotations | Annotations to be added to the proxy deployment. | `{}` |
| proxy.env | Additional environment variables to set in the proxy pods. | `[]` |
| proxy.envFrom | Additional environment variables to set in the proxy pods. | `[]` |
| proxy.forwardingTimeouts.dialTimeout | Maximum duration allowed for a connection to a backend server to be established. See the [Traefik documentation](https://docs.traefik.io/routing/overview/#forwardingtimeoutsdialtimeout) for more details. | `"30s"` |
| proxy.forwardingTimeouts.idleConnTimeout | Maximum amount of time an idle (keep-alive) connection will remain idle before closing itself. See the [Traefik documentation](https://docs.traefik.io/routing/overview/#forwardingtimeoutsresponseheadertimeout) for more details. | `"1s"` |
| proxy.forwardingTimeouts.responseHeaderTimeout | Maximum amount of time, if non-zero, to wait for a server's response headers after fully writing the request (including its body, if any). See the [Traefik documentation](https://docs.traefik.io/routing/overview/#forwardingtimeoutsresponseheadertimeout) for more details. | `"0s"` |
| proxy.image.name | Docker image for the proxy. | `"traefik"` |
| proxy.image.pullPolicy | Pull policy for the proxy image. | `"IfNotPresent"` |
| proxy.image.pullSecret | Name of the Secret resource containing the private registry credentials for the proxy image. | |
| proxy.image.tag | Tag for the proxy container Docker image. | `"v2.3"` |
| proxy.logFormat | Proxy log format. | `"common"` |
| proxy.logLevel | Proxy log level. | `"error"` |
| proxy.nodeSelector | Node labels for pod assignment. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) for more details. | `{}` |
| proxy.podAnnotations | Annotations to be added to the proxy pods. | `{}` |
| proxy.pollInterval | Polling interval to get the configuration from the controller. | `"1s"` |
| proxy.pollTimeout | Polling timeout when connecting to the controller configuration endpoint. | `"1s"` |
| proxy.resources.limit.cpu | Maximum amount of CPU units that the proxy container can use. | `"200m"` |
| proxy.resources.limit.mem | Maximum amount of memory that the proxy container can use. | `"100Mi"` |
| proxy.resources.request.cpu | Amount of CPU units that the proxy container requests. | `"100m"` |
| proxy.resources.request.mem | Amount of memory that the proxy container requests. | `"50Mi"` |
| proxy.tolerations | Tolerations section for the proxy. See the [K8S documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/) for more details. | `[]` |
### Metrics
The following table lists the available parameters to configure the metrics integrations on the mesh proxies.
As the mesh proxies are vanilla Traefik, check out the corresponding [documentation](https://docs.traefik.io/observability/metrics/overview/) for more details.
The following table lists the available parameters to configure the metrics integrations on the Traefik Mesh proxies.
As the proxies are vanilla Traefik, check out the corresponding [documentation](https://docs.traefik.io/observability/metrics/overview/) for more details.
| Key | Description | Default |
|--------------------------------------------------|------------------------------------------------------------------------------------------------------------------|--------------------------------------------|
@@ -123,8 +122,8 @@ As the mesh proxies are vanilla Traefik, check out the corresponding [documentat
### Tracing
The following table lists the available parameters to configure the tracing integrations on the mesh proxies.
As the mesh proxies are vanilla Traefik, check out the corresponding [documentation](https://docs.traefik.io/observability/tracing/overview/) for more details.
The following table lists the available parameters to configure the tracing integrations on the Traefik Mesh proxies.
As the proxies are vanilla Traefik, check out the corresponding [documentation](https://docs.traefik.io/observability/tracing/overview/) for more details.
| Key | Description | Default |
|------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
@@ -6,7 +6,7 @@ metadata:
labels:
app: maesh
component: grafana
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -7,7 +7,7 @@ metadata:
labels:
app: maesh
component: grafana
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -102,7 +102,7 @@ metadata:
labels:
app: maesh
component: grafana
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
data:
@@ -146,7 +146,7 @@ data:
editable: true
options:
path: /var/lib/grafana/dashboards
homeDashboardId: maesh
homeDashboardId: traefik-mesh
---
apiVersion: v1
@@ -157,7 +157,7 @@ metadata:
labels:
app: maesh
component: grafana
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -6,7 +6,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -8,7 +8,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
data:
@@ -31,7 +31,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
data:
@@ -44,7 +44,7 @@ data:
- "/prometheus/rules/*.yaml"
scrape_configs:
- job_name: 'maesh'
- job_name: 'traefik-mesh'
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
@@ -73,7 +73,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -177,7 +177,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
annotations:
@@ -6,7 +6,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
roleRef:
@@ -26,7 +26,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
rules:
@@ -57,7 +57,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
@@ -70,6 +70,6 @@ metadata:
labels:
app: maesh
component: grafana
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
@@ -7,7 +7,7 @@ metadata:
labels:
app: maesh
component: grafana
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -29,7 +29,7 @@ metadata:
labels:
app: maesh
component: prometheus
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -5,7 +5,7 @@ metadata:
name: jaeger
labels:
app: jaeger
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -6,7 +6,7 @@ metadata:
namespace: {{ .Release.Namespace }}
labels:
app: jaeger
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
automountServiceAccountToken: false
@@ -86,4 +86,4 @@ spec:
type: string
namespace:
description: Namespace of this source.
type: string
type: string
@@ -93,4 +93,4 @@ spec:
storage: false
- name: v1alpha1
served: false
storage: false
storage: false
@@ -68,4 +68,4 @@ spec:
type: string
weight:
description: Traffic weight value of this backend.
type: number
type: number
@@ -3,28 +3,28 @@
{{/*
Define the Chart version Label.
*/}}
{{- define "maesh.chartLabel" -}}
{{- define "traefikMesh.chartLabel" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version -}}
{{- end -}}
{{/*
Define the templated image with tag.
Define the templated controller image with tag.
*/}}
{{- define "maesh.controllerImage" -}}
{{- define "traefikMesh.controllerImage" -}}
{{- printf "%s:%s" .Values.controller.image.name ( .Values.controller.image.tag | default .Chart.AppVersion ) -}}
{{- end -}}
{{/*
Define the templated mesh image with tag.
Define the templated proxy image with tag.
*/}}
{{- define "maesh.meshImage" -}}
{{- printf "%s:%s" .Values.mesh.image.name ( .Values.mesh.image.tag | default "v2.3" ) -}}
{{- define "traefikMesh.proxyImage" -}}
{{- printf "%s:%s" .Values.proxy.image.name ( .Values.proxy.image.tag | default "v2.3" ) -}}
{{- end -}}
{{/*
Define the watchNamespaces List.
Define the controller watchNamespaces List.
*/}}
{{- define "maesh.controllerWatchNamespaces" -}}
{{- define "traefikMesh.controllerWatchNamespaces" -}}
--watchNamespaces=
{{- range $idx, $ns := .Values.controller.watchNamespaces }}
{{- if $idx }},{{ end }}
@@ -33,9 +33,9 @@ Define the watchNamespaces List.
{{- end -}}
{{/*
Define the ignoreNamespaces List.
Define the controller ignoreNamespaces List.
*/}}
{{- define "maesh.controllerIgnoreNamespaces" -}}
{{- define "traefikMesh.controllerIgnoreNamespaces" -}}
--ignoreNamespaces=
{{- range $idx, $ns := .Values.controller.ignoreNamespaces }}
{{- if $idx }},{{ end }}
@@ -2,12 +2,12 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: maesh-controller
name: traefik-mesh-controller
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: controller
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -27,7 +27,7 @@ spec:
prometheus.io/scrape: "true"
prometheus.io/port: "4646"
spec:
serviceAccountName: maesh-controller
serviceAccountName: traefik-mesh-controller
securityContext:
runAsNonRoot: true
runAsUser: 999
@@ -48,8 +48,8 @@ spec:
{{ toYaml . | indent 8 }}
{{- end }}
containers:
- name: maesh-controller
image: {{ include "maesh.controllerImage" . | quote }}
- name: traefik-mesh-controller
image: {{ include "traefikMesh.controllerImage" . | quote }}
imagePullPolicy: {{ .Values.controller.image.pullPolicy | default "IfNotPresent" }}
args:
{{- if or .Values.controller.logLevel .Values.logLevel }}
@@ -66,10 +66,10 @@ spec:
{{- end }}
- "--namespace={{ .Release.Namespace }}"
{{- if .Values.controller.watchNamespaces }}
- {{ include "maesh.controllerWatchNamespaces" . | quote }}
- {{ include "traefikMesh.controllerWatchNamespaces" . | quote }}
{{- end }}
{{- if .Values.controller.ignoreNamespaces }}
- {{ include "maesh.controllerIgnoreNamespaces" . | quote }}
- {{ include "traefikMesh.controllerIgnoreNamespaces" . | quote }}
{{- end }}
{{- if .Values.limits.http }}
- "--limitHTTPPort={{ .Values.limits.http }}"
@@ -97,8 +97,8 @@ spec:
initialDelaySeconds: 3
periodSeconds: 1
initContainers:
- name: maesh-prepare
image: {{ include "maesh.controllerImage" . | quote }}
- name: traefik-mesh-prepare
image: {{ include "traefikMesh.controllerImage" . | quote }}
imagePullPolicy: {{ .Values.controller.image.pullPolicy | default "IfNotPresent"}}
args:
- "prepare"
@@ -2,12 +2,12 @@
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
name: maesh-controller
name: traefik-mesh-controller
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: controller
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
spec:
@@ -2,12 +2,12 @@
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: maesh-controller-role
name: traefik-mesh-controller-role
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: controller
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
rules:
@@ -63,19 +63,19 @@ rules:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: maesh-controller
name: traefik-mesh-controller
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: controller
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: maesh-controller-role
name: traefik-mesh-controller-role
subjects:
- kind: ServiceAccount
name: maesh-controller
name: traefik-mesh-controller
namespace: {{ .Release.Namespace }}
@@ -2,12 +2,12 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: maesh-controller
name: traefik-mesh-controller
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: controller
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
automountServiceAccountToken: true
@@ -2,7 +2,7 @@
apiVersion: v1
kind: Service
metadata:
name: maesh-controller
name: traefik-mesh-controller
namespace: {{ .Release.Namespace }}
labels:
app: maesh
@@ -11,7 +11,6 @@ spec:
type: ClusterIP
ports:
- port: 9000
name: mesh-controller-api
targetPort: api
selector:
app: maesh
@@ -2,12 +2,12 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: maesh-cleanup
name: traefik-mesh-cleanup
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: cleanup
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
annotations:
@@ -19,12 +19,12 @@ metadata:
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: maesh-cleanup-role
name: traefik-mesh-cleanup-role
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: cleanup
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
annotations:
@@ -60,12 +60,12 @@ rules:
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: maesh-cleanup
name: traefik-mesh-cleanup
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: cleanup
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
annotations:
@@ -75,22 +75,22 @@ metadata:
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: maesh-cleanup-role
name: traefik-mesh-cleanup-role
subjects:
- kind: ServiceAccount
name: maesh-cleanup
name: traefik-mesh-cleanup
namespace: {{ .Release.Namespace }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: maesh-cleanup
name: traefik-mesh-cleanup
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: cleanup
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
annotations:
@@ -107,15 +107,15 @@ spec:
component: cleanup
release: {{ .Release.Name | quote}}
spec:
serviceAccountName: maesh-cleanup
serviceAccountName: traefik-mesh-cleanup
restartPolicy: Never
{{- if .Values.controller.image.pullSecret }}
imagePullSecrets:
- name: {{ .Values.controller.image.pullSecret }}
{{- end }}
containers:
- name: maesh-cleanup
image: {{ include "maesh.controllerImage" . | quote }}
- name: traefik-mesh-cleanup
image: {{ include "traefikMesh.controllerImage" . | quote }}
imagePullPolicy: {{ .Values.controller.image.pullPolicy | default "IfNotPresent" }}
args:
- "cleanup"
@@ -8,7 +8,7 @@ metadata:
labels:
app: maesh
component: coredns
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
data:
@@ -8,7 +8,7 @@ metadata:
labels:
app: maesh
component: coredns
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
spec:
@@ -29,7 +29,7 @@ spec:
component: coredns
release: {{ .Release.Name | quote }}
spec:
serviceAccountName: maesh-coredns
serviceAccountName: traefik-mesh-coredns
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
@@ -6,10 +6,10 @@ metadata:
labels:
app: maesh
component: coredns
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
name: maesh-coredns-role
name: traefik-mesh-coredns-role
namespace: {{ .Release.Namespace }}
rules:
- apiGroups:
@@ -33,12 +33,12 @@ rules:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: maesh-coredns
name: traefik-mesh-coredns
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: coredns
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
annotations:
@@ -46,9 +46,9 @@ metadata:
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: maesh-coredns-role
name: traefik-mesh-coredns-role
subjects:
- kind: ServiceAccount
name: maesh-coredns
name: traefik-mesh-coredns
namespace: {{ .Release.Namespace }}
{{- end }}
@@ -3,12 +3,12 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: maesh-coredns
name: traefik-mesh-coredns
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: coredns
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
{{- end}}
@@ -8,7 +8,7 @@ metadata:
labels:
app: maesh
component: coredns
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote}}
heritage: {{ .Release.Service | quote}}
annotations:
@@ -2,15 +2,15 @@
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: maesh-mesh
name: traefik-mesh-proxy
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: maesh-mesh
chart: {{ include "maesh.chartLabel" . | quote }}
chart: {{ include "traefikMesh.chartLabel" . | quote }}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
{{- with .Values.mesh.annotations }}
{{- with .Values.proxy.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
@@ -29,36 +29,36 @@ spec:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"
{{- with .Values.mesh.podAnnotations }}
{{- with .Values.proxy.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
serviceAccountName: maesh-mesh
serviceAccountName: traefik-mesh-proxy
securityContext:
runAsNonRoot: true
runAsUser: 999
terminationGracePeriodSeconds: 30
{{- if .Values.mesh.image.pullSecret }}
{{- if .Values.proxy.image.pullSecret }}
imagePullSecrets:
- name: {{ .Values.mesh.image.pullSecret }}
- name: {{ .Values.proxy.image.pullSecret }}
{{- end }}
{{- with .Values.mesh.nodeSelector }}
{{- with .Values.proxy.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .Values.mesh.tolerations }}
{{- with .Values.proxy.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
containers:
- name: maesh-mesh
image: {{ include "maesh.meshImage" . | quote }}
imagePullPolicy: {{ .Values.mesh.image.pullPolicy | default "IfNotPresent" }}
{{- with .Values.mesh.env }}
- name: traefik-mesh-proxy
image: {{ include "traefikMesh.proxyImage" . | quote }}
imagePullPolicy: {{ .Values.proxy.image.pullPolicy | default "IfNotPresent" }}
{{- with .Values.proxy.env }}
env:
{{- toYaml . | nindent 12 }}
{{- end }}
{{- with .Values.mesh.envFrom }}
{{- with .Values.proxy.envFrom }}
envFrom:
{{- toYaml . | nindent 12 }}
{{- end }}
@@ -76,12 +76,12 @@ spec:
{{- range $i, $port := untilStep 15000 ((add (.Values.limits.udp|int) 15000)|int) 1 }}
- {{ printf "\"--entryPoints.udp-%d.address=:%d/udp\"" $port $port }}
{{- end }}
- {{ printf "--providers.http.endpoint=http://maesh-controller.%s.svc.%s:9000/api/configuration/current" .Release.Namespace (default "cluster.local" .Values.clusterDomain) | quote }}
{{- if .Values.mesh.pollInterval }}
- "--providers.http.pollInterval={{ .Values.mesh.pollInterval }}"
- {{ printf "--providers.http.endpoint=http://traefik-mesh-controller.%s.svc.%s:9000/api/configuration/current" .Release.Namespace (default "cluster.local" .Values.clusterDomain) | quote }}
{{- if .Values.proxy.pollInterval }}
- "--providers.http.pollInterval={{ .Values.proxy.pollInterval }}"
{{- end }}
{{- if .Values.mesh.pollTimeout }}
- "--providers.http.pollTimeout={{ .Values.mesh.pollTimeout }}"
{{- if .Values.proxy.pollTimeout }}
- "--providers.http.pollTimeout={{ .Values.proxy.pollTimeout }}"
{{- end }}
{{- if .Values.tracing.jaeger.enabled }}
{{- if .Values.tracing.jaeger.localAgentHostPort }}
@@ -161,22 +161,22 @@ spec:
- "--api.dashboard=false"
- "--api.insecure"
- "--ping"
{{- if .Values.mesh.forwardingTimeouts }}
{{- if .Values.mesh.forwardingTimeouts.dialTimeout }}
- "--serversTransport.forwardingTimeouts.dialTimeout={{ .Values.mesh.forwardingTimeouts.dialTimeout }}"
{{- if .Values.proxy.forwardingTimeouts }}
{{- if .Values.proxy.forwardingTimeouts.dialTimeout }}
- "--serversTransport.forwardingTimeouts.dialTimeout={{ .Values.proxy.forwardingTimeouts.dialTimeout }}"
{{- end }}
{{- if .Values.mesh.forwardingTimeouts.responseHeaderTimeout }}
- "--serversTransport.forwardingTimeouts.responseHeaderTimeout={{ .Values.mesh.forwardingTimeouts.responseHeaderTimeout }}"
{{- if .Values.proxy.forwardingTimeouts.responseHeaderTimeout }}
- "--serversTransport.forwardingTimeouts.responseHeaderTimeout={{ .Values.proxy.forwardingTimeouts.responseHeaderTimeout }}"
{{- end }}
{{- if .Values.mesh.forwardingTimeouts.idleConnTimeout }}
- "--serversTransport.forwardingTimeouts.idleConnTimeout={{ .Values.mesh.forwardingTimeouts.idleConnTimeout }}"
{{- if .Values.proxy.forwardingTimeouts.idleConnTimeout }}
- "--serversTransport.forwardingTimeouts.idleConnTimeout={{ .Values.proxy.forwardingTimeouts.idleConnTimeout }}"
{{- end }}
{{- end }}
{{- if or .Values.mesh.logLevel .Values.logLevel }}
- "--log.level={{ or .Values.mesh.logLevel .Values.logLevel }}"
{{- if or .Values.proxy.logLevel .Values.logLevel }}
- "--log.level={{ or .Values.proxy.logLevel .Values.logLevel }}"
{{- end }}
{{- if or .Values.mesh.logFormat .Values.logFormat }}
- "--log.format={{ or .Values.mesh.logFormat .Values.logFormat }}"
{{- if or .Values.proxy.logFormat .Values.logFormat }}
- "--log.format={{ or .Values.proxy.logFormat .Values.logFormat }}"
{{- end }}
{{- if .Values.metrics.prometheus.enabled }}
- "--metrics.prometheus=true"
@@ -253,7 +253,7 @@ spec:
- "--metrics.statsd.prefix={{ .Values.metrics.statsd.prefix }}"
{{- end }}
{{- end }}
{{- with .Values.mesh.additionalArguments }}
{{- with .Values.proxy.additionalArguments }}
{{- range . }}
- {{ . | quote }}
{{- end }}
@@ -278,8 +278,8 @@ spec:
periodSeconds: 1
resources:
requests:
memory: {{ .Values.mesh.resources.request.mem }}
cpu: {{ .Values.mesh.resources.request.cpu }}
memory: {{ .Values.proxy.resources.request.mem }}
cpu: {{ .Values.proxy.resources.request.cpu }}
limits:
memory: {{ .Values.mesh.resources.limit.mem }}
cpu: {{ .Values.mesh.resources.limit.cpu }}
memory: {{ .Values.proxy.resources.limit.mem }}
cpu: {{ .Values.proxy.resources.limit.cpu }}
@@ -2,12 +2,12 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: maesh-mesh
name: traefik-mesh-proxy
namespace: {{ .Release.Namespace }}
labels:
app: maesh
component: maesh-mesh
chart: {{ include "maesh.chartLabel" . | quote}}
chart: {{ include "traefikMesh.chartLabel" . | quote}}
release: {{ .Release.Name | quote }}
heritage: {{ .Release.Service | quote }}
automountServiceAccountToken: false
@@ -1,4 +1,4 @@
# Default values for Maesh.
# Default values for Traefik Mesh.
# acl: true
@@ -18,7 +18,7 @@ limits:
controller:
image:
name: containous/maesh
name: traefik/mesh
# (Optional)
# pullPolicy: IfNotPresent
# (Optional)
@@ -48,7 +48,7 @@ controller:
tolerations: []
affinity: {}
mesh:
proxy:
image:
name: traefik
# (Optional)
+16 -17
View File
@@ -4,11 +4,11 @@ import (
"net/http"
"time"
"github.com/containous/maesh/integration/k3d"
"github.com/containous/maesh/integration/tool"
"github.com/containous/maesh/integration/try"
"github.com/go-check/check"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/integration/k3d"
"github.com/traefik/mesh/integration/tool"
"github.com/traefik/mesh/integration/try"
checker "github.com/vdemeester/shakers"
)
@@ -23,11 +23,11 @@ func (s *ACLDisabledSuite) SetUpSuite(c *check.C) {
var err error
requiredImages := []k3d.DockerImage{
{Name: "containous/maesh:latest", Local: true},
{Name: "traefik/mesh:latest", Local: true},
{Name: "traefik:v2.3"},
{Name: "containous/whoami:v1.0.1"},
{Name: "containous/whoamitcp:v0.0.2"},
{Name: "containous/whoamiudp:v0.0.1"},
{Name: "traefik/whoami:latest"},
{Name: "traefik/whoamitcp:latest"},
{Name: "traefik/whoamiudp:latest"},
{Name: "giantswarm/tiny-tools:3.9"},
}
@@ -38,17 +38,17 @@ func (s *ACLDisabledSuite) SetUpSuite(c *check.C) {
)
c.Assert(err, checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, maeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, traefikMeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, testNamespace), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, smiCRDs), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/tool/tool.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/maesh/controller-acl-disabled.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/maesh/proxy.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/traefik-mesh/controller-acl-disabled.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/traefik-mesh/proxy.yaml"), checker.IsNil)
c.Assert(s.cluster.WaitReadyPod("tool", testNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("maesh-controller", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("maesh-mesh", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("traefik-mesh-controller", traefikMeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("traefik-mesh-proxy", traefikMeshNamespace, 60*time.Second), checker.IsNil)
s.tool = tool.New(s.logger, "tool", testNamespace)
}
@@ -65,7 +65,7 @@ func (s *ACLDisabledSuite) TestHTTPService(c *check.C) {
c.Assert(s.cluster.Apply(s.logger, "testdata/acl_disabled/http"), checker.IsNil)
defer s.cluster.Delete(s.logger, "testdata/acl_disabled/http")
s.assertHTTPServiceReachable(c, "server-http.test.maesh:8080", "server-http", 60*time.Second)
s.assertHTTPServiceReachable(c, "server-http.test.traefik.mesh:8080", "server-http", 60*time.Second)
}
// TestTCPService deploys a TCP service "server" with one Pod called "server" and asserts this service is
@@ -74,7 +74,7 @@ func (s *ACLDisabledSuite) TestTCPService(c *check.C) {
c.Assert(s.cluster.Apply(s.logger, "testdata/acl_disabled/tcp"), checker.IsNil)
defer s.cluster.Delete(s.logger, "testdata/acl_disabled/tcp")
s.assertTCPServiceReachable(c, "server-tcp.test.maesh", 8080, "server-tcp", 60*time.Second)
s.assertTCPServiceReachable(c, "server-tcp.test.traefik.mesh", 8080, "server-tcp", 60*time.Second)
}
// TestUDPService deploys a UDP service "server" with one Pod called "server" and asserts this service is
@@ -83,7 +83,7 @@ func (s *ACLDisabledSuite) TestUDPervice(c *check.C) {
c.Assert(s.cluster.Apply(s.logger, "testdata/acl_disabled/udp"), checker.IsNil)
defer s.cluster.Delete(s.logger, "testdata/acl_disabled/udp")
s.assertUDPServiceReachable(c, "server-udp.test.maesh", 8080, "server-udp", 60*time.Second)
s.assertUDPServiceReachable(c, "server-udp.test.traefik.mesh", 8080, "server-udp", 60*time.Second)
}
// TestSplitTraffic deploys an HTTP service "server" and a TrafficSplit attached to it configured to distribute equally
@@ -93,8 +93,7 @@ func (s *ACLDisabledSuite) TestSplitTraffic(c *check.C) {
c.Assert(s.cluster.Apply(s.logger, "testdata/acl_disabled/traffic-split"), checker.IsNil)
defer s.cluster.Delete(s.logger, "testdata/acl_disabled/traffic-split")
s.assertHTTPServiceReachable(c, "server-split.test.maesh:8080", "server-v1", 60*time.Second)
s.assertHTTPServiceReachable(c, "server-split.test.maesh:8080", "server-v2", 30*time.Second)
s.assertHTTPServiceReachable(c, "server-split.test.traefik.mesh:8080", "server-v1", 60*time.Second)
}
func (s *ACLDisabledSuite) assertHTTPServiceReachable(c *check.C, url, expectedHostname string, timeout time.Duration) {
+18 -18
View File
@@ -4,11 +4,11 @@ import (
"net/http"
"time"
"github.com/containous/maesh/integration/k3d"
"github.com/containous/maesh/integration/tool"
"github.com/containous/maesh/integration/try"
"github.com/go-check/check"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/integration/k3d"
"github.com/traefik/mesh/integration/tool"
"github.com/traefik/mesh/integration/try"
checker "github.com/vdemeester/shakers"
)
@@ -24,9 +24,9 @@ func (s *ACLEnabledSuite) SetUpSuite(c *check.C) {
var err error
requiredImages := []k3d.DockerImage{
{Name: "containous/maesh:latest", Local: true},
{Name: "traefik/mesh:latest", Local: true},
{Name: "traefik:v2.3"},
{Name: "containous/whoami:v1.0.1"},
{Name: "traefik/whoami:latest"},
{Name: "giantswarm/tiny-tools:3.9"},
}
@@ -37,19 +37,19 @@ func (s *ACLEnabledSuite) SetUpSuite(c *check.C) {
)
c.Assert(err, checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, maeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, traefikMeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, testNamespace), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, smiCRDs), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/tool/tool-authorized.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/tool/tool-forbidden.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/maesh/controller-acl-enabled.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/maesh/proxy.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/traefik-mesh/controller-acl-enabled.yaml"), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, "testdata/traefik-mesh/proxy.yaml"), checker.IsNil)
c.Assert(s.cluster.WaitReadyPod("tool-authorized", testNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyPod("tool-forbidden", testNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("maesh-controller", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("maesh-mesh", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("traefik-mesh-controller", traefikMeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("traefik-mesh-proxy", traefikMeshNamespace, 60*time.Second), checker.IsNil)
s.toolAuthorized = tool.New(s.logger, "tool-authorized", testNamespace)
s.toolForbidden = tool.New(s.logger, "tool-forbidden", testNamespace)
@@ -66,16 +66,16 @@ func (s *ACLEnabledSuite) TestHTTPServiceWithTrafficTarget(c *check.C) {
defer s.cluster.Delete(s.logger, "testdata/acl_enabled/http")
s.logger.Infof("Asserting TrafficTarget with no HTTPRouteGroup are enforced")
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http.test.maesh:8080", nil, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolForbidden, "server-http.test.maesh:8080", nil, http.StatusForbidden)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http.test.traefik.mesh:8080", nil, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolForbidden, "server-http.test.traefik.mesh:8080", nil, http.StatusForbidden)
s.logger.Infof("Asserting HTTPRouteGroup path filtering is enforced")
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-api.test.maesh:8080/api", nil, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-api.test.maesh:8080", nil, http.StatusForbidden)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-api.test.traefik.mesh:8080/api", nil, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-api.test.traefik.mesh:8080", nil, http.StatusForbidden)
s.logger.Infof("Asserting HTTPRouteGroup header filtering is enforced")
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-header.test.maesh:8080", map[string]string{"Authorized": "true"}, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-header.test.maesh:8080", map[string]string{"Authorized": "false"}, http.StatusForbidden)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-header.test.traefik.mesh:8080", map[string]string{"Authorized": "true"}, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-header.test.traefik.mesh:8080", map[string]string{"Authorized": "false"}, http.StatusForbidden)
}
func (s *ACLEnabledSuite) TestHTTPServiceWithTrafficSplit(c *check.C) {
@@ -83,8 +83,8 @@ func (s *ACLEnabledSuite) TestHTTPServiceWithTrafficSplit(c *check.C) {
defer s.cluster.Delete(s.logger, "testdata/acl_enabled/traffic-split")
s.logger.Info("Asserting TrafficTarget is enforced")
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-split.test.maesh:8080", nil, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolForbidden, "server-http-split.test.maesh:8080", nil, http.StatusForbidden)
s.assertHTTPServiceStatus(c, s.toolAuthorized, "server-http-split.test.traefik.mesh:8080", nil, http.StatusOK)
s.assertHTTPServiceStatus(c, s.toolForbidden, "server-http-split.test.traefik.mesh:8080", nil, http.StatusForbidden)
}
func (s *ACLEnabledSuite) assertHTTPServiceStatus(c *check.C, t *tool.Tool, url string, headers map[string]string, expectedStatus int) {
+11 -6
View File
@@ -5,11 +5,11 @@ import (
"fmt"
"time"
"github.com/containous/maesh/integration/k3d"
"github.com/containous/maesh/integration/tool"
"github.com/containous/maesh/integration/try"
"github.com/go-check/check"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/integration/k3d"
"github.com/traefik/mesh/integration/tool"
"github.com/traefik/mesh/integration/try"
checker "github.com/vdemeester/shakers"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/util/retry"
@@ -26,7 +26,7 @@ func (s *CoreDNSSuite) SetUpSuite(c *check.C) {
var err error
requiredImages := []k3d.DockerImage{
{Name: "containous/whoami:v1.0.1"},
{Name: "traefik/whoami:latest"},
{Name: "coredns/coredns:1.3.1"},
{Name: "coredns/coredns:1.4.0"},
{Name: "coredns/coredns:1.5.2"},
@@ -42,7 +42,7 @@ func (s *CoreDNSSuite) SetUpSuite(c *check.C) {
)
c.Assert(err, checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, maeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, traefikMeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, testNamespace), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, smiCRDs), checker.IsNil)
@@ -87,13 +87,18 @@ func (s *CoreDNSSuite) testCoreDNSVersion(c *check.C, version string) {
c.Assert(s.setCoreDNSVersion(version), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("coredns", metav1.NamespaceSystem, 60*time.Second), checker.IsNil)
c.Assert(maeshPrepare(), checker.IsNil)
c.Assert(traefikMeshPrepare(), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("coredns", metav1.NamespaceSystem, 60*time.Second), checker.IsNil)
err := try.Retry(func() error {
return s.tool.Dig("whoami.whoami.maesh")
}, 30*time.Second)
c.Assert(err, checker.IsNil)
err = try.Retry(func() error {
return s.tool.Dig("whoami.whoami.traefik.mesh")
}, 30*time.Second)
c.Assert(err, checker.IsNil)
}
func (s *CoreDNSSuite) setCoreDNSVersion(version string) error {
+23 -23
View File
@@ -6,9 +6,9 @@ import (
"strings"
"time"
"github.com/containous/maesh/integration/k3d"
"github.com/go-check/check"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/integration/k3d"
checker "github.com/vdemeester/shakers"
)
@@ -22,7 +22,7 @@ func (s *HelmSuite) SetUpSuite(c *check.C) {
var err error
requiredImages := []k3d.DockerImage{
{Name: "containous/maesh:latest", Local: true},
{Name: "traefik/mesh:latest", Local: true},
{Name: "traefik:v2.3"},
}
@@ -33,7 +33,7 @@ func (s *HelmSuite) SetUpSuite(c *check.C) {
)
c.Assert(err, checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, maeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, traefikMeshNamespace), checker.IsNil)
}
func (s *HelmSuite) TearDownSuite(c *check.C) {
@@ -43,36 +43,36 @@ func (s *HelmSuite) TearDownSuite(c *check.C) {
}
func (s *HelmSuite) TestACLDisabled(c *check.C) {
s.installHelmMaesh(c, false, false)
defer s.uninstallHelmMaesh(c)
s.installHelmTraefikMesh(c, false, false)
defer s.uninstallHelmTraefikMesh(c)
c.Assert(s.cluster.WaitReadyDeployment("maesh-controller", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("maesh-mesh", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("traefik-mesh-controller", traefikMeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("traefik-mesh-proxy", traefikMeshNamespace, 60*time.Second), checker.IsNil)
}
func (s *HelmSuite) TestACLEnabled(c *check.C) {
s.installHelmMaesh(c, true, false)
defer s.uninstallHelmMaesh(c)
s.installHelmTraefikMesh(c, true, false)
defer s.uninstallHelmTraefikMesh(c)
c.Assert(s.cluster.WaitReadyDeployment("maesh-controller", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("maesh-mesh", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("traefik-mesh-controller", traefikMeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("traefik-mesh-proxy", traefikMeshNamespace, 60*time.Second), checker.IsNil)
}
func (s *HelmSuite) TestKubeDNSEnabled(c *check.C) {
s.installHelmMaesh(c, false, true)
defer s.uninstallHelmMaesh(c)
s.installHelmTraefikMesh(c, false, true)
defer s.uninstallHelmTraefikMesh(c)
c.Assert(s.cluster.WaitReadyDeployment("maesh-controller", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("maesh-mesh", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("traefik-mesh-controller", traefikMeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDaemonSet("traefik-mesh-proxy", traefikMeshNamespace, 60*time.Second), checker.IsNil)
}
func (s *HelmSuite) installHelmMaesh(c *check.C, acl bool, kubeDNS bool) {
s.logger.Info("Installing Maesh via helm...")
func (s *HelmSuite) installHelmTraefikMesh(c *check.C, acl bool, kubeDNS bool) {
s.logger.Info("Installing Traefik Mesh via helm...")
args := []string{
"install", "powpow", "../helm/chart/maesh",
"--values", "testdata/maesh/values.yaml",
"--namespace", maeshNamespace,
"install", "powpow", "../helm/chart/mesh",
"--values", "testdata/traefik-mesh/values.yaml",
"--namespace", traefikMeshNamespace,
}
if kubeDNS {
@@ -93,12 +93,12 @@ func (s *HelmSuite) installHelmMaesh(c *check.C, acl bool, kubeDNS bool) {
}
}
func (s *HelmSuite) uninstallHelmMaesh(c *check.C) {
s.logger.Info("Uninstalling Maesh via helm...")
func (s *HelmSuite) uninstallHelmTraefikMesh(c *check.C) {
s.logger.Info("Uninstalling Traefik Mesh via helm...")
args := []string{
"uninstall", "powpow",
"--namespace", maeshNamespace,
"--namespace", traefikMeshNamespace,
}
cmd := exec.Command("helm", args...)
+12 -12
View File
@@ -13,14 +13,14 @@ import (
)
var (
integration = flag.Bool("integration", false, "run integration tests")
debug = flag.Bool("debug", false, "debug log level")
masterURL = "https://localhost:8443"
k3dClusterName = "maesh-integration"
maeshNamespace = "maesh"
maeshBinary = "../dist/maesh"
smiCRDs = "../helm/chart/maesh/crds/"
testNamespace = "test"
integration = flag.Bool("integration", false, "run integration tests")
debug = flag.Bool("debug", false, "debug log level")
masterURL = "https://localhost:8443"
k3dClusterName = "traefik-mesh-integration"
traefikMeshNamespace = "traefik-mesh"
traefikMeshBinary = "../dist/traefik-mesh"
smiCRDs = "../helm/chart/mesh/crds/"
testNamespace = "test"
)
func Test(t *testing.T) {
@@ -42,22 +42,22 @@ func Test(t *testing.T) {
check.TestingT(t)
}
func maeshPrepare() error {
func traefikMeshPrepare() error {
args := []string{
"prepare",
"--masterurl=" + masterURL,
"--kubeconfig=" + os.Getenv("KUBECONFIG"),
"--loglevel=debug",
"--clusterdomain=cluster.local",
"--namespace=" + maeshNamespace,
"--namespace=" + traefikMeshNamespace,
}
cmd := exec.Command(maeshBinary, args...)
cmd := exec.Command(traefikMeshBinary, args...)
cmd.Env = os.Environ()
output, err := cmd.CombinedOutput()
if err != nil {
return fmt.Errorf("maesh prepare has failed - %s: %w", string(output), err)
return fmt.Errorf("traefik mesh prepare has failed - %s: %w", string(output), err)
}
return nil
+2 -2
View File
@@ -10,9 +10,9 @@ import (
"strings"
"time"
"github.com/containous/maesh/integration/try"
"github.com/containous/maesh/pkg/k8s"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/integration/try"
"github.com/traefik/mesh/pkg/k8s"
corev1 "k8s.io/api/core/v1"
kubeerror "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+12 -7
View File
@@ -3,11 +3,11 @@ package integration
import (
"time"
"github.com/containous/maesh/integration/k3d"
"github.com/containous/maesh/integration/tool"
"github.com/containous/maesh/integration/try"
"github.com/go-check/check"
"github.com/sirupsen/logrus"
"github.com/traefik/mesh/integration/k3d"
"github.com/traefik/mesh/integration/tool"
"github.com/traefik/mesh/integration/try"
checker "github.com/vdemeester/shakers"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
@@ -23,7 +23,7 @@ func (s *KubeDNSSuite) SetUpSuite(c *check.C) {
var err error
requiredImages := []k3d.DockerImage{
{Name: "containous/whoami:v1.0.1"},
{Name: "traefik/whoami:latest"},
{Name: "coredns/coredns:1.6.3"},
{Name: "giantswarm/tiny-tools:3.9"},
{Name: "gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.7"},
@@ -39,7 +39,7 @@ func (s *KubeDNSSuite) SetUpSuite(c *check.C) {
)
c.Assert(err, checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, maeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, traefikMeshNamespace), checker.IsNil)
c.Assert(s.cluster.CreateNamespace(s.logger, testNamespace), checker.IsNil)
c.Assert(s.cluster.Apply(s.logger, smiCRDs), checker.IsNil)
@@ -49,7 +49,7 @@ func (s *KubeDNSSuite) SetUpSuite(c *check.C) {
c.Assert(s.cluster.WaitReadyPod("tool", testNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("kube-dns", metav1.NamespaceSystem, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("coredns", maeshNamespace, 60*time.Second), checker.IsNil)
c.Assert(s.cluster.WaitReadyDeployment("coredns", traefikMeshNamespace, 60*time.Second), checker.IsNil)
s.tool = tool.New(s.logger, "tool", testNamespace)
}
@@ -63,7 +63,7 @@ func (s *KubeDNSSuite) TearDownSuite(c *check.C) {
func (s *KubeDNSSuite) TestKubeDNSDig(c *check.C) {
s.logger.Info("Asserting KubeDNS has been patched successfully and can be dug")
c.Assert(maeshPrepare(), checker.IsNil)
c.Assert(traefikMeshPrepare(), checker.IsNil)
// Wait for kubeDNS, as the pods will be restarted by prepare.
c.Assert(s.cluster.WaitReadyDeployment("kube-dns", metav1.NamespaceSystem, 60*time.Second), checker.IsNil)
@@ -72,4 +72,9 @@ func (s *KubeDNSSuite) TestKubeDNSDig(c *check.C) {
return s.tool.Dig("whoami.whoami.maesh")
}, 60*time.Second)
c.Assert(err, checker.IsNil)
err = try.Retry(func() error {
return s.tool.Dig("whoami.whoami.traefik.mesh")
}, 60*time.Second)
c.Assert(err, checker.IsNil)
}
+2 -2
View File
@@ -9,7 +9,7 @@ metadata:
spec:
containers:
- name: server-http
image: containous/whoami:v1.0.1
image: traefik/whoami:latest
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
@@ -32,4 +32,4 @@ spec:
name: server-http
targetPort: 80
selector:
app: server-http
app: server-http
+2 -2
View File
@@ -9,7 +9,7 @@ metadata:
spec:
containers:
- name: server-tcp
image: containous/whoamitcp:v0.0.2
image: traefik/whoamitcp:latest
imagePullPolicy: IfNotPresent
readinessProbe:
tcpSocket:
@@ -26,7 +26,7 @@ metadata:
app: server-tcp
plop: cool
annotations:
maesh.containo.us/traffic-type: tcp
mesh.traefik.io/traffic-type: tcp
spec:
type: ClusterIP
ports:
@@ -9,7 +9,7 @@ metadata:
spec:
containers:
- name: server-v1
image: containous/whoami:v1.0.1
image: traefik/whoami:latest
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
@@ -9,7 +9,7 @@ metadata:
spec:
containers:
- name: server-v2
image: containous/whoami:v1.0.1
image: traefik/whoami:latest
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
+2 -2
View File
@@ -9,7 +9,7 @@ metadata:
spec:
containers:
- name: server-udp
image: containous/whoamiudp:v0.0.1
image: traefik/whoamiudp:latest
imagePullPolicy: IfNotPresent
ports:
- name: udp
@@ -25,7 +25,7 @@ metadata:
app: server-udp
plop: cool
annotations:
maesh.containo.us/traffic-type: udp
mesh.traefik.io/traffic-type: udp
spec:
type: ClusterIP
ports:
+2 -2
View File
@@ -10,7 +10,7 @@ spec:
serviceAccountName: server
containers:
- name: server-http
image: containous/whoami:v1.0.1
image: traefik/whoami:latest
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
@@ -33,4 +33,4 @@ spec:
name: server-http
targetPort: 80
selector:
app: server-http
app: server-http
+2 -2
View File
@@ -10,7 +10,7 @@ spec:
serviceAccountName: server-api
containers:
- name: server-http-api
image: containous/whoami:v1.0.1
image: traefik/whoami:latest
imagePullPolicy: IfNotPresent
readinessProbe:
httpGet:
@@ -33,4 +33,4 @@ spec:
name: server-http-api
targetPort: 80
selector:
app: server-http-api
app: server-http-api

Some files were not shown because too many files have changed in this diff Show More