diff --git a/kubernetes/servicemesh/applications/playlists-api/app.go b/kubernetes/servicemesh/applications/playlists-api/app.go
index 58294ebf2..eab17fd78 100644
--- a/kubernetes/servicemesh/applications/playlists-api/app.go
+++ b/kubernetes/servicemesh/applications/playlists-api/app.go
@@ -11,21 +11,76 @@ import (
"io/ioutil"
"context"
"github.com/go-redis/redis/v8"
+
+ "github.com/opentracing/opentracing-go"
+ jaegercfg "github.com/uber/jaeger-client-go/config"
+ "github.com/opentracing/opentracing-go/ext"
+
+ "github.com/uber/jaeger-client-go/zipkin"
+ jaegerlog "github.com/uber/jaeger-client-go/log"
+ "github.com/uber/jaeger-lib/metrics"
)
+const serviceName = "playlists-api"
+
var environment = os.Getenv("ENVIRONMENT")
var redis_host = os.Getenv("REDIS_HOST")
var redis_port = os.Getenv("REDIS_PORT")
+var jaeger_host_port = os.Getenv("JAEGER_HOST_PORT")
var ctx = context.Background()
var rdb *redis.Client
func main() {
+ cfg := jaegercfg.Configuration{
+ Sampler: &jaegercfg.SamplerConfig{
+ Type: "const",
+ Param: 1,
+ },
+
+ // Log the emitted spans to stdout.
+ Reporter: &jaegercfg.ReporterConfig{
+ LogSpans: true,
+ LocalAgentHostPort: jaeger_host_port,
+ },
+ }
+
+ jLogger := jaegerlog.StdLogger
+ jMetricsFactory := metrics.NullFactory
+
+ zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()
+
+ closer, err := cfg.InitGlobalTracer(
+ serviceName,
+ jaegercfg.Logger(jLogger),
+ jaegercfg.Metrics(jMetricsFactory),
+ jaegercfg.Injector(opentracing.HTTPHeaders, zipkinPropagator),
+ jaegercfg.Extractor(opentracing.HTTPHeaders, zipkinPropagator),
+ jaegercfg.ZipkinSharedRPCSpan(true),
+ )
+
+
+ if err != nil {
+ panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))
+ }
+ defer closer.Close()
+
router := httprouter.New()
router.GET("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params){
+
+ spanCtx, _ := opentracing.GlobalTracer().Extract(
+ opentracing.HTTPHeaders,
+ opentracing.HTTPHeadersCarrier(r.Header),
+ )
+
+ span := opentracing.StartSpan("playlists-api / GET", ext.RPCServerOption(spanCtx))
+ defer span.Finish()
+
cors(w)
- playlistsJson := getPlaylists()
+
+ ctx := opentracing.ContextWithSpan(context.Background(), span)
+ playlistsJson := getPlaylists(ctx)
playlists := []playlist{}
err := json.Unmarshal([]byte(playlistsJson), &playlists)
@@ -38,23 +93,39 @@ func main() {
vs := []videos{}
for vi := range playlists[pi].Videos {
-
+
+ videoSpan := opentracing.StartSpan("videos-api GET", opentracing.ChildOf(span.Context()))
+ //span, _ := opentracing.StartSpanFromContext(ctx, "videos-api GET")
v := videos{}
- videoResp, err := http.Get("http://videos-api:10010/" + playlists[pi].Videos[vi].Id)
+
+ req, err := http.NewRequest("GET", "http://videos-api:10010/" + playlists[pi].Videos[vi].Id, nil)
+ if err != nil {
+ panic(err)
+ }
+
+ videoSpan.Tracer().Inject(
+ span.Context(),
+ opentracing.HTTPHeaders,
+ opentracing.HTTPHeadersCarrier(req.Header),
+ )
+
+ videoResp, err :=http.DefaultClient.Do(req)
if err != nil {
fmt.Println(err)
+ videoSpan.SetTag("error", true)
break
}
defer videoResp.Body.Close()
+ videoSpan.Finish()
+
video, err := ioutil.ReadAll(videoResp.Body)
if err != nil {
panic(err)
}
-
err = json.Unmarshal(video, &v)
if err != nil {
@@ -90,12 +161,16 @@ func main() {
log.Fatal(http.ListenAndServe(":10010", router))
}
-func getPlaylists()(response string){
+func getPlaylists(ctx context.Context)(response string){
+
+ span, _ := opentracing.StartSpanFromContext(ctx, "playlists-api - redis-get")
+ defer span.Finish()
playlistData, err := rdb.Get(ctx, "playlists").Result()
if err != nil {
fmt.Println(err)
fmt.Println("error occured retrieving playlists from Redis")
+ span.SetTag("error", true)
return "[]"
}
diff --git a/kubernetes/servicemesh/applications/playlists-api/deploy.yaml b/kubernetes/servicemesh/applications/playlists-api/deploy.yaml
index 320e102ec..d26dd9495 100644
--- a/kubernetes/servicemesh/applications/playlists-api/deploy.yaml
+++ b/kubernetes/servicemesh/applications/playlists-api/deploy.yaml
@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: playlists-api
- image: aimvector/service-mesh:playlists-api-1.0.0
+ image: aimvector/service-mesh:playlists-api-2.0.4
imagePullPolicy : Always
ports:
- containerPort: 10010
@@ -32,6 +32,8 @@ spec:
value: "playlists-db"
- name: "REDIS_PORT"
value: "6379"
+ - name: "JAEGER_HOST_PORT"
+ value: "collector.linkerd-jaeger:14268"
---
apiVersion: v1
kind: Service
diff --git a/kubernetes/servicemesh/applications/playlists-api/go.mod b/kubernetes/servicemesh/applications/playlists-api/go.mod
index 235c3e8ba..94177eaab 100644
--- a/kubernetes/servicemesh/applications/playlists-api/go.mod
+++ b/kubernetes/servicemesh/applications/playlists-api/go.mod
@@ -1,9 +1,14 @@
-module example.com/playlists-api
-
-go 1.14
-
-require (
- github.com/go-redis/redis/v8 v8.0.0-beta.7 // indirect
- github.com/julienschmidt/httprouter v1.3.0 // indirect
- github.com/sirupsen/logrus v1.6.0 // indirect
-)
+module example.com/playlists-api
+
+go 1.14
+
+require (
+ github.com/go-redis/redis/v8 v8.0.0-beta.7
+ github.com/julienschmidt/httprouter v1.3.0
+ github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e
+ github.com/pkg/errors v0.9.1 // indirect
+ github.com/sirupsen/logrus v1.6.0
+ github.com/uber/jaeger-client-go v2.25.0+incompatible
+ github.com/uber/jaeger-lib v2.4.1+incompatible
+ go.uber.org/atomic v1.7.0 // indirect
+)
diff --git a/kubernetes/servicemesh/applications/playlists-api/go.sum b/kubernetes/servicemesh/applications/playlists-api/go.sum
index 243c915e1..c35ec4508 100644
--- a/kubernetes/servicemesh/applications/playlists-api/go.sum
+++ b/kubernetes/servicemesh/applications/playlists-api/go.sum
@@ -1,130 +1,142 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60=
-github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9 h1:h2Ul3Ym2iVZWMQGYmulVUJ4LSkBm1erp9mUkPwtMoLg=
-github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-redis/redis v6.15.8+incompatible h1:BKZuG6mCnRj5AOaWJXoCgf6rqTYnYJLe4en2hxT7r9o=
-github.com/go-redis/redis/v8 v8.0.0-beta.7 h1:4HiY+qfsyz8OUr9zyAP2T1CJ0SFRY4mKFvm9TEznuv8=
-github.com/go-redis/redis/v8 v8.0.0-beta.7/go.mod h1:FGJAWDWFht1sQ4qxyJHZZbVyvnVcKQN0E3u5/5lRz+g=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-go.opentelemetry.io/otel v0.7.0 h1:u43jukpwqR8EsyeJOMgrsUgZwVI1e1eVw7yuzRkD1l0=
-go.opentelemetry.io/otel v0.7.0/go.mod h1:aZMyHG5TqDOXEgH2tyLiXSUKly1jT3yqE9PmrzIeCdo=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-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-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc=
-golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-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=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60=
+github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9 h1:h2Ul3Ym2iVZWMQGYmulVUJ4LSkBm1erp9mUkPwtMoLg=
+github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-redis/redis v6.15.8+incompatible h1:BKZuG6mCnRj5AOaWJXoCgf6rqTYnYJLe4en2hxT7r9o=
+github.com/go-redis/redis/v8 v8.0.0-beta.7 h1:4HiY+qfsyz8OUr9zyAP2T1CJ0SFRY4mKFvm9TEznuv8=
+github.com/go-redis/redis/v8 v8.0.0-beta.7/go.mod h1:FGJAWDWFht1sQ4qxyJHZZbVyvnVcKQN0E3u5/5lRz+g=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e h1:fI6mGTyggeIYVmGhf80XFHxTupjOexbCppgTNDkv9AA=
+github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/uber/jaeger-client-go v1.6.0 h1:3+zLlq+4npI5fg8IsgAje3YsP7TcEdNzJScyqFIzxEQ=
+github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U=
+github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo=
+github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
+github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+go.opentelemetry.io/otel v0.7.0 h1:u43jukpwqR8EsyeJOMgrsUgZwVI1e1eVw7yuzRkD1l0=
+go.opentelemetry.io/otel v0.7.0/go.mod h1:aZMyHG5TqDOXEgH2tyLiXSUKly1jT3yqE9PmrzIeCdo=
+go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+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-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc=
+golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+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=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/kubernetes/servicemesh/applications/videos-api/app.go b/kubernetes/servicemesh/applications/videos-api/app.go
index 0f1bdda5b..670cc7df8 100644
--- a/kubernetes/servicemesh/applications/videos-api/app.go
+++ b/kubernetes/servicemesh/applications/videos-api/app.go
@@ -7,31 +7,91 @@ import (
"github.com/go-redis/redis/v8"
"fmt"
"context"
+ "time"
+ "strings"
"os"
"math/rand"
+ "github.com/opentracing/opentracing-go"
+ jaegercfg "github.com/uber/jaeger-client-go/config"
+ //"github.com/uber/jaeger-client-go"
+ "github.com/opentracing/opentracing-go/ext"
+ "github.com/uber/jaeger-client-go/zipkin"
+ jaegerlog "github.com/uber/jaeger-client-go/log"
+ "github.com/uber/jaeger-lib/metrics"
)
+const serviceName = "videos-api"
+
var environment = os.Getenv("ENVIRONMENT")
var redis_host = os.Getenv("REDIS_HOST")
var redis_port = os.Getenv("REDIS_PORT")
+var jaeger_host_port = os.Getenv("JAEGER_HOST_PORT")
var flaky = os.Getenv("FLAKY")
+var delay = os.Getenv("DELAY")
+
var ctx = context.Background()
var rdb *redis.Client
func main() {
+ cfg := jaegercfg.Configuration{
+ Sampler: &jaegercfg.SamplerConfig{
+ Type: "const",
+ Param: 1,
+ },
+
+ // Log the emitted spans to stdout.
+ Reporter: &jaegercfg.ReporterConfig{
+ LogSpans: true,
+ LocalAgentHostPort: jaeger_host_port,
+ },
+ }
+
+ jLogger := jaegerlog.StdLogger
+ jMetricsFactory := metrics.NullFactory
+
+ zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()
+
+ closer, err := cfg.InitGlobalTracer(
+ serviceName,
+ jaegercfg.Logger(jLogger),
+ jaegercfg.Metrics(jMetricsFactory),
+ jaegercfg.Injector(opentracing.HTTPHeaders, zipkinPropagator),
+ jaegercfg.Extractor(opentracing.HTTPHeaders, zipkinPropagator),
+ jaegercfg.ZipkinSharedRPCSpan(true),
+ )
+
+
+ if err != nil {
+ panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))
+ }
+ defer closer.Close()
+
router := httprouter.New()
router.GET("/:id", func(w http.ResponseWriter, r *http.Request, p httprouter.Params){
+ spanCtx, _ := opentracing.GlobalTracer().Extract(
+ opentracing.HTTPHeaders,
+ opentracing.HTTPHeadersCarrier(r.Header),
+ )
+
+ span := opentracing.StartSpan("videos-api /id GET", ext.RPCServerOption(spanCtx))
+ defer span.Finish()
+
if flaky == "true"{
if rand.Intn(90) < 30 {
panic("flaky error occurred ")
}
}
- video := video(w,r,p)
+ ctx := opentracing.ContextWithSpan(context.Background(), span)
+ video := video(w,r,p, ctx)
+
+ if strings.Contains(video, "jM36M39MA3I") && delay == "true" {
+ time.Sleep(6 * time.Second)
+ }
cors(w)
fmt.Fprintf(w, "%s", video)
@@ -47,19 +107,22 @@ func main() {
log.Fatal(http.ListenAndServe(":10010", router))
}
-func video(writer http.ResponseWriter, request *http.Request, p httprouter.Params)(response string){
+func video(writer http.ResponseWriter, request *http.Request, p httprouter.Params, ctx context.Context)(response string){
+ span, _ := opentracing.StartSpanFromContext(ctx, "videos api - redis-get")
+ defer span.Finish()
id := p.ByName("id")
fmt.Print(id)
videoData, err := rdb.Get(ctx, id).Result()
if err == redis.Nil {
return "{}"
+
} else if err != nil {
panic(err)
} else {
- return videoData
-}
+ return videoData
+ }
}
type stop struct {
diff --git a/kubernetes/servicemesh/applications/videos-api/deploy.yaml b/kubernetes/servicemesh/applications/videos-api/deploy.yaml
index 0923359a9..f2f34640c 100644
--- a/kubernetes/servicemesh/applications/videos-api/deploy.yaml
+++ b/kubernetes/servicemesh/applications/videos-api/deploy.yaml
@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: videos-api
- image: aimvector/service-mesh:videos-api-1.0.0
+ image: aimvector/service-mesh:videos-api-2.0.4
imagePullPolicy : Always
ports:
- containerPort: 10010
@@ -34,6 +34,8 @@ spec:
value: "6379"
- name: "FLAKY"
value: "false"
+ - name: "JAEGER_HOST_PORT"
+ value: "collector.linkerd-jaeger:14268"
---
apiVersion: v1
kind: Service
diff --git a/kubernetes/servicemesh/applications/videos-api/go.mod b/kubernetes/servicemesh/applications/videos-api/go.mod
index 235c3e8ba..94177eaab 100644
--- a/kubernetes/servicemesh/applications/videos-api/go.mod
+++ b/kubernetes/servicemesh/applications/videos-api/go.mod
@@ -1,9 +1,14 @@
-module example.com/playlists-api
-
-go 1.14
-
-require (
- github.com/go-redis/redis/v8 v8.0.0-beta.7 // indirect
- github.com/julienschmidt/httprouter v1.3.0 // indirect
- github.com/sirupsen/logrus v1.6.0 // indirect
-)
+module example.com/playlists-api
+
+go 1.14
+
+require (
+ github.com/go-redis/redis/v8 v8.0.0-beta.7
+ github.com/julienschmidt/httprouter v1.3.0
+ github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e
+ github.com/pkg/errors v0.9.1 // indirect
+ github.com/sirupsen/logrus v1.6.0
+ github.com/uber/jaeger-client-go v2.25.0+incompatible
+ github.com/uber/jaeger-lib v2.4.1+incompatible
+ go.uber.org/atomic v1.7.0 // indirect
+)
diff --git a/kubernetes/servicemesh/applications/videos-api/go.sum b/kubernetes/servicemesh/applications/videos-api/go.sum
index 243c915e1..c35ec4508 100644
--- a/kubernetes/servicemesh/applications/videos-api/go.sum
+++ b/kubernetes/servicemesh/applications/videos-api/go.sum
@@ -1,130 +1,142 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60=
-github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9 h1:h2Ul3Ym2iVZWMQGYmulVUJ4LSkBm1erp9mUkPwtMoLg=
-github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-redis/redis v6.15.8+incompatible h1:BKZuG6mCnRj5AOaWJXoCgf6rqTYnYJLe4en2hxT7r9o=
-github.com/go-redis/redis/v8 v8.0.0-beta.7 h1:4HiY+qfsyz8OUr9zyAP2T1CJ0SFRY4mKFvm9TEznuv8=
-github.com/go-redis/redis/v8 v8.0.0-beta.7/go.mod h1:FGJAWDWFht1sQ4qxyJHZZbVyvnVcKQN0E3u5/5lRz+g=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
-github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-go.opentelemetry.io/otel v0.7.0 h1:u43jukpwqR8EsyeJOMgrsUgZwVI1e1eVw7yuzRkD1l0=
-go.opentelemetry.io/otel v0.7.0/go.mod h1:aZMyHG5TqDOXEgH2tyLiXSUKly1jT3yqE9PmrzIeCdo=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-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-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc=
-golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-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=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY=
-golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
-gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/DataDog/sketches-go v0.0.0-20190923095040-43f19ad77ff7/go.mod h1:Q5DbzQ+3AkgGwymQO7aZFNP7ns2lZKGtvRBzRXfdi60=
+github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9 h1:h2Ul3Ym2iVZWMQGYmulVUJ4LSkBm1erp9mUkPwtMoLg=
+github.com/dgryski/go-rendezvous v0.0.0-20200624174652-8d2f3be8b2d9/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
+github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-redis/redis v6.15.8+incompatible h1:BKZuG6mCnRj5AOaWJXoCgf6rqTYnYJLe4en2hxT7r9o=
+github.com/go-redis/redis/v8 v8.0.0-beta.7 h1:4HiY+qfsyz8OUr9zyAP2T1CJ0SFRY4mKFvm9TEznuv8=
+github.com/go-redis/redis/v8 v8.0.0-beta.7/go.mod h1:FGJAWDWFht1sQ4qxyJHZZbVyvnVcKQN0E3u5/5lRz+g=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e h1:fI6mGTyggeIYVmGhf80XFHxTupjOexbCppgTNDkv9AA=
+github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/uber/jaeger-client-go v1.6.0 h1:3+zLlq+4npI5fg8IsgAje3YsP7TcEdNzJScyqFIzxEQ=
+github.com/uber/jaeger-client-go v2.25.0+incompatible h1:IxcNZ7WRY1Y3G4poYlx24szfsn/3LvK9QHCq9oQw8+U=
+github.com/uber/jaeger-client-go v2.25.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
+github.com/uber/jaeger-lib v1.5.0 h1:OHbgr8l656Ub3Fw5k9SWnBfIEwvoHQ+W2y+Aa9D1Uyo=
+github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
+github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+go.opentelemetry.io/otel v0.7.0 h1:u43jukpwqR8EsyeJOMgrsUgZwVI1e1eVw7yuzRkD1l0=
+go.opentelemetry.io/otel v0.7.0/go.mod h1:aZMyHG5TqDOXEgH2tyLiXSUKly1jT3yqE9PmrzIeCdo=
+go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+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-20200513190911-00229845015e h1:rMqLP+9XLy+LdbCXHjJHAmTfXCr93W7oruWA6Hq1Alc=
+golang.org/x/exp v0.0.0-20200513190911-00229845015e/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+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=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY=
+golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20191009194640-548a555dbc03/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
+google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/kubernetes/servicemesh/applications/videos-web/deploy.yaml b/kubernetes/servicemesh/applications/videos-web/deploy.yaml
index 520b7153a..914d7e429 100644
--- a/kubernetes/servicemesh/applications/videos-web/deploy.yaml
+++ b/kubernetes/servicemesh/applications/videos-web/deploy.yaml
@@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: videos-web
- image: aimvector/service-mesh:videos-web-1.0.0
+ image: aimvector/service-mesh:videos-web-2.0.4
imagePullPolicy : Always
ports:
- containerPort: 80
diff --git a/kubernetes/servicemesh/docker-compose.yaml b/kubernetes/servicemesh/docker-compose.yaml
index ae5f7f122..82a250bcb 100644
--- a/kubernetes/servicemesh/docker-compose.yaml
+++ b/kubernetes/servicemesh/docker-compose.yaml
@@ -2,31 +2,35 @@ version: "3.4"
services:
videos-web:
container_name: videos-web
- image: aimvector/service-mesh:videos-web-1.0.0
+ image: aimvector/service-mesh:videos-web-2.0.5
build:
context: ./applications/videos-web
ports:
- 80:80
playlists-api:
container_name: playlists-api
- image: aimvector/service-mesh:playlists-api-1.0.0
+ image: aimvector/service-mesh:playlists-api-2.0.5
build:
context: ./applications/playlists-api
environment:
+ - "JAEGER_REPORTER_LOG_SPANS=true"
- "ENVIRONMENT=DEBUG"
- "REDIS_HOST=playlists-db"
- "REDIS_PORT=6379"
+ - "JAEGER_HOST_PORT=jaeger:6831"
ports:
- 81:10010
videos-api:
container_name: videos-api
- image: aimvector/service-mesh:videos-api-1.0.0
+ image: aimvector/service-mesh:videos-api-2.0.5
build:
context: ./applications/videos-api
environment:
+ - "JAEGER_REPORTER_LOG_SPANS=true"
- "ENVIRONMENT=DEBUG"
- "REDIS_HOST=videos-db"
- "REDIS_PORT=6379"
+ - "JAEGER_HOST_PORT=jaeger:6831"
ports:
- 82:10010
videos-db:
@@ -41,3 +45,9 @@ services:
command: [ "redis-server" , "--dir", "/tmp", "--appendonly", "yes"]
volumes:
- ./applications/playlists-db/appendonly.aof:/tmp/appendonly.aof
+ jaeger:
+ container_name: jaeger
+ image: jaegertracing/all-in-one:latest
+ ports:
+ - 16686:16686
+ - 14269:14269
\ No newline at end of file
diff --git a/kubernetes/servicemesh/linkerd/manifest/linkerd-edge-21.4.3.yaml b/kubernetes/servicemesh/linkerd/manifest/linkerd-edge-21.4.3.yaml
new file mode 100644
index 000000000..020240edf
--- /dev/null
+++ b/kubernetes/servicemesh/linkerd/manifest/linkerd-edge-21.4.3.yaml
@@ -0,0 +1,2328 @@
+---
+###
+### Linkerd Namespace
+###
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: linkerd
+ annotations:
+ linkerd.io/inject: disabled
+ labels:
+ linkerd.io/is-control-plane: "true"
+ config.linkerd.io/admission-webhooks: disabled
+ linkerd.io/control-plane-ns: linkerd
+---
+###
+### Identity Controller Service RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-identity
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: ["authentication.k8s.io"]
+ resources: ["tokenreviews"]
+ verbs: ["create"]
+- apiGroups: ["apps"]
+ resources: ["deployments"]
+ verbs: ["get"]
+- apiGroups: [""]
+ resources: ["events"]
+ verbs: ["create", "patch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-identity
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-identity
+subjects:
+- kind: ServiceAccount
+ name: linkerd-identity
+ namespace: linkerd
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: linkerd-identity
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+---
+###
+### Controller RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-controller
+ labels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: ["extensions", "apps"]
+ resources: ["daemonsets", "deployments", "replicasets", "statefulsets"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["extensions", "batch"]
+ resources: ["cronjobs", "jobs"]
+ verbs: ["list" , "get", "watch"]
+- apiGroups: [""]
+ resources: ["pods", "endpoints", "services", "replicationcontrollers", "namespaces"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["linkerd.io"]
+ resources: ["serviceprofiles"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["split.smi-spec.io"]
+ resources: ["trafficsplits"]
+ verbs: ["list", "get", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-controller
+ labels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-controller
+subjects:
+- kind: ServiceAccount
+ name: linkerd-controller
+ namespace: linkerd
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: linkerd-controller
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+---
+###
+### Destination Controller Service
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-destination
+ labels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: ["apps"]
+ resources: ["replicasets"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["batch"]
+ resources: ["jobs"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: [""]
+ resources: ["pods", "endpoints", "services", "nodes", "namespaces"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["linkerd.io"]
+ resources: ["serviceprofiles"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["split.smi-spec.io"]
+ resources: ["trafficsplits"]
+ verbs: ["list", "get", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-destination
+ labels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-destination
+subjects:
+- kind: ServiceAccount
+ name: linkerd-destination
+ namespace: linkerd
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: linkerd-destination
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+---
+###
+### Heartbeat RBAC
+###
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: linkerd-heartbeat
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: [""]
+ resources: ["configmaps"]
+ verbs: ["get"]
+ resourceNames: ["linkerd-config"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: linkerd-heartbeat
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+roleRef:
+ kind: Role
+ name: linkerd-heartbeat
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: linkerd-heartbeat
+ namespace: linkerd
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: linkerd-heartbeat
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["list"]
+- apiGroups: ["linkerd.io"]
+ resources: ["serviceprofiles"]
+ verbs: ["list"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: linkerd-heartbeat
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+roleRef:
+ kind: ClusterRole
+ name: linkerd-heartbeat
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: linkerd-heartbeat
+ namespace: linkerd
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: linkerd-heartbeat
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: heartbeat
+ linkerd.io/control-plane-ns: linkerd
+---
+###
+### Service Profile CRD
+###
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: serviceprofiles.linkerd.io
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+spec:
+ group: linkerd.io
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: false
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ description: Spec is the custom resource spec
+ required:
+ - routes
+ properties:
+ dstOverrides:
+ type: array
+ required:
+ - authority
+ - weight
+ items:
+ type: object
+ description: WeightedDst is a weighted alternate destination.
+ properties:
+ authority:
+ type: string
+ weight:
+ x-kubernetes-int-or-string: true
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ opaquePorts:
+ type: array
+ items:
+ type: string
+ retryBudget:
+ type: object
+ required:
+ - minRetriesPerSecond
+ - retryRatio
+ - ttl
+ description: RetryBudget describes the maximum number of retries that should be issued to this service.
+ properties:
+ minRetriesPerSecond:
+ format: int32
+ type: integer
+ retryRatio:
+ type: number
+ format: float
+ ttl:
+ type: string
+ routes:
+ type: array
+ items:
+ type: object
+ description: RouteSpec specifies a Route resource.
+ required:
+ - condition
+ - name
+ properties:
+ condition:
+ type: object
+ description: RequestMatch describes the conditions under which to match a Route.
+ properties:
+ pathRegex:
+ type: string
+ method:
+ type: string
+ all:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ any:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ not:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ isRetryable:
+ type: boolean
+ name:
+ type: string
+ timeout:
+ type: string
+ responseClasses:
+ type: array
+ items:
+ type: object
+ required:
+ - condition
+ description: ResponseClass describes how to classify a response (e.g. success or failures).
+ properties:
+ condition:
+ type: object
+ description: ResponseMatch describes the conditions under
+ which to classify a response.
+ properties:
+ all:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ any:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ not:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ description: Range describes a range of integers (e.g. status codes).
+ properties:
+ max:
+ format: int32
+ type: integer
+ min:
+ format: int32
+ type: integer
+ isFailure:
+ type: boolean
+ - name: v1alpha2
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ description: Spec is the custom resource spec
+ required:
+ - routes
+ properties:
+ dstOverrides:
+ type: array
+ required:
+ - authority
+ - weight
+ items:
+ type: object
+ description: WeightedDst is a weighted alternate destination.
+ properties:
+ authority:
+ type: string
+ weight:
+ x-kubernetes-int-or-string: true
+ anyOf:
+ - type: integer
+ - type: string
+ pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
+ opaquePorts:
+ type: array
+ items:
+ type: string
+ retryBudget:
+ type: object
+ required:
+ - minRetriesPerSecond
+ - retryRatio
+ - ttl
+ description: RetryBudget describes the maximum number of retries that should be issued to this service.
+ properties:
+ minRetriesPerSecond:
+ format: int32
+ type: integer
+ retryRatio:
+ type: number
+ format: float
+ ttl:
+ type: string
+ routes:
+ type: array
+ items:
+ type: object
+ description: RouteSpec specifies a Route resource.
+ required:
+ - condition
+ - name
+ properties:
+ condition:
+ type: object
+ description: RequestMatch describes the conditions under which to match a Route.
+ properties:
+ pathRegex:
+ type: string
+ method:
+ type: string
+ all:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ any:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ not:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ isRetryable:
+ type: boolean
+ name:
+ type: string
+ timeout:
+ type: string
+ responseClasses:
+ type: array
+ items:
+ type: object
+ required:
+ - condition
+ description: ResponseClass describes how to classify a response (e.g. success or failures).
+ properties:
+ condition:
+ type: object
+ description: ResponseMatch describes the conditions under
+ which to classify a response.
+ properties:
+ all:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ any:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ not:
+ type: array
+ items:
+ type: object
+ x-kubernetes-preserve-unknown-fields: true
+ status:
+ type: object
+ description: Range describes a range of integers (e.g. status codes).
+ properties:
+ max:
+ format: int32
+ type: integer
+ min:
+ format: int32
+ type: integer
+ isFailure:
+ type: boolean
+ scope: Namespaced
+ preserveUnknownFields: false
+ names:
+ plural: serviceprofiles
+ singular: serviceprofile
+ kind: ServiceProfile
+ shortNames:
+ - sp
+---
+###
+### TrafficSplit CRD
+### Copied from github.com/servicemeshinterface/smi-sdk-go/blob/d4e76b1cd7a33ead5f38d1262dd838a31c80f4e5/crds/split.yaml
+###
+apiVersion: apiextensions.k8s.io/v1
+kind: CustomResourceDefinition
+metadata:
+ name: trafficsplits.split.smi-spec.io
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+spec:
+ group: split.smi-spec.io
+ scope: Namespaced
+ conversion:
+ strategy: None
+ names:
+ kind: TrafficSplit
+ listKind: TrafficSplitList
+ shortNames:
+ - ts
+ plural: trafficsplits
+ singular: trafficsplit
+ versions:
+ - name: v1alpha1
+ served: true
+ storage: true
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ required:
+ - service
+ - backends
+ properties:
+ service:
+ description: The apex service of this split.
+ type: string
+ backends:
+ description: The backend services of this split.
+ type: array
+ items:
+ type: object
+ required: ['service', 'weight']
+ properties:
+ service:
+ description: Name of the Kubernetes service.
+ type: string
+ weight:
+ description: Traffic weight value of this backend.
+ x-kubernetes-int-or-string: true
+ additionalPrinterColumns:
+ - name: Service
+ type: string
+ description: The apex service of this split.
+ jsonPath: .spec.service
+ - name: v1alpha2
+ served: true
+ storage: false
+ additionalPrinterColumns:
+ - name: Service
+ type: string
+ description: The apex service of this split.
+ jsonPath: .spec.service
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ required:
+ - service
+ - backends
+ properties:
+ service:
+ description: The apex service of this split.
+ type: string
+ backends:
+ description: The backend services of this split.
+ type: array
+ items:
+ type: object
+ required: ['service', 'weight']
+ properties:
+ service:
+ description: Name of the Kubernetes service.
+ type: string
+ weight:
+ description: Traffic weight value of this backend.
+ type: number
+ preserveUnknownFields: false
+---
+###
+### Proxy Injector RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-proxy-injector
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: [""]
+ resources: ["events"]
+ verbs: ["create", "patch"]
+- apiGroups: [""]
+ resources: ["namespaces", "replicationcontrollers"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: [""]
+ resources: ["pods"]
+ verbs: ["list", "watch"]
+- apiGroups: ["extensions", "apps"]
+ resources: ["deployments", "replicasets", "daemonsets", "statefulsets"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["extensions", "batch"]
+ resources: ["cronjobs", "jobs"]
+ verbs: ["list", "get", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-proxy-injector
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+subjects:
+- kind: ServiceAccount
+ name: linkerd-proxy-injector
+ namespace: linkerd
+ apiGroup: ""
+roleRef:
+ kind: ClusterRole
+ name: linkerd-linkerd-proxy-injector
+ apiGroup: rbac.authorization.k8s.io
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: linkerd-proxy-injector
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+---
+kind: Secret
+apiVersion: v1
+metadata:
+ name: linkerd-proxy-injector-k8s-tls
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+type: kubernetes.io/tls
+data:
+ tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVekNDQWp1Z0F3SUJBZ0lSQU5nTTJmVHlxTkJYdHo0UDNQNURHbTB3RFFZSktvWklodmNOQVFFTEJRQXcKTFRFck1Da0dBMVVFQXhNaWJHbHVhMlZ5WkMxd2NtOTRlUzFwYm1wbFkzUnZjaTVzYVc1clpYSmtMbk4yWXpBZQpGdzB5TVRBME1UVXdOVEkyTlRGYUZ3MHlNakEwTVRVd05USTJOVEZhTUMweEt6QXBCZ05WQkFNVElteHBibXRsCmNtUXRjSEp2ZUhrdGFXNXFaV04wYjNJdWJHbHVhMlZ5WkM1emRtTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUEKQTRJQkR3QXdnZ0VLQW9JQkFRREtxQitNZnhwOXhRYzRJUnBlSzIzekJ1WWxTb05MOTk4VUpEajVWRUhMQWp4RgpZMVFUakdjYjNwRElnWWk2MDd5OFJtOVEzY1hXZ2tCS0FBZThHM1Fld2REczNtRXRreWhickt3L3psWEZ0aHZFCnByTmJIM3o5OGoxcEZ5V29Rc1ZuY2grZ1lXRjJSTzRrSjlOSnd5V0MzYkgxVm56SFNYc25HVXFrT3MwR0ZMdG0KWmFHY0ovd2hJODYyS0N3Z28zRnNWOVljZUNQTjAyRjk0RmlrWitPNUovWjhzWVVlZ1BmZkJDSjYzeHVSSVFwYwp5a0hBNGxkZ0pIM20vNWlCY3VqK0xqY0V1RnVrZlNHckJ6NFMrT05qL3lxMUYwV3FWQWF3d2xsTlVrdEpxc21KCkg5LysvK3JybHpyUWNKemVTckxnZGZ6a2FreWdmYjRYdmpaMkZWZEpBZ01CQUFHamJqQnNNQTRHQTFVZER3RUIKL3dRRUF3SUZvREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0RBWURWUjBUQVFILwpCQUl3QURBdEJnTlZIUkVFSmpBa2dpSnNhVzVyWlhKa0xYQnliM2g1TFdsdWFtVmpkRzl5TG14cGJtdGxjbVF1CmMzWmpNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUN2bHVVbk5hRXhXb2s2QzhzTTdSQXdUR1BxdWQvU0tldk8KVmVwaGF4SEFmbTF2WEovbE5acGh6STVrT2swT1czZFdDZ09tVklKT1VuSGJkcVBPTFJXZW9jTWtFOVRXc05WNwpmemhMU2FjRWhSdEdtSmZFRVZZa2lSbDlLVzh2T3ZWaWpMcGlPUTc1V0xCY0N1SUZydm5sU3dmR0YxVnVONnM3CmNucmxZNnFCdnIrTGNzVExsRlFpN1MzQVlZRGQrdHdDdmxjZnR3YUpoemhhTTA0K01tV09nR0tBT2JkZXkxazcKdFdKL2NUMGhLdmoyY0dvcnpTanZ4NFhMOVhWZU9TTGc3VGkyVGZyZWxYYUszdHRBSVQrYUdlWmQyUXlidndwRgpyNFNXYW1jcldURnhPaE9jaWpDRUFSdGpCM3lTQ1VwY1BGUTVmbnJpVjFvWnJKcmhnelhiCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeXFnZmpIOGFmY1VIT0NFYVhpdHQ4d2JtSlVxRFMvZmZGQ1E0K1ZSQnl3SThSV05VCkU0eG5HOTZReUlHSXV0Tzh2RVp2VU4zRjFvSkFTZ0FIdkJ0MEhzSFE3TjVoTFpNb1c2eXNQODVWeGJZYnhLYXoKV3g5OC9mSTlhUmNscUVMRlozSWZvR0ZoZGtUdUpDZlRTY01sZ3QyeDlWWjh4MGw3SnhsS3BEck5CaFM3Wm1XaApuQ2Y4SVNQT3RpZ3NJS054YkZmV0hIZ2p6ZE5oZmVCWXBHZmp1U2YyZkxHRkhvRDMzd1FpZXQ4YmtTRUtYTXBCCndPSlhZQ1I5NXYrWWdYTG8vaTQzQkxoYnBIMGhxd2MrRXZqalkvOHF0UmRGcWxRR3NNSlpUVkpMU2FySmlSL2YKL3YvcTY1YzYwSENjM2txeTRIWDg1R3BNb0gyK0Y3NDJkaFZYU1FJREFRQUJBb0lCQUc1R21oUkx2ZENlZkZVdwp2alpzRDRKbFNLc1dKdWdaMDR3VVFlUjYwdXB6SnZUakhnY2RLYVppc0FwTFltbTNla1pCVmFWOWFJQlhsRUF3ClVBVXVNenZoWDV6bFRhQU5LYkxvL1RvalAwMDgwVk5yR3NJRkduRGRka2xQVFRDSVZQNzdmUFk2eDF3aUdpd1cKZDhUMXFkM1NZVm9OWEF6ZGtXUXZRUXlvNnBQWmtDQkdGendjZ05yNWhzZnB6c0VqZzNxUHpFU3FNaWJWWXM5UwpIbFJ0QXFOZDFhMUNhWWpaRHNBeitSclFZNDFKamJGT0RQR2p0YkxvaG1GOXdBOTV0SVYrd0cyYnM3S1hNd2FHCkUybG9ORUkwNVdPWmZYNk9ZaHZoQThIdTdzWmRBL2dTam52UDgwMUw3SVl0bG90M3VVYVY0VmtzT280V1JYZXgKbUs3MU1Ca0NnWUVBN1RoaWR2Q0ZFZ1kvY0ZHSHM4NVpGampEUE4xa2FnV3dFNzVacDg1Vlg2cVUxbzh0bTlCVApicndBb1JBbndGQW9CdDNUVTNSeW5vTkZOWFFhOVU4YzEwMFlWUWlOYmpXMU9XdU5Kem95VzRjZURJR1dlSEd0CjNjUnRhd01wY0g3UXZLY254U3RCMmllRjdETVhqaXB0MDBtV2ZDZ2x4Z1BMaXgyUnJuL2ZJWWNDZ1lFQTJyTkMKSURBNXIxaHp4TFNJcFp4dG5OZGJMYzg3aUNnVEo1VUZ6M0VFbkZGTmdBTHZjSkZ6VzFRdWFNWko5N3Uzbi9BdgpsUFVEQjZaUVhTNGk2K1JMQ3Y0bEVySWdxc3k2RGpJUFBxbVo0ZjVEK0EwUUpndytZZTdadkdDOC9Ed2svZGZVClR3cDdqa2ZGSlBiVm1YRDFCK3Ara0pQNGR0dzBvc2FOaGovU05LOENnWUFZZktLRlhveU44TUVwcWZEVkdhN08KZ1d0OTQraVNuU1d3MUF4VEt4UmEvTFBDZGlNaUcxNFJaeXkxYzRKMjhvOC9MalM3UDZENVJkbW1DK2NnZlZzZgp5bUNCbnBGaTEvNXQvL0VoSkh2QVFQRlVIeWhXSkgzckQzU3dBREtOM3psU3ovcGwrdklnUDhZdVBKUG80KzVVClNodFRrNTFhbEZlMWM0YnZPVm5pRHdLQmdDc0M0RGxtWXFIcW1uSVFNMk9tdlNRQWNxMHl1WG1Rc0J1endqM0cKODJvdXp6Z2kyNlplNUxvTWQwZ2gzMEE2aWVXSm5rSUVZY0VxWTFuQURod29mTjIvbDlqeWNWeEdBVDF6ZU80UQordk9vUndQTXhlVkZ1U3NYaDNqMTZaVU4yeFNWVXVyc205b2lvVklndldkOUFLTzY2WU5UcHFUeHIrUm5la1B4CjMweC9Bb0dBRVVrSzFjZFRuSmJnbzVya3VLWGIxci9QcHhQZERPaEplV21TZnFNMTQvMmZQWm1HbGVFV3UvWVAKZTY0UTNvSFBxNE9YZ29nekpETVp1SFBpTGp1ZWdIUGNCbmJSQ0Z4NzVOU29oeE90MjN3dFJMdTdOajh2N0t6WQo1KzRQdFdJc054MldHbE8xQXBveGNWVGtPZWozUk1Od3NIWXRNb3RscWhoRTRoZkZjUlk9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ name: linkerd-proxy-injector-webhook-config
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+webhooks:
+- name: linkerd-proxy-injector.linkerd.io
+ namespaceSelector:
+ matchExpressions:
+ - key: config.linkerd.io/admission-webhooks
+ operator: NotIn
+ values:
+ - disabled
+ clientConfig:
+ service:
+ name: linkerd-proxy-injector
+ namespace: linkerd
+ path: "/"
+ caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVekNDQWp1Z0F3SUJBZ0lSQU5nTTJmVHlxTkJYdHo0UDNQNURHbTB3RFFZSktvWklodmNOQVFFTEJRQXcKTFRFck1Da0dBMVVFQXhNaWJHbHVhMlZ5WkMxd2NtOTRlUzFwYm1wbFkzUnZjaTVzYVc1clpYSmtMbk4yWXpBZQpGdzB5TVRBME1UVXdOVEkyTlRGYUZ3MHlNakEwTVRVd05USTJOVEZhTUMweEt6QXBCZ05WQkFNVElteHBibXRsCmNtUXRjSEp2ZUhrdGFXNXFaV04wYjNJdWJHbHVhMlZ5WkM1emRtTXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUEKQTRJQkR3QXdnZ0VLQW9JQkFRREtxQitNZnhwOXhRYzRJUnBlSzIzekJ1WWxTb05MOTk4VUpEajVWRUhMQWp4RgpZMVFUakdjYjNwRElnWWk2MDd5OFJtOVEzY1hXZ2tCS0FBZThHM1Fld2REczNtRXRreWhickt3L3psWEZ0aHZFCnByTmJIM3o5OGoxcEZ5V29Rc1ZuY2grZ1lXRjJSTzRrSjlOSnd5V0MzYkgxVm56SFNYc25HVXFrT3MwR0ZMdG0KWmFHY0ovd2hJODYyS0N3Z28zRnNWOVljZUNQTjAyRjk0RmlrWitPNUovWjhzWVVlZ1BmZkJDSjYzeHVSSVFwYwp5a0hBNGxkZ0pIM20vNWlCY3VqK0xqY0V1RnVrZlNHckJ6NFMrT05qL3lxMUYwV3FWQWF3d2xsTlVrdEpxc21KCkg5LysvK3JybHpyUWNKemVTckxnZGZ6a2FreWdmYjRYdmpaMkZWZEpBZ01CQUFHamJqQnNNQTRHQTFVZER3RUIKL3dRRUF3SUZvREFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0RBWURWUjBUQVFILwpCQUl3QURBdEJnTlZIUkVFSmpBa2dpSnNhVzVyWlhKa0xYQnliM2g1TFdsdWFtVmpkRzl5TG14cGJtdGxjbVF1CmMzWmpNQTBHQ1NxR1NJYjNEUUVCQ3dVQUE0SUJBUUN2bHVVbk5hRXhXb2s2QzhzTTdSQXdUR1BxdWQvU0tldk8KVmVwaGF4SEFmbTF2WEovbE5acGh6STVrT2swT1czZFdDZ09tVklKT1VuSGJkcVBPTFJXZW9jTWtFOVRXc05WNwpmemhMU2FjRWhSdEdtSmZFRVZZa2lSbDlLVzh2T3ZWaWpMcGlPUTc1V0xCY0N1SUZydm5sU3dmR0YxVnVONnM3CmNucmxZNnFCdnIrTGNzVExsRlFpN1MzQVlZRGQrdHdDdmxjZnR3YUpoemhhTTA0K01tV09nR0tBT2JkZXkxazcKdFdKL2NUMGhLdmoyY0dvcnpTanZ4NFhMOVhWZU9TTGc3VGkyVGZyZWxYYUszdHRBSVQrYUdlWmQyUXlidndwRgpyNFNXYW1jcldURnhPaE9jaWpDRUFSdGpCM3lTQ1VwY1BGUTVmbnJpVjFvWnJKcmhnelhiCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ failurePolicy: Ignore
+ admissionReviewVersions: ["v1", "v1beta1"]
+ rules:
+ - operations: [ "CREATE" ]
+ apiGroups: [""]
+ apiVersions: ["v1"]
+ resources: ["pods", "services"]
+ sideEffects: None
+---
+###
+### Service Profile Validator RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-sp-validator
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: [""]
+ resources: ["pods"]
+ verbs: ["list"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-sp-validator
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+subjects:
+- kind: ServiceAccount
+ name: linkerd-sp-validator
+ namespace: linkerd
+ apiGroup: ""
+roleRef:
+ kind: ClusterRole
+ name: linkerd-linkerd-sp-validator
+ apiGroup: rbac.authorization.k8s.io
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: linkerd-sp-validator
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+---
+kind: Secret
+apiVersion: v1
+metadata:
+ name: linkerd-sp-validator-k8s-tls
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+type: kubernetes.io/tls
+data:
+ tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURUVENDQWpXZ0F3SUJBZ0lSQUxyYTNKOXBseXh2ZVhRRm9xeWtYL013RFFZSktvWklodmNOQVFFTEJRQXcKS3pFcE1DY0dBMVVFQXhNZ2JHbHVhMlZ5WkMxemNDMTJZV3hwWkdGMGIzSXViR2x1YTJWeVpDNXpkbU13SGhjTgpNakV3TkRFMU1EVXlOalV4V2hjTk1qSXdOREUxTURVeU5qVXhXakFyTVNrd0p3WURWUVFERXlCc2FXNXJaWEprCkxYTndMWFpoYkdsa1lYUnZjaTVzYVc1clpYSmtMbk4yWXpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVAKQURDQ0FRb0NnZ0VCQUtGN3B3V1QzWjlPU2VMakNITGdSYllhNEs5WGZZTEdnc1kvN3hBY1ExYjBKMit5ZWZ5dgo3WERXbXFON1AvRDNVZFVsRDRMOU13dlRnc21CWVQwRXF4d3NzY1pvUFErKzU1bmpBWFBMVGw5NFhZL3ZwV2d0ClVzZXM0bmtrd1o3RW1xVFE1ZG9UaW8xN3RCaWZxQXlJK3M1VnM3WVAyY3RSZkFXZU5weFpVNHNHSFU2YkNkMTAKMWZhckhnY3RhbTUrcS84cHI1aGZqUk5ENitBY2taYS8wbTQwNUtjbFBqV1lRY0V6MHZNdTl1aFduOWY3d0VGOQpaaVlQY3A3RDV4VVFJSUszbFdRWFpHZWc0RHhZeTdLN0VJTXdIUktRMDZBTTgraWQ5ZGo3ZWdoaU9UNVYvZXdGCnJWdFB3UmxwaU5GZjQ1VFdSQlgzelkxSCs0M0dZMm1Jam9NQ0F3RUFBYU5zTUdvd0RnWURWUjBQQVFIL0JBUUQKQWdXZ01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQQpNQ3NHQTFVZEVRUWtNQ0tDSUd4cGJtdGxjbVF0YzNBdGRtRnNhV1JoZEc5eUxteHBibXRsY21RdWMzWmpNQTBHCkNTcUdTSWIzRFFFQkN3VUFBNElCQVFCQmQ3WWRoamxZVXlWeEpzRzgwNHZ3eDQxQlNKYzl5YlVJcEFjVWd2d28KYjBEQ3ZrNnJEVDJqcnF1d0Z6eTZKQloyeFd6aWMrYlRoU2NsTjNtRXhlZE8rRWN2clVXUUtnVzVqM1V6WWxNTwpUMHpHUWs0RWJPVFZCWE82ZVYzclNteW54MENnem84V2NKQ1U3ODFGbUJod2JSQ1ZIY3pNZ1lnYWsxZ05oV2xECi9HK3BmMWlvbHVLb2czTytPdGhLNUxYWEhqSk0yUGt1ZEtNemV4TXpncjM1Mi96akdFdlV3TlVuaytWYVE5VkwKNnNhejJWYWdsN01panA3Rk5kTUZiQXRrdmRiK2NTL1RQQWFnbGtSY2c2MnRZTTZKYWlReFZUNXhUNzZMUjI2RQpQMHJ6OEVsQ1NxcEZsbXI4NEZaREFoUWE1bWJlWlBHUGY4K1F4a041dnBNbQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
+ tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb3dJQkFBS0NBUUVBb1h1bkJaUGRuMDVKNHVNSWN1QkZ0aHJncjFkOWdzYUN4ai92RUJ4RFZ2UW5iN0o1Ci9LL3RjTmFhbzNzLzhQZFIxU1VQZ3YwekM5T0N5WUZoUFFTckhDeXh4bWc5RDc3bm1lTUJjOHRPWDNoZGorK2wKYUMxU3g2emllU1RCbnNTYXBORGwyaE9Lalh1MEdKK29ESWo2emxXenRnL1p5MUY4Qlo0Mm5GbFRpd1lkVHBzSgozWFRWOXFzZUJ5MXFibjZyL3ltdm1GK05FMFByNEJ5UmxyL1NialRrcHlVK05aaEJ3VFBTOHk3MjZGYWYxL3ZBClFYMW1KZzl5bnNQbkZSQWdncmVWWkJka1o2RGdQRmpMc3JzUWd6QWRFcERUb0F6ejZKMzEyUHQ2Q0dJNVBsWDkKN0FXdFcwL0JHV21JMFYvamxOWkVGZmZOalVmN2pjWmphWWlPZ3dJREFRQUJBb0lCQUVOVmF4U0JUcFVCc1A5aApTWUdWRUp4WllyemFUMlI3WDhaSW5HZHNVWXZ0YkpBL3JHdjM4NXJzY1RpZnlNNnlZYlh0cVNVbWJPV09nV2VDCmdraE9MUWNuZjgxS1k4T3dCNlI4S252ZEYwWHB5NkdiL0syTzBJaWdCeU1hZDMyN1h2eEFlc2RQQktQd0krMXMKalVjRXl3ZkVacFlRei9EZWZrZGRiRW9QV1MyTGFuTDhWU0JYdHNhM1FzV1lia1NpZXF4Yis3Y2FjMzN4Rkh3UApvZ01vWnRVTURoOGVkeVJxaXU4clJHMEliWDNHUDlBTnNhdkRraGhYU3R0SUhtcW5SWWprc2tHNTU0QTRidUlICjRxRGVDQnZNQU53bFpBNlMvWmQ0bUJjTlBxTVhMaS9PQ3ZtT2tvNEtXdXFhRitGcWQ0N3hoRFNtcWIzTCtIak8KOFhrU0plRUNnWUVBMDlPRzZ2WG1XbDh2Y2dJRE9pTnhXaVJ0ZmVkSStXVWNUYXlyTXNYQVg4dThaMlEzdG14Ygp0RTFKZm4vRTNDRVozc1p4WDRaNVhrWTBnWWhpWExtUVp3emExZFJITVhTSDljTFFLb1B4WVMwR3lwbUZjUDliCjBqQk1YSktudjJWV21TVmRUZ1hRTjN4VDRFYmZzNE55Ukl5Y1NQK2VoeWttSkFqL2NZQUVScEVDZ1lFQXd5aUYKTHE3dHFTbkRzcmc3a1U3Tk5pTE9ldE85TEJnb2NEaXJTc3lFRzhVbThzem5hNFlidEhrclBxWU16YlNrNjgxMwp2UEh3TG1XR0laU1BKWlowYnlrNnpVWEpIOERiYzRzWGNHQ3ZZNXRvcHpsVWgyWEVRQlBTNk9ETmVwTkFySVVKCjc0bzg0UDBYOUYrMjVmUzdZOTZFODZOZDZKRHAveDZQQ0xId2xkTUNnWUFsbzNkY3RwYll4Z01MTWZwYTBVTnAKN2dFYWx3Y3JjV0RuR0dCUEpENDdoMXNSMEFmcVBUVEtROVZrU2RXeis1bTZNTzZpTjZYSEw1aFN6K1lTYmRLUAp6UVB4Yk1lOXJPUWZzaDhFL3U3Y0FvRXJiTDMrUnhHTXRwSksvTEFiM1NqWEM0R1p4SVNyNTBhTUdtdlRYTzduCjZVZzMzRnZSem1qOWpDKy9maXpFVVFLQmdRQ3cvQXhjRzlQNGQ2RzhjSXZFNlh2OVBtK1d3SE5zaTdRUW9iUG0KTDdjWElDS0VTd01NWmlDMStMVVpLYW11MjhZOCtxYytPUU1pY0h2RjlGNGxMbDhGZUpTVkdGYWZiMTBWV2V5MQp3MWtMc2lLa2xMOXQwd0s1UWNFaDVNMHovbHJHbWhnNm5sazdpUXV5V1NNYlJHaTAxMVluUmQ2aVRObUl2Z1BsClZNbmtkUUtCZ0RYcFJiSHFtZjNoVUxnMXE5QXI1S3kvczNyZ0hyNU56S3BwYkJlNzNiS2N4N09NRmJMaUs1QUUKTnNBdXpCRGdrakVUSDAzRUorR2pKby9zU2RiUXErbTF4Q0dYTXgwdk50NWlVOGZCUXZjbnBDdVFqaTRqa1FIVQpPSEVvaUFNcjBNZERtTWJucXJXSzRLa3pzQStrOG9tb0hxYUlDOFpseVVuZWQrUkwvdU1FCi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0t
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: ValidatingWebhookConfiguration
+metadata:
+ name: linkerd-sp-validator-webhook-config
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+webhooks:
+- name: linkerd-sp-validator.linkerd.io
+ namespaceSelector:
+ matchExpressions:
+ - key: config.linkerd.io/admission-webhooks
+ operator: NotIn
+ values:
+ - disabled
+ clientConfig:
+ service:
+ name: linkerd-sp-validator
+ namespace: linkerd
+ path: "/"
+ caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURUVENDQWpXZ0F3SUJBZ0lSQUxyYTNKOXBseXh2ZVhRRm9xeWtYL013RFFZSktvWklodmNOQVFFTEJRQXcKS3pFcE1DY0dBMVVFQXhNZ2JHbHVhMlZ5WkMxemNDMTJZV3hwWkdGMGIzSXViR2x1YTJWeVpDNXpkbU13SGhjTgpNakV3TkRFMU1EVXlOalV4V2hjTk1qSXdOREUxTURVeU5qVXhXakFyTVNrd0p3WURWUVFERXlCc2FXNXJaWEprCkxYTndMWFpoYkdsa1lYUnZjaTVzYVc1clpYSmtMbk4yWXpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVAKQURDQ0FRb0NnZ0VCQUtGN3B3V1QzWjlPU2VMakNITGdSYllhNEs5WGZZTEdnc1kvN3hBY1ExYjBKMit5ZWZ5dgo3WERXbXFON1AvRDNVZFVsRDRMOU13dlRnc21CWVQwRXF4d3NzY1pvUFErKzU1bmpBWFBMVGw5NFhZL3ZwV2d0ClVzZXM0bmtrd1o3RW1xVFE1ZG9UaW8xN3RCaWZxQXlJK3M1VnM3WVAyY3RSZkFXZU5weFpVNHNHSFU2YkNkMTAKMWZhckhnY3RhbTUrcS84cHI1aGZqUk5ENitBY2taYS8wbTQwNUtjbFBqV1lRY0V6MHZNdTl1aFduOWY3d0VGOQpaaVlQY3A3RDV4VVFJSUszbFdRWFpHZWc0RHhZeTdLN0VJTXdIUktRMDZBTTgraWQ5ZGo3ZWdoaU9UNVYvZXdGCnJWdFB3UmxwaU5GZjQ1VFdSQlgzelkxSCs0M0dZMm1Jam9NQ0F3RUFBYU5zTUdvd0RnWURWUjBQQVFIL0JBUUQKQWdXZ01CMEdBMVVkSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQQpNQ3NHQTFVZEVRUWtNQ0tDSUd4cGJtdGxjbVF0YzNBdGRtRnNhV1JoZEc5eUxteHBibXRsY21RdWMzWmpNQTBHCkNTcUdTSWIzRFFFQkN3VUFBNElCQVFCQmQ3WWRoamxZVXlWeEpzRzgwNHZ3eDQxQlNKYzl5YlVJcEFjVWd2d28KYjBEQ3ZrNnJEVDJqcnF1d0Z6eTZKQloyeFd6aWMrYlRoU2NsTjNtRXhlZE8rRWN2clVXUUtnVzVqM1V6WWxNTwpUMHpHUWs0RWJPVFZCWE82ZVYzclNteW54MENnem84V2NKQ1U3ODFGbUJod2JSQ1ZIY3pNZ1lnYWsxZ05oV2xECi9HK3BmMWlvbHVLb2czTytPdGhLNUxYWEhqSk0yUGt1ZEtNemV4TXpncjM1Mi96akdFdlV3TlVuaytWYVE5VkwKNnNhejJWYWdsN01panA3Rk5kTUZiQXRrdmRiK2NTL1RQQWFnbGtSY2c2MnRZTTZKYWlReFZUNXhUNzZMUjI2RQpQMHJ6OEVsQ1NxcEZsbXI4NEZaREFoUWE1bWJlWlBHUGY4K1F4a041dnBNbQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0t
+ failurePolicy: Ignore
+ admissionReviewVersions: ["v1", "v1beta1"]
+ rules:
+ - operations: [ "CREATE" , "UPDATE" ]
+ apiGroups: ["linkerd.io"]
+ apiVersions: ["v1alpha1", "v1alpha2"]
+ resources: ["serviceprofiles"]
+ sideEffects: None
+---
+###
+### Control Plane PSP
+###
+apiVersion: policy/v1beta1
+kind: PodSecurityPolicy
+metadata:
+ name: linkerd-linkerd-control-plane
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+spec:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ allowedCapabilities:
+ - NET_ADMIN
+ - NET_RAW
+ requiredDropCapabilities:
+ - ALL
+ hostNetwork: false
+ hostIPC: false
+ hostPID: false
+ seLinux:
+ rule: RunAsAny
+ runAsUser:
+ rule: RunAsAny
+ supplementalGroups:
+ rule: MustRunAs
+ ranges:
+ - min: 1
+ max: 65535
+ fsGroup:
+ rule: MustRunAs
+ ranges:
+ - min: 1
+ max: 65535
+ volumes:
+ - configMap
+ - emptyDir
+ - secret
+ - projected
+ - downwardAPI
+ - persistentVolumeClaim
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: linkerd-psp
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+rules:
+- apiGroups: ['policy', 'extensions']
+ resources: ['podsecuritypolicies']
+ verbs: ['use']
+ resourceNames:
+ - linkerd-linkerd-control-plane
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: linkerd-psp
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+roleRef:
+ kind: Role
+ name: linkerd-psp
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: linkerd-controller
+ namespace: linkerd
+- kind: ServiceAccount
+ name: linkerd-destination
+ namespace: linkerd
+- kind: ServiceAccount
+ name: linkerd-heartbeat
+ namespace: linkerd
+- kind: ServiceAccount
+ name: linkerd-identity
+ namespace: linkerd
+- kind: ServiceAccount
+ name: linkerd-proxy-injector
+ namespace: linkerd
+- kind: ServiceAccount
+ name: linkerd-sp-validator
+ namespace: linkerd
+---
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: linkerd-config
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+data:
+ values: |
+ cliVersion: linkerd/cli edge-21.4.3
+ clusterDomain: cluster.local
+ clusterNetworks: 10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16
+ cniEnabled: false
+ controlPlaneTracing: false
+ controlPlaneTracingNamespace: linkerd-jaeger
+ controllerImage: cr.l5d.io/linkerd/controller
+ controllerImageVersion: edge-21.4.3
+ controllerLogFormat: plain
+ controllerLogLevel: info
+ controllerReplicas: 1
+ controllerUID: 2103
+ debugContainer:
+ image:
+ name: cr.l5d.io/linkerd/debug
+ pullPolicy: ""
+ version: edge-21.4.3
+ destinationProxyResources: null
+ destinationResources: null
+ disableHeartBeat: false
+ enableEndpointSlices: false
+ enableH2Upgrade: true
+ enablePodAntiAffinity: false
+ grafanaUrl: ""
+ heartbeatResources: null
+ heartbeatSchedule: ""
+ highAvailability: false
+ identity:
+ issuer:
+ clockSkewAllowance: 20s
+ crtExpiry: "2022-04-15T05:27:01Z"
+ issuanceLifetime: 24h0m0s
+ scheme: linkerd.io/tls
+ tls:
+ crtPEM: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ identityProxyResources: null
+ identityResources: null
+ identityTrustAnchorsPEM: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ identityTrustDomain: cluster.local
+ imagePullPolicy: IfNotPresent
+ imagePullSecrets: []
+ installNamespace: true
+ linkerdVersion: edge-21.4.3
+ namespace: linkerd
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ omitWebhookSideEffects: false
+ podAnnotations: {}
+ podLabels: {}
+ profileValidator:
+ caBundle: ""
+ crtPEM: ""
+ externalSecret: false
+ namespaceSelector:
+ matchExpressions:
+ - key: config.linkerd.io/admission-webhooks
+ operator: NotIn
+ values:
+ - disabled
+ prometheusUrl: ""
+ proxy:
+ capabilities: null
+ disableIdentity: false
+ enableExternalProfiles: false
+ image:
+ name: cr.l5d.io/linkerd/proxy
+ pullPolicy: ""
+ version: edge-21.4.3
+ inboundConnectTimeout: 100ms
+ isGateway: false
+ isIngress: false
+ logFormat: plain
+ logLevel: warn,linkerd=info
+ opaquePorts: 25,443,587,3306,5432,11211
+ outboundConnectTimeout: 1000ms
+ ports:
+ admin: 4191
+ control: 4190
+ inbound: 4143
+ outbound: 4140
+ requireIdentityOnInboundPorts: ""
+ resources:
+ cpu:
+ limit: ""
+ request: ""
+ memory:
+ limit: ""
+ request: ""
+ saMountPath: null
+ uid: 2102
+ waitBeforeExitSeconds: 0
+ proxyContainerName: linkerd-proxy
+ proxyInit:
+ capabilities: null
+ closeWaitTimeoutSecs: 0
+ ignoreInboundPorts: ""
+ ignoreOutboundPorts: ""
+ image:
+ name: cr.l5d.io/linkerd/proxy-init
+ pullPolicy: ""
+ version: v1.3.11
+ resources:
+ cpu:
+ limit: 100m
+ request: 10m
+ memory:
+ limit: 50Mi
+ request: 10Mi
+ saMountPath: null
+ xtMountPath:
+ mountPath: /run
+ name: linkerd-proxy-init-xtables-lock
+ readOnly: false
+ proxyInjector:
+ caBundle: ""
+ crtPEM: ""
+ externalSecret: false
+ namespaceSelector:
+ matchExpressions:
+ - key: config.linkerd.io/admission-webhooks
+ operator: NotIn
+ values:
+ - disabled
+ proxyInjectorProxyResources: null
+ proxyInjectorResources: null
+ publicAPIProxyResources: null
+ publicAPIResources: null
+ spValidatorProxyResources: null
+ spValidatorResources: null
+ tolerations: null
+ webhookFailurePolicy: Ignore
+---
+###
+### Identity Controller Service
+###
+---
+kind: Secret
+apiVersion: v1
+metadata:
+ name: linkerd-identity-issuer
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ linkerd.io/identity-issuer-expiry: 2022-04-15T05:27:01Z
+data:
+ crt.pem: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJoekNDQVM2Z0F3SUJBZ0lCQVRBS0JnZ3Foa2pPUFFRREFqQWNNUm93R0FZRFZRUURFeEZwWkdWdWRHbDAKZVM1c2FXNXJaWEprTGpBZUZ3MHlNVEEwTVRVd05USTJOREZhRncweU1qQTBNVFV3TlRJM01ERmFNQnd4R2pBWQpCZ05WQkFNVEVXbGtaVzUwYVhSNUxteHBibXRsY21RdU1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEClFnQUV3ZXUwSkdZeXJVTjBzcndPVHFaLzl6Y1hBR25WcitEMXdhRUhGeCtWYVltZW05b0RoSEZoZVJTWWo1bmYKd0IzdGh6a2lNVU1XSXlTajhiMEwzMG9CWnFOaE1GOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU09mR0J2NUQrV3UzU3VXbGI0SWs0UUFhU1N6ekFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUJxcGJUYnRUazEKeHU1OGlwUENocklFOExEdFhONTEyU2lnbmhaMFR5VEJjUUlnR3NxMTVtdFRCOTlWTERKNHJHZEQ1TVVYRnNTbQplT0dkckR0NGcyM2RGYjQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ key.pem: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUo4T2JTcnU4NHNGQVdhVlE1Y3Fhd2s0SnRBd3ZvVUUwUUU0R2svbmdHWWVvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFd2V1MEpHWXlyVU4wc3J3T1RxWi85emNYQUduVnIrRDF3YUVIRngrVmFZbWVtOW9EaEhGaAplUlNZajVuZndCM3RoemtpTVVNV0l5U2o4YjBMMzBvQlpnPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQ==
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-identity
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/control-plane-component: identity
+ ports:
+ - name: grpc
+ port: 8080
+ targetPort: 8080
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-identity-headless
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ clusterIP: None
+ selector:
+ linkerd.io/control-plane-component: identity
+ ports:
+ - name: grpc
+ port: 8080
+ targetPort: 8080
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ app.kubernetes.io/name: identity
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+ name: linkerd-identity
+ namespace: linkerd
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-identity
+ template:
+ metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ linkerd.io/identity-mode: default
+ linkerd.io/proxy-version: edge-21.4.3
+ labels:
+ linkerd.io/control-plane-component: identity
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/workload-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-identity
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - identity
+ - -log-level=info
+ - -log-format=plain
+ - -controller-namespace=linkerd
+ - -identity-trust-domain=cluster.local
+ - -identity-issuance-lifetime=24h0m0s
+ - -identity-clock-skew-allowance=20s
+ - -identity-scheme=linkerd.io/tls
+ env:
+ - name: LINKERD2_IDENTITY_TRUST_ANCHORS
+ value: "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJoekNDQVM2Z0F3SUJBZ0lCQVRBS0JnZ3Foa2pPUFFRREFqQWNNUm93R0FZRFZRUURFeEZwWkdWdWRHbDAKZVM1c2FXNXJaWEprTGpBZUZ3MHlNVEEwTVRVd05USTJOREZhRncweU1qQTBNVFV3TlRJM01ERmFNQnd4R2pBWQpCZ05WQkFNVEVXbGtaVzUwYVhSNUxteHBibXRsY21RdU1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNEClFnQUV3ZXUwSkdZeXJVTjBzcndPVHFaLzl6Y1hBR25WcitEMXdhRUhGeCtWYVltZW05b0RoSEZoZVJTWWo1bmYKd0IzdGh6a2lNVU1XSXlTajhiMEwzMG9CWnFOaE1GOHdEZ1lEVlIwUEFRSC9CQVFEQWdFR01CMEdBMVVkSlFRVwpNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCkJCU09mR0J2NUQrV3UzU3VXbGI0SWs0UUFhU1N6ekFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUJxcGJUYnRUazEKeHU1OGlwUENocklFOExEdFhONTEyU2lnbmhaMFR5VEJjUUlnR3NxMTVtdFRCOTlWTERKNHJHZEQ1TVVYRnNTbQplT0dkckR0NGcyM2RGYjQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
+ - name: LINKERD_DISABLED
+ value: "linkerd-await cannot block the identity controller"
+ image: cr.l5d.io/linkerd/controller:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9990
+ initialDelaySeconds: 10
+ name: identity
+ ports:
+ - containerPort: 8080
+ name: grpc
+ - containerPort: 9990
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9990
+ securityContext:
+ runAsUser: 2103
+ volumeMounts:
+ - mountPath: /var/run/linkerd/identity/issuer
+ name: identity-issuer
+ - env:
+ - name: LINKERD2_PROXY_LOG
+ value: "warn,linkerd=info"
+ - name: LINKERD2_PROXY_LOG_FORMAT
+ value: "plain"
+ - name: LINKERD2_PROXY_DESTINATION_SVC_ADDR
+ value: linkerd-dst-headless.linkerd.svc.cluster.local.:8086
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_NETWORKS
+ value: "10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16"
+ - name: LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT
+ value: "100ms"
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT
+ value: "1000ms"
+ - name: LINKERD2_PROXY_CONTROL_LISTEN_ADDR
+ value: 0.0.0.0:4190
+ - name: LINKERD2_PROXY_ADMIN_LISTEN_ADDR
+ value: 0.0.0.0:4191
+ - name: LINKERD2_PROXY_OUTBOUND_LISTEN_ADDR
+ value: 127.0.0.1:4140
+ - name: LINKERD2_PROXY_INBOUND_LISTEN_ADDR
+ value: 0.0.0.0:4143
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES
+ value: svc.cluster.local.
+ - name: LINKERD2_PROXY_INBOUND_ACCEPT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
+ value: "25,443,587,3306,5432,11211"
+ - name: _pod_ns
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: _pod_nodeName
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: LINKERD2_PROXY_DESTINATION_CONTEXT
+ value: |
+ {"ns":"$(_pod_ns)", "nodeName":"$(_pod_nodeName)"}
+ - name: LINKERD2_PROXY_IDENTITY_DIR
+ value: /var/run/linkerd/identity/end-entity
+ - name: LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS
+ value: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ - name: LINKERD2_PROXY_IDENTITY_TOKEN_FILE
+ value: /var/run/secrets/kubernetes.io/serviceaccount/token
+ - name: LINKERD2_PROXY_IDENTITY_SVC_ADDR
+ value: localhost.:8080
+ - name: _pod_sa
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: _l5d_ns
+ value: linkerd
+ - name: _l5d_trustdomain
+ value: cluster.local
+ - name: LINKERD2_PROXY_IDENTITY_LOCAL_NAME
+ value: $(_pod_sa).$(_pod_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_IDENTITY_SVC_NAME
+ value: linkerd-identity.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_DESTINATION_SVC_NAME
+ value: linkerd-destination.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ image: cr.l5d.io/linkerd/proxy:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /live
+ port: 4191
+ initialDelaySeconds: 10
+ name: linkerd-proxy
+ ports:
+ - containerPort: 4143
+ name: linkerd-proxy
+ - containerPort: 4191
+ name: linkerd-admin
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: 4191
+ initialDelaySeconds: 2
+ resources:
+ securityContext:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ runAsUser: 2102
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /var/run/linkerd/identity/end-entity
+ name: linkerd-identity-end-entity
+ initContainers:
+ - args:
+ - --incoming-proxy-port
+ - "4143"
+ - --outgoing-proxy-port
+ - "4140"
+ - --proxy-uid
+ - "2102"
+ - --inbound-ports-to-ignore
+ - "4190,4191"
+ - --outbound-ports-to-ignore
+ - "443"
+ image: cr.l5d.io/linkerd/proxy-init:v1.3.11
+ imagePullPolicy: IfNotPresent
+ name: linkerd-init
+ resources:
+ limits:
+ cpu: "100m"
+ memory: "50Mi"
+ requests:
+ cpu: "10m"
+ memory: "10Mi"
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ add:
+ - NET_ADMIN
+ - NET_RAW
+ privileged: false
+ readOnlyRootFilesystem: true
+ runAsNonRoot: false
+ runAsUser: 0
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /run
+ name: linkerd-proxy-init-xtables-lock
+ serviceAccountName: linkerd-identity
+ volumes:
+ - name: identity-issuer
+ secret:
+ secretName: linkerd-identity-issuer
+ - emptyDir: {}
+ name: linkerd-proxy-init-xtables-lock
+ - emptyDir:
+ medium: Memory
+ name: linkerd-identity-end-entity
+---
+###
+### Controller
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-controller-api
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/control-plane-component: controller
+ ports:
+ - name: http
+ port: 8085
+ targetPort: 8085
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ app.kubernetes.io/name: controller
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+ name: linkerd-controller
+ namespace: linkerd
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-controller
+ template:
+ metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ linkerd.io/identity-mode: default
+ linkerd.io/proxy-version: edge-21.4.3
+ labels:
+ linkerd.io/control-plane-component: controller
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/workload-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-controller
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - public-api
+ - -destination-addr=linkerd-dst.linkerd.svc.cluster.local:8086
+ - -controller-namespace=linkerd
+ - -log-level=info
+ - -log-format=plain
+ - -cluster-domain=cluster.local
+ image: cr.l5d.io/linkerd/controller:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9995
+ initialDelaySeconds: 10
+ name: public-api
+ ports:
+ - containerPort: 8085
+ name: http
+ - containerPort: 9995
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9995
+ securityContext:
+ runAsUser: 2103
+ - env:
+ - name: LINKERD2_PROXY_LOG
+ value: "warn,linkerd=info"
+ - name: LINKERD2_PROXY_LOG_FORMAT
+ value: "plain"
+ - name: LINKERD2_PROXY_DESTINATION_SVC_ADDR
+ value: linkerd-dst-headless.linkerd.svc.cluster.local.:8086
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_NETWORKS
+ value: "10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16"
+ - name: LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT
+ value: "100ms"
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT
+ value: "1000ms"
+ - name: LINKERD2_PROXY_CONTROL_LISTEN_ADDR
+ value: 0.0.0.0:4190
+ - name: LINKERD2_PROXY_ADMIN_LISTEN_ADDR
+ value: 0.0.0.0:4191
+ - name: LINKERD2_PROXY_OUTBOUND_LISTEN_ADDR
+ value: 127.0.0.1:4140
+ - name: LINKERD2_PROXY_INBOUND_LISTEN_ADDR
+ value: 0.0.0.0:4143
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES
+ value: svc.cluster.local.
+ - name: LINKERD2_PROXY_INBOUND_ACCEPT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
+ value: "25,443,587,3306,5432,11211"
+ - name: _pod_ns
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: _pod_nodeName
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: LINKERD2_PROXY_DESTINATION_CONTEXT
+ value: |
+ {"ns":"$(_pod_ns)", "nodeName":"$(_pod_nodeName)"}
+ - name: LINKERD2_PROXY_IDENTITY_DIR
+ value: /var/run/linkerd/identity/end-entity
+ - name: LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS
+ value: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ - name: LINKERD2_PROXY_IDENTITY_TOKEN_FILE
+ value: /var/run/secrets/kubernetes.io/serviceaccount/token
+ - name: LINKERD2_PROXY_IDENTITY_SVC_ADDR
+ value: linkerd-identity-headless.linkerd.svc.cluster.local.:8080
+ - name: _pod_sa
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: _l5d_ns
+ value: linkerd
+ - name: _l5d_trustdomain
+ value: cluster.local
+ - name: LINKERD2_PROXY_IDENTITY_LOCAL_NAME
+ value: $(_pod_sa).$(_pod_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_IDENTITY_SVC_NAME
+ value: linkerd-identity.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_DESTINATION_SVC_NAME
+ value: linkerd-destination.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ image: cr.l5d.io/linkerd/proxy:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /live
+ port: 4191
+ initialDelaySeconds: 10
+ name: linkerd-proxy
+ ports:
+ - containerPort: 4143
+ name: linkerd-proxy
+ - containerPort: 4191
+ name: linkerd-admin
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: 4191
+ initialDelaySeconds: 2
+ resources:
+ securityContext:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ runAsUser: 2102
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /var/run/linkerd/identity/end-entity
+ name: linkerd-identity-end-entity
+ initContainers:
+ - args:
+ - --incoming-proxy-port
+ - "4143"
+ - --outgoing-proxy-port
+ - "4140"
+ - --proxy-uid
+ - "2102"
+ - --inbound-ports-to-ignore
+ - "4190,4191"
+ - --outbound-ports-to-ignore
+ - "443"
+ image: cr.l5d.io/linkerd/proxy-init:v1.3.11
+ imagePullPolicy: IfNotPresent
+ name: linkerd-init
+ resources:
+ limits:
+ cpu: "100m"
+ memory: "50Mi"
+ requests:
+ cpu: "10m"
+ memory: "10Mi"
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ add:
+ - NET_ADMIN
+ - NET_RAW
+ privileged: false
+ readOnlyRootFilesystem: true
+ runAsNonRoot: false
+ runAsUser: 0
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /run
+ name: linkerd-proxy-init-xtables-lock
+ serviceAccountName: linkerd-controller
+ volumes:
+ - emptyDir: {}
+ name: linkerd-proxy-init-xtables-lock
+ - emptyDir:
+ medium: Memory
+ name: linkerd-identity-end-entity
+---
+###
+### Destination Controller Service
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-dst
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/control-plane-component: destination
+ ports:
+ - name: grpc
+ port: 8086
+ targetPort: 8086
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-dst-headless
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ clusterIP: None
+ selector:
+ linkerd.io/control-plane-component: destination
+ ports:
+ - name: grpc
+ port: 8086
+ targetPort: 8086
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ app.kubernetes.io/name: destination
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+ name: linkerd-destination
+ namespace: linkerd
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-destination
+ template:
+ metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ linkerd.io/identity-mode: default
+ linkerd.io/proxy-version: edge-21.4.3
+ labels:
+ linkerd.io/control-plane-component: destination
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/workload-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-destination
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - destination
+ - -addr=:8086
+ - -controller-namespace=linkerd
+ - -enable-h2-upgrade=true
+ - -log-level=info
+ - -log-format=plain
+ - -enable-endpoint-slices=false
+ - -cluster-domain=cluster.local
+ - -identity-trust-domain=cluster.local
+ - -default-opaque-ports=25,443,587,3306,5432,11211
+ image: cr.l5d.io/linkerd/controller:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9996
+ initialDelaySeconds: 10
+ name: destination
+ ports:
+ - containerPort: 8086
+ name: grpc
+ - containerPort: 9996
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9996
+ securityContext:
+ runAsUser: 2103
+ - env:
+ - name: LINKERD2_PROXY_LOG
+ value: "warn,linkerd=info"
+ - name: LINKERD2_PROXY_LOG_FORMAT
+ value: "plain"
+ - name: LINKERD2_PROXY_DESTINATION_SVC_ADDR
+ value: localhost.:8086
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_NETWORKS
+ value: "10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16"
+ - name: LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT
+ value: "100ms"
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT
+ value: "1000ms"
+ - name: LINKERD2_PROXY_CONTROL_LISTEN_ADDR
+ value: 0.0.0.0:4190
+ - name: LINKERD2_PROXY_ADMIN_LISTEN_ADDR
+ value: 0.0.0.0:4191
+ - name: LINKERD2_PROXY_OUTBOUND_LISTEN_ADDR
+ value: 127.0.0.1:4140
+ - name: LINKERD2_PROXY_INBOUND_LISTEN_ADDR
+ value: 0.0.0.0:4143
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES
+ value: svc.cluster.local.
+ - name: LINKERD2_PROXY_INBOUND_ACCEPT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
+ value: "25,443,587,3306,5432,11211"
+ - name: _pod_ns
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: _pod_nodeName
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: LINKERD2_PROXY_DESTINATION_CONTEXT
+ value: |
+ {"ns":"$(_pod_ns)", "nodeName":"$(_pod_nodeName)"}
+ - name: LINKERD2_PROXY_IDENTITY_DIR
+ value: /var/run/linkerd/identity/end-entity
+ - name: LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS
+ value: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ - name: LINKERD2_PROXY_IDENTITY_TOKEN_FILE
+ value: /var/run/secrets/kubernetes.io/serviceaccount/token
+ - name: LINKERD2_PROXY_IDENTITY_SVC_ADDR
+ value: linkerd-identity-headless.linkerd.svc.cluster.local.:8080
+ - name: _pod_sa
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: _l5d_ns
+ value: linkerd
+ - name: _l5d_trustdomain
+ value: cluster.local
+ - name: LINKERD2_PROXY_IDENTITY_LOCAL_NAME
+ value: $(_pod_sa).$(_pod_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_IDENTITY_SVC_NAME
+ value: linkerd-identity.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_DESTINATION_SVC_NAME
+ value: linkerd-destination.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ image: cr.l5d.io/linkerd/proxy:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /live
+ port: 4191
+ initialDelaySeconds: 10
+ name: linkerd-proxy
+ ports:
+ - containerPort: 4143
+ name: linkerd-proxy
+ - containerPort: 4191
+ name: linkerd-admin
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: 4191
+ initialDelaySeconds: 2
+ resources:
+ securityContext:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ runAsUser: 2102
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /var/run/linkerd/identity/end-entity
+ name: linkerd-identity-end-entity
+ initContainers:
+ - args:
+ - --incoming-proxy-port
+ - "4143"
+ - --outgoing-proxy-port
+ - "4140"
+ - --proxy-uid
+ - "2102"
+ - --inbound-ports-to-ignore
+ - "4190,4191"
+ - --outbound-ports-to-ignore
+ - "443"
+ image: cr.l5d.io/linkerd/proxy-init:v1.3.11
+ imagePullPolicy: IfNotPresent
+ name: linkerd-init
+ resources:
+ limits:
+ cpu: "100m"
+ memory: "50Mi"
+ requests:
+ cpu: "10m"
+ memory: "10Mi"
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ add:
+ - NET_ADMIN
+ - NET_RAW
+ privileged: false
+ readOnlyRootFilesystem: true
+ runAsNonRoot: false
+ runAsUser: 0
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /run
+ name: linkerd-proxy-init-xtables-lock
+ serviceAccountName: linkerd-destination
+ volumes:
+ - emptyDir: {}
+ name: linkerd-proxy-init-xtables-lock
+ - emptyDir:
+ medium: Memory
+ name: linkerd-identity-end-entity
+---
+###
+### Heartbeat
+###
+apiVersion: batch/v1beta1
+kind: CronJob
+metadata:
+ name: linkerd-heartbeat
+ namespace: linkerd
+ labels:
+ app.kubernetes.io/name: heartbeat
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ linkerd.io/control-plane-component: heartbeat
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ concurrencyPolicy: Replace
+ schedule: "36 05 * * *"
+ successfulJobsHistoryLimit: 0
+ jobTemplate:
+ spec:
+ template:
+ metadata:
+ labels:
+ linkerd.io/control-plane-component: heartbeat
+ linkerd.io/workload-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ serviceAccountName: linkerd-heartbeat
+ restartPolicy: Never
+ containers:
+ - name: heartbeat
+ image: cr.l5d.io/linkerd/controller:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ env:
+ - name: LINKERD_DISABLED
+ value: "the heartbeat controller does not use the proxy"
+ args:
+ - "heartbeat"
+ - "-controller-namespace=linkerd"
+ - "-log-level=info"
+ - "-log-format=plain"
+ - "-prometheus-url=http://prometheus.linkerd-viz.svc.cluster.local:9090"
+ securityContext:
+ runAsUser: 2103
+---
+###
+### Proxy Injector
+###
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ app.kubernetes.io/name: proxy-injector
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+ name: linkerd-proxy-injector
+ namespace: linkerd
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/control-plane-component: proxy-injector
+ template:
+ metadata:
+ annotations:
+ checksum/config: 21210c2185a216dd8028027ff17506163783c644a4acf93f5ec998ce5b7cec43
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ linkerd.io/identity-mode: default
+ linkerd.io/proxy-version: edge-21.4.3
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/workload-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-proxy-injector
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - proxy-injector
+ - -log-level=info
+ - -log-format=plain
+ image: cr.l5d.io/linkerd/controller:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9995
+ initialDelaySeconds: 10
+ name: proxy-injector
+ ports:
+ - containerPort: 8443
+ name: proxy-injector
+ - containerPort: 9995
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9995
+ securityContext:
+ runAsUser: 2103
+ volumeMounts:
+ - mountPath: /var/run/linkerd/config
+ name: config
+ - mountPath: /var/run/linkerd/tls
+ name: tls
+ readOnly: true
+ - env:
+ - name: LINKERD2_PROXY_LOG
+ value: "warn,linkerd=info"
+ - name: LINKERD2_PROXY_LOG_FORMAT
+ value: "plain"
+ - name: LINKERD2_PROXY_DESTINATION_SVC_ADDR
+ value: linkerd-dst-headless.linkerd.svc.cluster.local.:8086
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_NETWORKS
+ value: "10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16"
+ - name: LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT
+ value: "100ms"
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT
+ value: "1000ms"
+ - name: LINKERD2_PROXY_CONTROL_LISTEN_ADDR
+ value: 0.0.0.0:4190
+ - name: LINKERD2_PROXY_ADMIN_LISTEN_ADDR
+ value: 0.0.0.0:4191
+ - name: LINKERD2_PROXY_OUTBOUND_LISTEN_ADDR
+ value: 127.0.0.1:4140
+ - name: LINKERD2_PROXY_INBOUND_LISTEN_ADDR
+ value: 0.0.0.0:4143
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES
+ value: svc.cluster.local.
+ - name: LINKERD2_PROXY_INBOUND_ACCEPT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
+ value: "25,443,587,3306,5432,11211"
+ - name: _pod_ns
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: _pod_nodeName
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: LINKERD2_PROXY_DESTINATION_CONTEXT
+ value: |
+ {"ns":"$(_pod_ns)", "nodeName":"$(_pod_nodeName)"}
+ - name: LINKERD2_PROXY_IDENTITY_DIR
+ value: /var/run/linkerd/identity/end-entity
+ - name: LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS
+ value: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ - name: LINKERD2_PROXY_IDENTITY_TOKEN_FILE
+ value: /var/run/secrets/kubernetes.io/serviceaccount/token
+ - name: LINKERD2_PROXY_IDENTITY_SVC_ADDR
+ value: linkerd-identity-headless.linkerd.svc.cluster.local.:8080
+ - name: _pod_sa
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: _l5d_ns
+ value: linkerd
+ - name: _l5d_trustdomain
+ value: cluster.local
+ - name: LINKERD2_PROXY_IDENTITY_LOCAL_NAME
+ value: $(_pod_sa).$(_pod_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_IDENTITY_SVC_NAME
+ value: linkerd-identity.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_DESTINATION_SVC_NAME
+ value: linkerd-destination.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ image: cr.l5d.io/linkerd/proxy:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /live
+ port: 4191
+ initialDelaySeconds: 10
+ name: linkerd-proxy
+ ports:
+ - containerPort: 4143
+ name: linkerd-proxy
+ - containerPort: 4191
+ name: linkerd-admin
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: 4191
+ initialDelaySeconds: 2
+ resources:
+ securityContext:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ runAsUser: 2102
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /var/run/linkerd/identity/end-entity
+ name: linkerd-identity-end-entity
+ initContainers:
+ - args:
+ - --incoming-proxy-port
+ - "4143"
+ - --outgoing-proxy-port
+ - "4140"
+ - --proxy-uid
+ - "2102"
+ - --inbound-ports-to-ignore
+ - "4190,4191"
+ - --outbound-ports-to-ignore
+ - "443"
+ image: cr.l5d.io/linkerd/proxy-init:v1.3.11
+ imagePullPolicy: IfNotPresent
+ name: linkerd-init
+ resources:
+ limits:
+ cpu: "100m"
+ memory: "50Mi"
+ requests:
+ cpu: "10m"
+ memory: "10Mi"
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ add:
+ - NET_ADMIN
+ - NET_RAW
+ privileged: false
+ readOnlyRootFilesystem: true
+ runAsNonRoot: false
+ runAsUser: 0
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /run
+ name: linkerd-proxy-init-xtables-lock
+ serviceAccountName: linkerd-proxy-injector
+ volumes:
+ - configMap:
+ name: linkerd-config
+ name: config
+ - name: tls
+ secret:
+ secretName: linkerd-proxy-injector-k8s-tls
+ - emptyDir: {}
+ name: linkerd-proxy-init-xtables-lock
+ - emptyDir:
+ medium: Memory
+ name: linkerd-identity-end-entity
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-proxy-injector
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: proxy-injector
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/control-plane-component: proxy-injector
+ ports:
+ - name: proxy-injector
+ port: 443
+ targetPort: proxy-injector
+---
+###
+### Service Profile Validator
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: linkerd-sp-validator
+ namespace: linkerd
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/control-plane-component: sp-validator
+ ports:
+ - name: sp-validator
+ port: 443
+ targetPort: sp-validator
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ labels:
+ app.kubernetes.io/name: sp-validator
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+ name: linkerd-sp-validator
+ namespace: linkerd
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/control-plane-component: sp-validator
+ template:
+ metadata:
+ annotations:
+ checksum/config: 2fc29e224918533099d39b6322b373acd3cf75c24f6691d7da5c9930c3f253bf
+ linkerd.io/created-by: linkerd/cli edge-21.4.3
+ linkerd.io/identity-mode: default
+ linkerd.io/proxy-version: edge-21.4.3
+ labels:
+ linkerd.io/control-plane-component: sp-validator
+ linkerd.io/control-plane-ns: linkerd
+ linkerd.io/workload-ns: linkerd
+ linkerd.io/proxy-deployment: linkerd-sp-validator
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - sp-validator
+ - -log-level=info
+ - -log-format=plain
+ image: cr.l5d.io/linkerd/controller:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9997
+ initialDelaySeconds: 10
+ name: sp-validator
+ ports:
+ - containerPort: 8443
+ name: sp-validator
+ - containerPort: 9997
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9997
+ securityContext:
+ runAsUser: 2103
+ volumeMounts:
+ - mountPath: /var/run/linkerd/tls
+ name: tls
+ readOnly: true
+ - env:
+ - name: LINKERD2_PROXY_LOG
+ value: "warn,linkerd=info"
+ - name: LINKERD2_PROXY_LOG_FORMAT
+ value: "plain"
+ - name: LINKERD2_PROXY_DESTINATION_SVC_ADDR
+ value: linkerd-dst-headless.linkerd.svc.cluster.local.:8086
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_NETWORKS
+ value: "10.0.0.0/8,100.64.0.0/10,172.16.0.0/12,192.168.0.0/16"
+ - name: LINKERD2_PROXY_INBOUND_CONNECT_TIMEOUT
+ value: "100ms"
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_TIMEOUT
+ value: "1000ms"
+ - name: LINKERD2_PROXY_CONTROL_LISTEN_ADDR
+ value: 0.0.0.0:4190
+ - name: LINKERD2_PROXY_ADMIN_LISTEN_ADDR
+ value: 0.0.0.0:4191
+ - name: LINKERD2_PROXY_OUTBOUND_LISTEN_ADDR
+ value: 127.0.0.1:4140
+ - name: LINKERD2_PROXY_INBOUND_LISTEN_ADDR
+ value: 0.0.0.0:4143
+ - name: LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES
+ value: svc.cluster.local.
+ - name: LINKERD2_PROXY_INBOUND_ACCEPT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_OUTBOUND_CONNECT_KEEPALIVE
+ value: 10000ms
+ - name: LINKERD2_PROXY_INBOUND_PORTS_DISABLE_PROTOCOL_DETECTION
+ value: "25,443,587,3306,5432,11211"
+ - name: _pod_ns
+ valueFrom:
+ fieldRef:
+ fieldPath: metadata.namespace
+ - name: _pod_nodeName
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.nodeName
+ - name: LINKERD2_PROXY_DESTINATION_CONTEXT
+ value: |
+ {"ns":"$(_pod_ns)", "nodeName":"$(_pod_nodeName)"}
+ - name: LINKERD2_PROXY_IDENTITY_DIR
+ value: /var/run/linkerd/identity/end-entity
+ - name: LINKERD2_PROXY_IDENTITY_TRUST_ANCHORS
+ value: |
+ -----BEGIN CERTIFICATE-----
+ MIIBhzCCAS6gAwIBAgIBATAKBggqhkjOPQQDAjAcMRowGAYDVQQDExFpZGVudGl0
+ eS5saW5rZXJkLjAeFw0yMTA0MTUwNTI2NDFaFw0yMjA0MTUwNTI3MDFaMBwxGjAY
+ BgNVBAMTEWlkZW50aXR5LmxpbmtlcmQuMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
+ QgAEweu0JGYyrUN0srwOTqZ/9zcXAGnVr+D1waEHFx+VaYmem9oDhHFheRSYj5nf
+ wB3thzkiMUMWIySj8b0L30oBZqNhMF8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdJQQW
+ MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
+ BBSOfGBv5D+Wu3SuWlb4Ik4QAaSSzzAKBggqhkjOPQQDAgNHADBEAiBqpbTbtTk1
+ xu58ipPChrIE8LDtXN512SignhZ0TyTBcQIgGsq15mtTB99VLDJ4rGdD5MUXFsSm
+ eOGdrDt4g23dFb4=
+ -----END CERTIFICATE-----
+ - name: LINKERD2_PROXY_IDENTITY_TOKEN_FILE
+ value: /var/run/secrets/kubernetes.io/serviceaccount/token
+ - name: LINKERD2_PROXY_IDENTITY_SVC_ADDR
+ value: linkerd-identity-headless.linkerd.svc.cluster.local.:8080
+ - name: _pod_sa
+ valueFrom:
+ fieldRef:
+ fieldPath: spec.serviceAccountName
+ - name: _l5d_ns
+ value: linkerd
+ - name: _l5d_trustdomain
+ value: cluster.local
+ - name: LINKERD2_PROXY_IDENTITY_LOCAL_NAME
+ value: $(_pod_sa).$(_pod_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_IDENTITY_SVC_NAME
+ value: linkerd-identity.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - name: LINKERD2_PROXY_DESTINATION_SVC_NAME
+ value: linkerd-destination.$(_l5d_ns).serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ image: cr.l5d.io/linkerd/proxy:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /live
+ port: 4191
+ initialDelaySeconds: 10
+ name: linkerd-proxy
+ ports:
+ - containerPort: 4143
+ name: linkerd-proxy
+ - containerPort: 4191
+ name: linkerd-admin
+ readinessProbe:
+ httpGet:
+ path: /ready
+ port: 4191
+ initialDelaySeconds: 2
+ resources:
+ securityContext:
+ allowPrivilegeEscalation: false
+ readOnlyRootFilesystem: true
+ runAsUser: 2102
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /var/run/linkerd/identity/end-entity
+ name: linkerd-identity-end-entity
+ initContainers:
+ - args:
+ - --incoming-proxy-port
+ - "4143"
+ - --outgoing-proxy-port
+ - "4140"
+ - --proxy-uid
+ - "2102"
+ - --inbound-ports-to-ignore
+ - "4190,4191"
+ - --outbound-ports-to-ignore
+ - "443"
+ image: cr.l5d.io/linkerd/proxy-init:v1.3.11
+ imagePullPolicy: IfNotPresent
+ name: linkerd-init
+ resources:
+ limits:
+ cpu: "100m"
+ memory: "50Mi"
+ requests:
+ cpu: "10m"
+ memory: "10Mi"
+ securityContext:
+ allowPrivilegeEscalation: false
+ capabilities:
+ add:
+ - NET_ADMIN
+ - NET_RAW
+ privileged: false
+ readOnlyRootFilesystem: true
+ runAsNonRoot: false
+ runAsUser: 0
+ terminationMessagePolicy: FallbackToLogsOnError
+ volumeMounts:
+ - mountPath: /run
+ name: linkerd-proxy-init-xtables-lock
+ serviceAccountName: linkerd-sp-validator
+ volumes:
+ - name: tls
+ secret:
+ secretName: linkerd-sp-validator-k8s-tls
+ - emptyDir: {}
+ name: linkerd-proxy-init-xtables-lock
+ - emptyDir:
+ medium: Memory
+ name: linkerd-identity-end-entity
+---
+apiVersion: v1
+data:
+ linkerd-config-overrides: aWRlbnRpdHk6CiAgaXNzdWVyOgogICAgY3J0RXhwaXJ5OiAiMjAyMi0wNC0xNVQwNToyNzowMVoiCiAgICB0bHM6CiAgICAgIGNydFBFTTogfAogICAgICAgIC0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQogICAgICAgIE1JSUJoekNDQVM2Z0F3SUJBZ0lCQVRBS0JnZ3Foa2pPUFFRREFqQWNNUm93R0FZRFZRUURFeEZwWkdWdWRHbDAKICAgICAgICBlUzVzYVc1clpYSmtMakFlRncweU1UQTBNVFV3TlRJMk5ERmFGdzB5TWpBME1UVXdOVEkzTURGYU1Cd3hHakFZCiAgICAgICAgQmdOVkJBTVRFV2xrWlc1MGFYUjVMbXhwYm10bGNtUXVNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRAogICAgICAgIFFnQUV3ZXUwSkdZeXJVTjBzcndPVHFaLzl6Y1hBR25WcitEMXdhRUhGeCtWYVltZW05b0RoSEZoZVJTWWo1bmYKICAgICAgICB3QjN0aHpraU1VTVdJeVNqOGIwTDMwb0JacU5oTUY4d0RnWURWUjBQQVFIL0JBUURBZ0VHTUIwR0ExVWRKUVFXCiAgICAgICAgTUJRR0NDc0dBUVVGQndNQkJnZ3JCZ0VGQlFjREFqQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01CMEdBMVVkRGdRVwogICAgICAgIEJCU09mR0J2NUQrV3UzU3VXbGI0SWs0UUFhU1N6ekFLQmdncWhrak9QUVFEQWdOSEFEQkVBaUJxcGJUYnRUazEKICAgICAgICB4dTU4aXBQQ2hySUU4TER0WE41MTJTaWduaFowVHlUQmNRSWdHc3ExNW10VEI5OVZMREo0ckdkRDVNVVhGc1NtCiAgICAgICAgZU9HZHJEdDRnMjNkRmI0PQogICAgICAgIC0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KICAgICAga2V5UEVNOiB8CiAgICAgICAgLS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCiAgICAgICAgTUhjQ0FRRUVJSjhPYlNydTg0c0ZBV2FWUTVjcWF3azRKdEF3dm9VRTBRRTRHay9uZ0dZZW9Bb0dDQ3FHU000OQogICAgICAgIEF3RUhvVVFEUWdBRXdldTBKR1l5clVOMHNyd09UcVovOXpjWEFHblZyK0Qxd2FFSEZ4K1ZhWW1lbTlvRGhIRmgKICAgICAgICBlUlNZajVuZndCM3RoemtpTVVNV0l5U2o4YjBMMzBvQlpnPT0KICAgICAgICAtLS0tLUVORCBFQyBQUklWQVRFIEtFWS0tLS0tCmlkZW50aXR5VHJ1c3RBbmNob3JzUEVNOiB8CiAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgTUlJQmh6Q0NBUzZnQXdJQkFnSUJBVEFLQmdncWhrak9QUVFEQWpBY01Sb3dHQVlEVlFRREV4RnBaR1Z1ZEdsMAogIGVTNXNhVzVyWlhKa0xqQWVGdzB5TVRBME1UVXdOVEkyTkRGYUZ3MHlNakEwTVRVd05USTNNREZhTUJ3eEdqQVkKICBCZ05WQkFNVEVXbGtaVzUwYVhSNUxteHBibXRsY21RdU1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMERBUWNECiAgUWdBRXdldTBKR1l5clVOMHNyd09UcVovOXpjWEFHblZyK0Qxd2FFSEZ4K1ZhWW1lbTlvRGhIRmhlUlNZajVuZgogIHdCM3RoemtpTVVNV0l5U2o4YjBMMzBvQlpxTmhNRjh3RGdZRFZSMFBBUUgvQkFRREFnRUdNQjBHQTFVZEpRUVcKICBNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUIwR0ExVWREZ1FXCiAgQkJTT2ZHQnY1RCtXdTNTdVdsYjRJazRRQWFTU3p6QUtCZ2dxaGtqT1BRUURBZ05IQURCRUFpQnFwYlRidFRrMQogIHh1NThpcFBDaHJJRThMRHRYTjUxMlNpZ25oWjBUeVRCY1FJZ0dzcTE1bXRUQjk5VkxESjRyR2RENU1VWEZzU20KICBlT0dkckR0NGcyM2RGYjQ9CiAgLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
+kind: Secret
+metadata:
+ creationTimestamp: null
+ labels:
+ linkerd.io/control-plane-ns: linkerd
+ name: linkerd-config-overrides
+ namespace: linkerd
diff --git a/kubernetes/servicemesh/linkerd/manifest/viz-edge-21.4.3.yaml b/kubernetes/servicemesh/linkerd/manifest/viz-edge-21.4.3.yaml
new file mode 100644
index 000000000..6f2512f3e
--- /dev/null
+++ b/kubernetes/servicemesh/linkerd/manifest/viz-edge-21.4.3.yaml
@@ -0,0 +1,1252 @@
+---
+###
+### Linkerd Viz Extension Namespace
+###
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ annotations:
+ linkerd.io/inject: enabled
+---
+###
+### Metrics API RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-metrics-api
+ labels:
+ linkerd.io/extension: viz
+ component: metrics-api
+rules:
+- apiGroups: ["extensions", "apps"]
+ resources: ["daemonsets", "deployments", "replicasets", "statefulsets"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["extensions", "batch"]
+ resources: ["cronjobs", "jobs"]
+ verbs: ["list" , "get", "watch"]
+- apiGroups: [""]
+ resources: ["pods", "endpoints", "services", "replicationcontrollers", "namespaces"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["linkerd.io"]
+ resources: ["serviceprofiles"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["split.smi-spec.io"]
+ resources: ["trafficsplits"]
+ verbs: ["list", "get", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-metrics-api
+ labels:
+ linkerd.io/extension: viz
+ component: metrics-api
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-viz-metrics-api
+subjects:
+- kind: ServiceAccount
+ name: metrics-api
+ namespace: linkerd-viz
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: metrics-api
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: metrics-api
+---
+###
+### Grafana RBAC
+###
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: grafana
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: grafana
+ namespace: linkerd-viz
+---
+###
+### Prometheus RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-prometheus
+ labels:
+ linkerd.io/extension: viz
+ component: prometheus
+rules:
+- apiGroups: [""]
+ resources: ["nodes", "nodes/proxy", "pods"]
+ verbs: ["get", "list", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-prometheus
+ labels:
+ linkerd.io/extension: viz
+ component: prometheus
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-viz-prometheus
+subjects:
+- kind: ServiceAccount
+ name: prometheus
+ namespace: linkerd-viz
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: prometheus
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: prometheus
+ namespace: linkerd-viz
+---
+###
+### Tap RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-tap
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+rules:
+- apiGroups: [""]
+ resources: ["pods", "services", "replicationcontrollers", "namespaces", "nodes"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["extensions", "apps"]
+ resources: ["daemonsets", "deployments", "replicasets", "statefulsets"]
+ verbs: ["list", "get", "watch"]
+- apiGroups: ["extensions", "batch"]
+ resources: ["cronjobs", "jobs"]
+ verbs: ["list" , "get", "watch"]
+---
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-tap-admin
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+rules:
+- apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["list"]
+- apiGroups: ["tap.linkerd.io"]
+ resources: ["*"]
+ verbs: ["watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-tap
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-viz-tap
+subjects:
+- kind: ServiceAccount
+ name: tap
+ namespace: linkerd-viz
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: linkerd-linkerd-viz-tap-auth-delegator
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: system:auth-delegator
+subjects:
+- kind: ServiceAccount
+ name: tap
+ namespace: linkerd-viz
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: tap
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+ namespace: linkerd-viz
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: linkerd-linkerd-viz-tap-auth-reader
+ namespace: kube-system
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+ namespace: linkerd-viz
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: Role
+ name: extension-apiserver-authentication-reader
+subjects:
+- kind: ServiceAccount
+ name: tap
+ namespace: linkerd-viz
+---
+kind: Secret
+apiVersion: v1
+metadata:
+ name: tap-k8s-tls
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+type: kubernetes.io/tls
+data:
+ tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKVENDQWcyZ0F3SUJBZ0lRR3pCUTJMV0lkYTZMcmNweUVncFBFREFOQmdrcWhraUc5dzBCQVFzRkFEQWUKTVJ3d0dnWURWUVFERXhOMFlYQXViR2x1YTJWeVpDMTJhWG91YzNaak1CNFhEVEl4TURReE5UQTFNemcxTUZvWApEVEl5TURReE5UQTFNemcxTUZvd0hqRWNNQm9HQTFVRUF4TVRkR0Z3TG14cGJtdGxjbVF0ZG1sNkxuTjJZekNDCkFTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTFZiQTZ6SUlIZC9xcWNnZSsrSmROeVEKNXN3WEoyMDEzWTlJb0o4TFhFay9nM3YrZXdkQ1VuTDNPQ1VDLzgzS2xXRmQ5Vm0rOXIwRmZaYjg4NnhndUFEZgp3NVNzaDM4RjR2aWVvMkljaXc2TXQ1amxxYjFtTkRPbVBjZU14K3VkRm1tZWdpM0IzRUV3U3FSTEdENk1sREpLCmZ6WnQ5QXgrMlYzM0NKWS9mbnRMa0dxSnUwSWtiU0VzemVUVlJqWXhhTnp1bWF6Q3ZUbGZsV3pHVUZYMFpoMXoKYVJLOEExZ0c4a1czNkRxY1BFdGVZcEE2Z1NWM1lqaEpINXZSa0VVVXYwUkJ2N1F5NmR0WEx3REhxb1JZYW9oMApZVmtOV0daUlJqc1owZTFvNHptdkhuT3ZvSUM5L0w1YU0vS215a1FnWFBBMG5keFJDUk9DNzNnekR5c2locWNDCkF3RUFBYU5mTUYwd0RnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQkJnZ3IKQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1CNEdBMVVkRVFRWE1CV0NFM1JoY0M1c2FXNXJaWEprTFhacAplaTV6ZG1Nd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJK0lVZ1lUUkR6ckUwbHNxQkc2RkpPaEhkTjA1Z0NOCmJXR0lpTnN4ZHJYbVhSUm9EUVFEd0NTZVFqTVZSV3hMekdUbUh1MHJIazJBQ3M4NDJISGdSekNyRmZuZElyNEMKMllCaXhobzVwNVd2Z21PaUsvWm5RZkZ5aXV6aWpjdzVpejZJZHdCNW5vRTJQTHlmNnQveGorcHVNZHVRUGhKZwo5VzRBZm1iaFM1SjhDZ1hZOGR2UzVoaC81ZWdrekkwWlViUTNGbW9rM092SDZmNi9sRmh6RldacXlkeGwrYjZnCmYzR1JSZkY2RnlCaSt6ZGFaak5kNHRjZjh3ODc4TzFCNzExWXI3YTVjU3Y2eHZ1ZU5oTUxBZEM2bmRQbnoxbUcKanJYZ3BRak9OWU45ZHpSem5sVjNvRkdHdkMrVzhDdjRRcVZyRUZGclAxeCtISlRnTWNHYXFGUT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==
+ tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBdFZzRHJNZ2dkMytxcHlCNzc0bDAzSkRtekJjbmJUWGRqMGlnbnd0Y1NUK0RlLzU3CkIwSlNjdmM0SlFML3pjcVZZVjMxV2I3MnZRVjlsdnp6ckdDNEFOL0RsS3lIZndYaStKNmpZaHlMRG95M21PV3AKdldZME02WTl4NHpINjUwV2FaNkNMY0hjUVRCS3BFc1lQb3lVTWtwL05tMzBESDdaWGZjSWxqOStlMHVRYW9tNwpRaVJ0SVN6TjVOVkdOakZvM082WnJNSzlPVitWYk1aUVZmUm1IWE5wRXJ3RFdBYnlSYmZvT3B3OFMxNWlrRHFCCkpYZGlPRWtmbTlHUVJSUy9SRUcvdERMcDIxY3ZBTWVxaEZocWlIUmhXUTFZWmxGR094blI3V2pqT2E4ZWM2K2cKZ0wzOHZsb3o4cWJLUkNCYzhEU2QzRkVKRTRMdmVETVBLeUtHcHdJREFRQUJBb0lCQVFDMHN4OFNSY1d6eTgwcQpBVC84Q0tZY0wzVUgzZm8yNHZrRUQ0V2JjeUpkQ1ovbEtFZEZrRnUrbVgyand6MUd1NWZrRUU2clFZOXYvOHlICmFUc1NncnhVZ3FESnZxNnpiaFlkUzFQWUtrQ1VHcm5FNnZFWitvQUJCcDkvK1ZJcC9iZWJQWWpRTnQxVFJ0N1kKbk1wbmFJTXhLUEZnTm1aNUhOdFF1UmdoUE5xMTFZRWxSSWJBMnRSSnJ5ZHd3dktPY3lQeTBlWXJ0MW9oSm41MApTMUI1UFd2OEpsZWdocFlXcVMxM3dwWUdXSVZNVlBpL2x3cXhqRVQwcVdnSWtxeUViLzViNFJMMUw1MGhBZ0tQCmhpSjN3N2xLbWs1dDgzdTd5UlRWa29UcGczbGlRc0ZNNTM4MllIcTV5MFNxeHo2anZ2Q0VENEYvcGNDTDFsdUIKZVJQTFV1MkJBb0dCQU85dUI1b1RVaGdzaW0yL1J6bEdFQmh0d0JkTDJyV1VXQ3FqbC83QzJJa214WHNqN1NIcgpXK2gxYW9WVXN2VW1yQ3F3OTRDRzNzanFVYUN5N2hWaUp0NnJlbm13dzh3M3JiRmNjQ3hpREp1UkFnVDZNR0NYCldtZXhCS2llalY0TFNTWmltQ0NNajUzcXhxdkxmRWVOTTNNaU9PcVlNV2VWbTE2YWxHOThyY0xSQW9HQkFNSG8KRmFFalpqZ2xrQW9lVlFFSHdXV2N2cXBJRTUzN0hpZ2s5U2djVkhmcjliaFdpRW03bElUczI2aEU3bFFuMXRpTwoxUkQ5R01EeGsvWjFIZ3ZKWmRSaHBRT1g4WE42TEJwN1pReWp4UG1jYnR3Y1hjRFpCMVVZdVU0a3lGaWJrbm1JCnlRdUM5azRKMDR5MVVhVmY0eGgrQmZjcmtiNS9EYml5Z2t4Tk1GLzNBb0dCQU84WERQaEsrdHV3L3JzQkczcVMKQUZpa29BR2plYytCUjFtczY0YzN3MHVTTC9uN3NqMEE3bEovamROKzlRWGhqR05GUEtKWUMvak9KSjA0a0k5Qgo2RmJMSGc2TytiYmdrczVkNUpZdGd6R0Y2R0pZQkI4d2hOS3U3bHdEbUYrbEhYTDdXYmFISnBNbmN5VHltalJKClNHdGNiVUcyb1A4elltZGlMWC8zSFAxQkFvR0FaQkxDTHZLVkM3OGZFb25LOXdnb29LZC9vMlFsYzdBcFJUQ2wKc2JqRlEwcnMrdUQxMzQvR3U3OStNZDY1WFlkZUUwL0wyTU8ycGNWSHhyZDA5VUpRb29adVltZGxmbUo4Sm9LdQppUkp3VXg2UC9GdExhMzdXa08xOG5UN1FneUp2T3ZnRVFrT3BtR2JyM2orcHpuNnBObmU3M20rRy9WaVhIVTVMCmZ0T0xkc3NDZ1lFQXB0N3JCZExSTzFYdUVURXFzMlF3NVJ6QnVJMldpSUdDdy9CWllhN05XNzZNYUdDSnJYaTYKZWtRSmtHUGdyb0M0ckZlM3hvV09kZzFKaVZKUjhJRm1TZnlneVpvVlFsYmhCUHFRY0R5TDRQWkFTQkRIV1hEdQpHaEtUeGc5ZGl4WWtocXAvbHVMK3NtbVFObVpZYzRaRzZtWDE0Tk5YNkpCMTV2VkpvTEliUlZVPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==
+---
+apiVersion: apiregistration.k8s.io/v1
+kind: APIService
+metadata:
+ name: v1alpha1.tap.linkerd.io
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+spec:
+ group: tap.linkerd.io
+ version: v1alpha1
+ groupPriorityMinimum: 1000
+ versionPriority: 100
+ service:
+ name: tap
+ namespace: linkerd-viz
+ caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURKVENDQWcyZ0F3SUJBZ0lRR3pCUTJMV0lkYTZMcmNweUVncFBFREFOQmdrcWhraUc5dzBCQVFzRkFEQWUKTVJ3d0dnWURWUVFERXhOMFlYQXViR2x1YTJWeVpDMTJhWG91YzNaak1CNFhEVEl4TURReE5UQTFNemcxTUZvWApEVEl5TURReE5UQTFNemcxTUZvd0hqRWNNQm9HQTFVRUF4TVRkR0Z3TG14cGJtdGxjbVF0ZG1sNkxuTjJZekNDCkFTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBTFZiQTZ6SUlIZC9xcWNnZSsrSmROeVEKNXN3WEoyMDEzWTlJb0o4TFhFay9nM3YrZXdkQ1VuTDNPQ1VDLzgzS2xXRmQ5Vm0rOXIwRmZaYjg4NnhndUFEZgp3NVNzaDM4RjR2aWVvMkljaXc2TXQ1amxxYjFtTkRPbVBjZU14K3VkRm1tZWdpM0IzRUV3U3FSTEdENk1sREpLCmZ6WnQ5QXgrMlYzM0NKWS9mbnRMa0dxSnUwSWtiU0VzemVUVlJqWXhhTnp1bWF6Q3ZUbGZsV3pHVUZYMFpoMXoKYVJLOEExZ0c4a1czNkRxY1BFdGVZcEE2Z1NWM1lqaEpINXZSa0VVVXYwUkJ2N1F5NmR0WEx3REhxb1JZYW9oMApZVmtOV0daUlJqc1owZTFvNHptdkhuT3ZvSUM5L0w1YU0vS215a1FnWFBBMG5keFJDUk9DNzNnekR5c2locWNDCkF3RUFBYU5mTUYwd0RnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWRKUVFXTUJRR0NDc0dBUVVGQndNQkJnZ3IKQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1CNEdBMVVkRVFRWE1CV0NFM1JoY0M1c2FXNXJaWEprTFhacAplaTV6ZG1Nd0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFJK0lVZ1lUUkR6ckUwbHNxQkc2RkpPaEhkTjA1Z0NOCmJXR0lpTnN4ZHJYbVhSUm9EUVFEd0NTZVFqTVZSV3hMekdUbUh1MHJIazJBQ3M4NDJISGdSekNyRmZuZElyNEMKMllCaXhobzVwNVd2Z21PaUsvWm5RZkZ5aXV6aWpjdzVpejZJZHdCNW5vRTJQTHlmNnQveGorcHVNZHVRUGhKZwo5VzRBZm1iaFM1SjhDZ1hZOGR2UzVoaC81ZWdrekkwWlViUTNGbW9rM092SDZmNi9sRmh6RldacXlkeGwrYjZnCmYzR1JSZkY2RnlCaSt6ZGFaak5kNHRjZjh3ODc4TzFCNzExWXI3YTVjU3Y2eHZ1ZU5oTUxBZEM2bmRQbnoxbUcKanJYZ3BRak9OWU45ZHpSem5sVjNvRkdHdkMrVzhDdjRRcVZyRUZGclAxeCtISlRnTWNHYXFGUT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==
+---
+###
+### Web RBAC
+###
+apiVersion: rbac.authorization.k8s.io/v1
+kind: Role
+metadata:
+ name: web
+ namespace: linkerd
+ labels:
+ linkerd.io/extension: viz
+ component: web
+ namespace: linkerd
+rules:
+- apiGroups: [""]
+ resources: ["configmaps"]
+ verbs: ["get"]
+ resourceNames: ["linkerd-config"]
+- apiGroups: [""]
+ resources: ["namespaces", "configmaps"]
+ verbs: ["get"]
+- apiGroups: [""]
+ resources: ["serviceaccounts", "pods"]
+ verbs: ["list"]
+- apiGroups: ["apps"]
+ resources: ["replicasets"]
+ verbs: ["list"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: web
+ namespace: linkerd
+ labels:
+ linkerd.io/extension: viz
+ component: web
+ namespace: linkerd
+roleRef:
+ kind: Role
+ name: web
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: web
+ namespace: linkerd-viz
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: linkerd-linkerd-viz-web-check
+ labels:
+ linkerd.io/extension: viz
+ component: web
+rules:
+- apiGroups: ["rbac.authorization.k8s.io"]
+ resources: ["clusterroles", "clusterrolebindings"]
+ verbs: ["list"]
+- apiGroups: ["apiextensions.k8s.io"]
+ resources: ["customresourcedefinitions"]
+ verbs: ["list"]
+- apiGroups: ["admissionregistration.k8s.io"]
+ resources: ["mutatingwebhookconfigurations", "validatingwebhookconfigurations"]
+ verbs: ["list"]
+- apiGroups: ["policy"]
+ resources: ["podsecuritypolicies"]
+ verbs: ["list"]
+- apiGroups: ["linkerd.io"]
+ resources: ["serviceprofiles"]
+ verbs: ["list"]
+- apiGroups: ["apiregistration.k8s.io"]
+ resources: ["apiservices"]
+ verbs: ["get"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: linkerd-linkerd-viz-web-check
+ labels:
+ linkerd.io/extension: viz
+ component: web
+roleRef:
+ kind: ClusterRole
+ name: linkerd-linkerd-viz-web-check
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: web
+ namespace: linkerd-viz
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-linkerd-viz-web-admin
+ labels:
+ linkerd.io/extension: viz
+ component: web
+roleRef:
+ apiGroup: rbac.authorization.k8s.io
+ kind: ClusterRole
+ name: linkerd-linkerd-viz-tap-admin
+subjects:
+- kind: ServiceAccount
+ name: web
+ namespace: linkerd-viz
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRole
+metadata:
+ name: linkerd-linkerd-viz-web-api
+ labels:
+ linkerd.io/extension: viz
+ component: web
+rules:
+- apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["list"]
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: ClusterRoleBinding
+metadata:
+ name: linkerd-linkerd-viz-web-api
+ labels:
+ linkerd.io/extension: viz
+ component: web
+roleRef:
+ kind: ClusterRole
+ name: linkerd-linkerd-viz-web-api
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: web
+ namespace: linkerd-viz
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: web
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: web
+ namespace: linkerd-viz
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
+ name: viz-psp
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ namespace: linkerd-viz
+roleRef:
+ kind: Role
+ name: psp
+ apiGroup: rbac.authorization.k8s.io
+subjects:
+- kind: ServiceAccount
+ name: tap
+ namespace: linkerd-viz
+- kind: ServiceAccount
+ name: web
+ namespace: linkerd-viz
+- kind: ServiceAccount
+ name: grafana
+ namespace: linkerd-viz
+- kind: ServiceAccount
+ name: prometheus
+ namespace: linkerd-viz
+---
+###
+### Metrics API
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: metrics-api
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: metrics-api
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: viz
+ component: metrics-api
+ ports:
+ - name: http
+ port: 8085
+ targetPort: 8085
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ app.kubernetes.io/name: metrics-api
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ component: metrics-api
+ name: metrics-api
+ namespace: linkerd-viz
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/extension: viz
+ component: metrics-api
+ template:
+ metadata:
+ annotations:
+ checksum/config: 0d5b035f4d141dc2c13e1f89046de78fe0fb1208075734c3977400b866f2db51
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ component: metrics-api
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - -controller-namespace=linkerd
+ - -log-level=info
+ - -cluster-domain=cluster.local
+ - -prometheus-url=http://prometheus.linkerd-viz.svc.cluster.local:9090
+ image: cr.l5d.io/linkerd/metrics-api:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9995
+ initialDelaySeconds: 10
+ name: metrics-api
+ ports:
+ - containerPort: 8085
+ name: http
+ - containerPort: 9995
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9995
+ resources:
+ securityContext:
+ runAsUser: 2103
+ serviceAccountName: metrics-api
+---
+###
+### Grafana
+###
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: grafana-config
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: grafana
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+data:
+ grafana.ini: |-
+ instance_name = grafana
+ [server]
+ root_url = %(protocol)s://%(domain)s:/grafana/
+ [auth]
+ disable_login_form = true
+ [auth.anonymous]
+ enabled = true
+ org_role = Editor
+ [auth.basic]
+ enabled = false
+ [analytics]
+ check_for_updates = false
+ [panels]
+ disable_sanitize_html = true
+ datasources.yaml: |-
+ apiVersion: 1
+ datasources:
+ - name: prometheus
+ type: prometheus
+ access: proxy
+ orgId: 1
+ url: http://prometheus.linkerd-viz.svc.cluster.local:9090
+ isDefault: true
+ jsonData:
+ timeInterval: "5s"
+ version: 1
+ editable: true
+
+ dashboards.yaml: |-
+ apiVersion: 1
+ providers:
+ - name: 'default'
+ orgId: 1
+ folder: ''
+ type: file
+ disableDeletion: true
+ editable: true
+ options:
+ path: /var/lib/grafana/dashboards
+ homeDashboardId: linkerd-top-line
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: grafana
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: grafana
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: viz
+ component: grafana
+ ports:
+ - name: http
+ port: 3000
+ targetPort: 3000
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ app.kubernetes.io/name: grafana
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ component: grafana
+ namespace: linkerd-viz
+ name: grafana
+ namespace: linkerd-viz
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/extension: viz
+ component: grafana
+ namespace: linkerd-viz
+ template:
+ metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ component: grafana
+ namespace: linkerd-viz
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - env:
+ - name: GF_PATHS_DATA
+ value: /data
+ # Force using the go-based DNS resolver instead of the OS' to avoid failures in some environments
+ # see https://github.com/grafana/grafana/issues/20096
+ - name: GODEBUG
+ value: netdns=go
+ image: cr.l5d.io/linkerd/grafana:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /api/health
+ port: 3000
+ initialDelaySeconds: 30
+ name: grafana
+ ports:
+ - containerPort: 3000
+ name: http
+ readinessProbe:
+ httpGet:
+ path: /api/health
+ port: 3000
+ resources:
+ securityContext:
+ runAsUser: 472
+ volumeMounts:
+ - mountPath: /data
+ name: data
+ - mountPath: /etc/grafana
+ name: grafana-config
+ readOnly: true
+ serviceAccountName: grafana
+ volumes:
+ - emptyDir: {}
+ name: data
+ - configMap:
+ items:
+ - key: grafana.ini
+ path: grafana.ini
+ - key: datasources.yaml
+ path: provisioning/datasources/datasources.yaml
+ - key: dashboards.yaml
+ path: provisioning/dashboards/dashboards.yaml
+ name: grafana-config
+ name: grafana-config
+---
+###
+### Prometheus
+###
+kind: ConfigMap
+apiVersion: v1
+metadata:
+ name: prometheus-config
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: prometheus
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+data:
+ prometheus.yml: |-
+ global:
+ evaluation_interval: 10s
+ scrape_interval: 10s
+ scrape_timeout: 10s
+
+ rule_files:
+ - /etc/prometheus/*_rules.yml
+ - /etc/prometheus/*_rules.yaml
+
+ scrape_configs:
+ - job_name: 'prometheus'
+ static_configs:
+ - targets: ['localhost:9090']
+
+ - job_name: 'grafana'
+ kubernetes_sd_configs:
+ - role: pod
+ namespaces:
+ names: ['linkerd-viz']
+ relabel_configs:
+ - source_labels:
+ - __meta_kubernetes_pod_container_name
+ action: keep
+ regex: ^grafana$
+
+ # Required for: https://grafana.com/grafana/dashboards/315
+ - job_name: 'kubernetes-nodes-cadvisor'
+ scheme: https
+ tls_config:
+ ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
+ insecure_skip_verify: true
+ bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
+ kubernetes_sd_configs:
+ - role: node
+ relabel_configs:
+ - action: labelmap
+ regex: __meta_kubernetes_node_label_(.+)
+ - target_label: __address__
+ replacement: kubernetes.default.svc:443
+ - source_labels: [__meta_kubernetes_node_name]
+ regex: (.+)
+ target_label: __metrics_path__
+ replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
+ metric_relabel_configs:
+ - source_labels: [__name__]
+ regex: '(container|machine)_(cpu|memory|network|fs)_(.+)'
+ action: keep
+ - source_labels: [__name__]
+ regex: 'container_memory_failures_total' # unneeded large metric
+ action: drop
+
+ - job_name: 'linkerd-controller'
+ kubernetes_sd_configs:
+ - role: pod
+ namespaces:
+ names:
+ - 'linkerd'
+ - 'linkerd-viz'
+ relabel_configs:
+ - source_labels:
+ - __meta_kubernetes_pod_container_port_name
+ action: keep
+ regex: admin-http
+ - source_labels: [__meta_kubernetes_pod_container_name]
+ action: replace
+ target_label: component
+
+ - job_name: 'linkerd-service-mirror'
+ kubernetes_sd_configs:
+ - role: pod
+ relabel_configs:
+ - source_labels:
+ - __meta_kubernetes_pod_label_linkerd_io_control_plane_component
+ - __meta_kubernetes_pod_container_port_name
+ action: keep
+ regex: linkerd-service-mirror;admin-http$
+ - source_labels: [__meta_kubernetes_pod_container_name]
+ action: replace
+ target_label: component
+
+ - job_name: 'linkerd-proxy'
+ kubernetes_sd_configs:
+ - role: pod
+ relabel_configs:
+ - source_labels:
+ - __meta_kubernetes_pod_container_name
+ - __meta_kubernetes_pod_container_port_name
+ - __meta_kubernetes_pod_label_linkerd_io_control_plane_ns
+ action: keep
+ regex: ^linkerd-proxy;linkerd-admin;linkerd$
+ - source_labels: [__meta_kubernetes_namespace]
+ action: replace
+ target_label: namespace
+ - source_labels: [__meta_kubernetes_pod_name]
+ action: replace
+ target_label: pod
+ # special case k8s' "job" label, to not interfere with prometheus' "job"
+ # label
+ # __meta_kubernetes_pod_label_linkerd_io_proxy_job=foo =>
+ # k8s_job=foo
+ - source_labels: [__meta_kubernetes_pod_label_linkerd_io_proxy_job]
+ action: replace
+ target_label: k8s_job
+ # drop __meta_kubernetes_pod_label_linkerd_io_proxy_job
+ - action: labeldrop
+ regex: __meta_kubernetes_pod_label_linkerd_io_proxy_job
+ # __meta_kubernetes_pod_label_linkerd_io_proxy_deployment=foo =>
+ # deployment=foo
+ - action: labelmap
+ regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
+ # drop all labels that we just made copies of in the previous labelmap
+ - action: labeldrop
+ regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
+ # __meta_kubernetes_pod_label_linkerd_io_foo=bar =>
+ # foo=bar
+ - action: labelmap
+ regex: __meta_kubernetes_pod_label_linkerd_io_(.+)
+ # Copy all pod labels to tmp labels
+ - action: labelmap
+ regex: __meta_kubernetes_pod_label_(.+)
+ replacement: __tmp_pod_label_$1
+ # Take `linkerd_io_` prefixed labels and copy them without the prefix
+ - action: labelmap
+ regex: __tmp_pod_label_linkerd_io_(.+)
+ replacement: __tmp_pod_label_$1
+ # Drop the `linkerd_io_` originals
+ - action: labeldrop
+ regex: __tmp_pod_label_linkerd_io_(.+)
+ # Copy tmp labels into real labels
+ - action: labelmap
+ regex: __tmp_pod_label_(.+)
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: prometheus
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: prometheus
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: viz
+ component: prometheus
+ ports:
+ - name: admin-http
+ port: 9090
+ targetPort: 9090
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ app.kubernetes.io/name: prometheus
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ component: prometheus
+ namespace: linkerd-viz
+ name: prometheus
+ namespace: linkerd-viz
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/extension: viz
+ component: prometheus
+ namespace: linkerd-viz
+ template:
+ metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ component: prometheus
+ namespace: linkerd-viz
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ securityContext:
+ fsGroup: 65534
+ containers:
+ - args:
+ - --log.level=info
+ - --config.file=/etc/prometheus/prometheus.yml
+ - --storage.tsdb.path=/data
+ - --storage.tsdb.retention.time=6h
+ image: prom/prometheus:v2.19.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /-/healthy
+ port: 9090
+ initialDelaySeconds: 30
+ timeoutSeconds: 30
+ name: prometheus
+ ports:
+ - containerPort: 9090
+ name: admin-http
+ readinessProbe:
+ httpGet:
+ path: /-/ready
+ port: 9090
+ initialDelaySeconds: 30
+ timeoutSeconds: 30
+ resources:
+ securityContext:
+ runAsNonRoot: true
+ runAsUser: 65534
+ runAsGroup: 65534
+ volumeMounts:
+ - mountPath: /data
+ name: data
+ - mountPath: /etc/prometheus/prometheus.yml
+ name: prometheus-config
+ subPath: prometheus.yml
+ readOnly: true
+ serviceAccountName: prometheus
+ volumes:
+ - name: data
+ emptyDir: {}
+ - configMap:
+ name: prometheus-config
+ name: prometheus-config
+---
+###
+### Tap
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: tap
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: viz
+ component: tap
+ ports:
+ - name: grpc
+ port: 8088
+ targetPort: 8088
+ - name: apiserver
+ port: 443
+ targetPort: apiserver
+---
+kind: Deployment
+apiVersion: apps/v1
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ app.kubernetes.io/name: tap
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ component: tap
+ namespace: linkerd-viz
+ name: tap
+ namespace: linkerd-viz
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/extension: viz
+ component: tap
+ namespace: linkerd-viz
+ template:
+ metadata:
+ annotations:
+ checksum/config: 5fc79217811aacb9431529696878a415706666470c4979c349d764c90740dc95
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ component: tap
+ namespace: linkerd-viz
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - api
+ - -api-namespace=linkerd
+ - -log-level=info
+ - -identity-trust-domain=cluster.local
+ image: cr.l5d.io/linkerd/tap:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9998
+ initialDelaySeconds: 10
+ name: tap
+ ports:
+ - containerPort: 8088
+ name: grpc
+ - containerPort: 8089
+ name: apiserver
+ - containerPort: 9998
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9998
+ resources:
+ securityContext:
+ runAsUser: 2103
+ volumeMounts:
+ - mountPath: /var/run/linkerd/tls
+ name: tls
+ readOnly: true
+ serviceAccountName: tap
+ volumes:
+ - name: tls
+ secret:
+ secretName: tap-k8s-tls
+---
+###
+### Tap Injector RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-tap-injector
+ labels:
+ linkerd.io/extension: viz
+rules:
+- apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["get", "list", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-tap-injector
+ labels:
+ linkerd.io/extension: viz
+subjects:
+- kind: ServiceAccount
+ name: tap-injector
+ namespace: linkerd-viz
+roleRef:
+ kind: ClusterRole
+ name: linkerd-tap-injector
+ apiGroup: rbac.authorization.k8s.io
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: tap-injector
+ namespace: linkerd-viz
+---
+kind: Secret
+apiVersion: v1
+metadata:
+ name: tap-injector-k8s-tls
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+type: kubernetes.io/tls
+data:
+ tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURRRENDQWlpZ0F3SUJBZ0lRRm9QV3RhWUZJSTNreFhHcGtWNnhVakFOQmdrcWhraUc5dzBCQVFzRkFEQW4KTVNVd0l3WURWUVFERXh4MFlYQXRhVzVxWldOMGIzSXViR2x1YTJWeVpDMTJhWG91YzNaak1CNFhEVEl4TURReApOVEExTXpnMU1Gb1hEVEl5TURReE5UQTFNemcxTUZvd0p6RWxNQ01HQTFVRUF4TWNkR0Z3TFdsdWFtVmpkRzl5CkxteHBibXRsY21RdGRtbDZMbk4yWXpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUIKQU5pajZFQitDdDFXeG9DM1dyWjlnQXJRcFgzVTJxNnh1T0hielVoQVhaS2YvY29sOFpQL2JNeXVRMnFtNUE2aApoWWgzR3laTXY5ZlYyRGtscnVPTHZzL1VFWGMvQ0hkaGhoRXluaWJ6aE9hMGNoc3M3a1JHQlovTXYvSTR4T0l2Cmd3WDU1RTBiM2VpUWxlbHNjWHovN2dHR1Jxa3RQOElza2IzZHlGeTRBWmlxRzAyR2ZHV3FKL3FRZWR3dlRYVjMKSWMzenBQZEZxRHR2NnJYek95T2hwV0FkMjUwK1J6MEt4R1ZWTGV3WFZJVERBRmZnenA2Rkkxblh4RzFyMzVQYQorME1pMVg3ckxRQlBiR054TWNFWDBBQTFnSzY4NmlWaXp2czFaUHR4Nk4zR0kwL0xqcTdyYmpjRDhRVUNHWit2Ci9CSWl4aXdzejV6Q3RrTWdFa2txQ3RVQ0F3RUFBYU5vTUdZd0RnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWQKSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1DY0dBMVVkRVFRZwpNQjZDSEhSaGNDMXBibXBsWTNSdmNpNXNhVzVyWlhKa0xYWnBlaTV6ZG1Nd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBTEpnOVRJcWU5bUY0Tk94YVR3dWRBV0x6czlWbzV2Mkc1ZFdwcERDUkF2WUs1VlhqZkF4N3dGRnBLRjcKbmNNM1FSdjNFVWsyMnNwenY0eHZBYzZYUENUZUZ5RkFqLzFvemhrNEw4VGJNaEFyS0M3R2wzZHN0ejBybGRqWQpmcEZQcGxnWVdKZksrVUhoMU9Pdjd6V1lVNnV4dFJKeHd3MDRzZC9nWktObHF2aEEybVZ5L0cyWmttUExmVllmCmFQZjkzcEl3by9paGJMNmIycjg5RmlscnZRc1dWSnF4YStTbjRSL2paQnpTbFQxa0lSRU91YXdSYkIwMnF1eloKZi94a1o5VUMrY25iN3dWUlE5KzAyREJPMWw2c25jcTIvUW1wR3JsN0JDMmtEamluKy9Gb1hNZEIyc0UrUkVsRAoyM0xxRGlrWlVrNWNrR1JGUzd3SFYrcVBVbGs9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcGdJQkFBS0NBUUVBMktQb1FINEszVmJHZ0xkYXRuMkFDdENsZmRUYXJyRzQ0ZHZOU0VCZGtwLzl5aVh4CmsvOXN6SzVEYXFia0RxR0ZpSGNiSmt5LzE5WFlPU1d1NDR1K3o5UVJkejhJZDJHR0VUS2VKdk9FNXJSeUd5enUKUkVZRm44eS84ampFNGkrREJmbmtUUnZkNkpDVjZXeHhmUC91QVlaR3FTMC93aXlSdmQzSVhMZ0JtS29iVFlaOApaYW9uK3BCNTNDOU5kWGNoemZPazkwV29PMi9xdGZNN0k2R2xZQjNiblQ1SFBRckVaVlV0N0JkVWhNTUFWK0RPCm5vVWpXZGZFYld2Zms5cjdReUxWZnVzdEFFOXNZM0V4d1JmUUFEV0FycnpxSldMTyt6VmsrM0hvM2NZalQ4dU8KcnV0dU53UHhCUUlabjYvOEVpTEdMQ3pQbk1LMlF5QVNTU29LMVFJREFRQUJBb0lCQVFDbWhUNjFxK3lmKzk1eQorL3ovUHZKWDNjOEhMTUMyL1NhMmZTU0t2K2J0R0l1VWdadnlmYWhjb0NwejVUcHhRSmlLcjdxdnN0alhoNmsvCkxBY0ZJdHFWbDFXaGlsTHdxSWJMMjFPVGJ5V2R5OS9Wb2JDM3kvYnd3UXBkbm1NLzFQTnFlWTJSODdTYjJkOVIKWUNqUHcwMW40SldaM28wZXJQR050dGNXNWQxY1FTSEVKSmd2dngwSEdDZjVDOGs1eDI2cVJzQTBpdFVEYmUxeApOTEJ5RDUrTG02ZDNXeERxbDF5bGdiZC8vSzRLN1dBU3hDdHJDVURQV2NpWGxCTnhvVyswNzViMjc1YVA1TWhsCnVRVi9SQmJRYXlUQ0NKRUNsNjQvUnBubDNyNU9Pcyt2dHhzTDVJSzF1ZzNJMFp5YkxzaGZMdW05T0tndHpIdWUKNTFtbEd4ZkJBb0dCQVA1ZWt1Sy9wWUVJdWU5VlBNWTJSV2VEU1QwRUZuWCtUamxpQmFPaCs4WVBvaDNBWC9JWQpleG9aZ3B6QUd5ejFhRGFCa2NNTWczUUE5YUJLM1liODVkdi9vODE2WHcxQTZWS1RuOFRLZVFWZTIyTWI1alhiCmtDVEY1RmtOajF4N1V5Y2hUeTVVSFN3eTE1ZEdrejNYcTFwSHNsQzJVeTViZkR0eExoQS9jMTRGQW9HQkFOb0gKYTBSS21vc2lzdzhlR3EzTTNSeXUvQ3ZRZ3EyN2ZPaDV6WDhVUHFmNHNxYXJRdkUvKzB4ZzVuenY3NzZSK1lxYwoyTDQzeU5IR0h0MXA0eGRxZmRxSGZZY1A3dHpPZllMMys3REk1VVJISTNxeGMwZ3lJMGVXNDdxeFljQ09Ld1FPClN3dzRFWFBkQWlOSUxqMThtSW1YVEgveTNNeUkrNEVycFZiLzZzS1JBb0dCQU9td2x6K3NFL0FNeFUyRXdKWFYKTEVRaUVEbjNORzlvbUJNTjQrSm1JYm5maU8vT1doYy91SERNK1Byclhzd2FGWWpsMXJVY0hQU0pJU0FIUjZnSgpWVitkWjY2Uit4dGhCRHB5RjNrakRyWUpaSUtVRWhadXhlbVN5T3Vya29iRFlpeHo1SnZLZVJhdkN2UVd5WlVxCk8ybHdydmlKMkxlaEl1dzFXYjFobmFyRkFvR0JBTHhQaEJvcnhXYyt4U0RkZzNWeFo5aUtXa3NOZ0pERlNwRVEKQXFrcnR5SWs3MGg4eXdqTGxpVFYzTDAwRHdHdDJyWVoyaW9RekdaQ2xBM3drcTk2enRDY0RaTkY4NnpLdkNVTwpRbGppYXdLWjNzN3R6UUFpTGM1N1NKM0s3djc4eTdKcEZmQ3J6SWNoNytMQlNRN2FPblU4TkZxZVRJNXNFYTN6CklJOFA0cGZCQW9HQkFJWUg0ZXBBSmhBT0t5NzBZYk1UR1JyRHg1d2t6RlZZYUVEa0pqQWdqL0dVQ2t5UCs5bk8KcUtMMkZ4dVE0bDA2dlpRUnBtSWI1dGVkbm03QzlET2wvdTJ3ZzJiaEVEalVra1RFT0tGcnZQdHdqRzF6T25mawpFc2M3a3lZeHRzOVBTVEE2dmhwVHNaeVRJSHQ3YmZJMGFkcXh2U3BPK0ZiMW95aW50RzJnbUhneAotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ name: linkerd-tap-injector-webhook-config
+ labels:
+ linkerd.io/extension: viz
+webhooks:
+- name: tap-injector.linkerd.io
+ clientConfig:
+ service:
+ name: tap-injector
+ namespace: linkerd-viz
+ path: "/"
+ caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURRRENDQWlpZ0F3SUJBZ0lRRm9QV3RhWUZJSTNreFhHcGtWNnhVakFOQmdrcWhraUc5dzBCQVFzRkFEQW4KTVNVd0l3WURWUVFERXh4MFlYQXRhVzVxWldOMGIzSXViR2x1YTJWeVpDMTJhWG91YzNaak1CNFhEVEl4TURReApOVEExTXpnMU1Gb1hEVEl5TURReE5UQTFNemcxTUZvd0p6RWxNQ01HQTFVRUF4TWNkR0Z3TFdsdWFtVmpkRzl5CkxteHBibXRsY21RdGRtbDZMbk4yWXpDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUIKQU5pajZFQitDdDFXeG9DM1dyWjlnQXJRcFgzVTJxNnh1T0hielVoQVhaS2YvY29sOFpQL2JNeXVRMnFtNUE2aApoWWgzR3laTXY5ZlYyRGtscnVPTHZzL1VFWGMvQ0hkaGhoRXluaWJ6aE9hMGNoc3M3a1JHQlovTXYvSTR4T0l2Cmd3WDU1RTBiM2VpUWxlbHNjWHovN2dHR1Jxa3RQOElza2IzZHlGeTRBWmlxRzAyR2ZHV3FKL3FRZWR3dlRYVjMKSWMzenBQZEZxRHR2NnJYek95T2hwV0FkMjUwK1J6MEt4R1ZWTGV3WFZJVERBRmZnenA2Rkkxblh4RzFyMzVQYQorME1pMVg3ckxRQlBiR054TWNFWDBBQTFnSzY4NmlWaXp2czFaUHR4Nk4zR0kwL0xqcTdyYmpjRDhRVUNHWit2Ci9CSWl4aXdzejV6Q3RrTWdFa2txQ3RVQ0F3RUFBYU5vTUdZd0RnWURWUjBQQVFIL0JBUURBZ1dnTUIwR0ExVWQKSlFRV01CUUdDQ3NHQVFVRkJ3TUJCZ2dyQmdFRkJRY0RBakFNQmdOVkhSTUJBZjhFQWpBQU1DY0dBMVVkRVFRZwpNQjZDSEhSaGNDMXBibXBsWTNSdmNpNXNhVzVyWlhKa0xYWnBlaTV6ZG1Nd0RRWUpLb1pJaHZjTkFRRUxCUUFECmdnRUJBTEpnOVRJcWU5bUY0Tk94YVR3dWRBV0x6czlWbzV2Mkc1ZFdwcERDUkF2WUs1VlhqZkF4N3dGRnBLRjcKbmNNM1FSdjNFVWsyMnNwenY0eHZBYzZYUENUZUZ5RkFqLzFvemhrNEw4VGJNaEFyS0M3R2wzZHN0ejBybGRqWQpmcEZQcGxnWVdKZksrVUhoMU9Pdjd6V1lVNnV4dFJKeHd3MDRzZC9nWktObHF2aEEybVZ5L0cyWmttUExmVllmCmFQZjkzcEl3by9paGJMNmIycjg5RmlscnZRc1dWSnF4YStTbjRSL2paQnpTbFQxa0lSRU91YXdSYkIwMnF1eloKZi94a1o5VUMrY25iN3dWUlE5KzAyREJPMWw2c25jcTIvUW1wR3JsN0JDMmtEamluKy9Gb1hNZEIyc0UrUkVsRAoyM0xxRGlrWlVrNWNrR1JGUzd3SFYrcVBVbGs9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ failurePolicy: Ignore
+ admissionReviewVersions: ["v1", "v1beta1"]
+ reinvocationPolicy: IfNeeded
+ rules:
+ - operations: [ "CREATE" ]
+ apiGroups: [""]
+ apiVersions: ["v1"]
+ resources: ["pods"]
+ sideEffects: None
+---
+###
+### Tap Injector
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: tap-injector
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: tap-injector
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: viz
+ component: tap-injector
+ ports:
+ - name: tap-injector
+ port: 443
+ targetPort: tap-injector
+---
+kind: Deployment
+apiVersion: apps/v1
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ app.kubernetes.io/name: tap-injector
+ app.kubernetes.io/part-of: Linkerd
+ component: tap-injector
+ name: tap-injector
+ namespace: linkerd-viz
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ component: tap-injector
+ template:
+ metadata:
+ annotations:
+ checksum/config: 4943852fc97037800d45294b7dbc0104bc0a12b81d45301eefced88f641b3fef
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ component: tap-injector
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - injector
+ - -tap-service-name=tap.linkerd-viz.serviceaccount.identity.$(_l5d_ns).$(_l5d_trustdomain)
+ - -log-level=info
+ image: cr.l5d.io/linkerd/tap:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9995
+ initialDelaySeconds: 10
+ name: tap-injector
+ ports:
+ - containerPort: 8443
+ name: tap-injector
+ - containerPort: 9995
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9995
+ resources:
+ securityContext:
+ runAsUser: 2103
+ volumeMounts:
+ - mountPath: /var/run/linkerd/tls
+ name: tls
+ readOnly: true
+ serviceAccountName: tap-injector
+ volumes:
+ - name: tls
+ secret:
+ secretName: tap-injector-k8s-tls
+---
+###
+### Web
+###
+kind: Service
+apiVersion: v1
+metadata:
+ name: web
+ namespace: linkerd-viz
+ labels:
+ linkerd.io/extension: viz
+ component: web
+ namespace: linkerd-viz
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: viz
+ component: web
+ ports:
+ - name: http
+ port: 8084
+ targetPort: 8084
+ - name: admin-http
+ port: 9994
+ targetPort: 9994
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ app.kubernetes.io/name: web
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ component: web
+ namespace: linkerd-viz
+ name: web
+ namespace: linkerd-viz
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/extension: viz
+ component: web
+ namespace: linkerd-viz
+ template:
+ metadata:
+ annotations:
+ linkerd.io/created-by: linkerd/helm edge-21.4.3
+ labels:
+ linkerd.io/extension: viz
+ component: web
+ namespace: linkerd-viz
+ spec:
+ nodeSelector:
+ beta.kubernetes.io/os: linux
+ containers:
+ - args:
+ - -linkerd-controller-api-addr=linkerd-controller-api.linkerd.svc.cluster.local:8085
+ - -linkerd-metrics-api-addr=metrics-api.linkerd-viz.svc.cluster.local:8085
+ - -cluster-domain=cluster.local
+ - -grafana-addr=grafana.linkerd-viz.svc.cluster.local:3000
+ - -controller-namespace=linkerd
+ - -viz-namespace=linkerd-viz
+ - -log-level=info
+ - -enforced-host=^(localhost|127\.0\.0\.1|web\.linkerd-viz\.svc\.cluster\.local|web\.linkerd-viz\.svc|\[::1\])(:\d+)?$
+ image: cr.l5d.io/linkerd/web:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9994
+ initialDelaySeconds: 10
+ name: web
+ ports:
+ - containerPort: 8084
+ name: http
+ - containerPort: 9994
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9994
+ resources:
+ securityContext:
+ runAsUser: 2103
+ serviceAccountName: web
diff --git a/kubernetes/servicemesh/linkerd/readme.md b/kubernetes/servicemesh/linkerd/readme.md
index 83c0915ca..f568c326c 100644
--- a/kubernetes/servicemesh/linkerd/readme.md
+++ b/kubernetes/servicemesh/linkerd/readme.md
@@ -5,7 +5,7 @@
Lets create a Kubernetes cluster to play with using [kind](https://kind.sigs.k8s.io/docs/user/quick-start/)
```
-kind create cluster --name linkerd --image kindest/node:v1.19.1
+kind create cluster --name linkerd --image kindest/node:v1.20.2
```
## Deploy our microservices (Video catalog)
@@ -96,12 +96,12 @@ linkerd-control-plane Ready master 26m v1.19.1
## Linkerd CLI
Lets download the `linkerd` command line tool
-I grabbed the `edge-20.10.1` release using `curl`
+I grabbed the `edge-21.4.3` release using `curl`
-You can go to the [releases](https://github.com/linkerd/linkerd2/releases/tag/edge-20.10.1) page to get it
+You can go to the [releases](https://github.com/linkerd/linkerd2/releases/tag/edge-21.4.3) page to get it
```
-curl -L -o linkerd https://github.com/linkerd/linkerd2/releases/download/edge-20.10.1/linkerd2-cli-edge-20.10.1-linux-amd64
+curl -L -o linkerd https://github.com/linkerd/linkerd2/releases/download/edge-21.4.3/linkerd2-cli-edge-21.4.3-linux-amd64
chmod +x linkerd && mv ./linkerd /usr/local/bin/
linkerd --help
@@ -119,13 +119,13 @@ linkerd check --pre
## Get the YAML
```
-linkerd install > ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
+linkerd install > ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-21.4.3.yaml
```
## Install Linkerd
```
-kubectl apply -f ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-20.10.1.yaml
+kubectl apply -f ./kubernetes/servicemesh/linkerd/manifest/linkerd-edge-21.4.3.yaml
```
Let's wait until all components are running
@@ -143,10 +143,23 @@ linkerd check
## The dashboard
+To access the Linkerd dashboard, we need to install the `viz` extension:
+
+```
+#generate manifests to take a look
+linkerd viz install > ./kubernetes/servicemesh/linkerd/manifest/viz-edge-21.4.3.yaml
+
+#install the manifest
+kubectl apply -f ./kubernetes/servicemesh/linkerd/manifest/viz-edge-21.4.3.yaml
+
+#wait for components to be running
+watch kubectl -n linkerd-viz get pods
+```
+
Let's access the `linkerd` dashboard via `port-forward`
```
-kubectl -n linkerd port-forward svc/linkerd-web 8084
+kubectl -n linkerd-viz port-forward svc/web 8084
```
# Mesh our video catalog services
diff --git a/kubernetes/servicemesh/linkerd/tracing/README.md b/kubernetes/servicemesh/linkerd/tracing/README.md
new file mode 100644
index 000000000..1fe51d15f
--- /dev/null
+++ b/kubernetes/servicemesh/linkerd/tracing/README.md
@@ -0,0 +1,43 @@
+# Introduction to Linkerd : Distributed Tracing with Jaeger
+
+Get the jaeger extension from the linkerd CLI. See [Official Docs](https://linkerd.io/2.10/tasks/distributed-tracing/)
+
+```
+linkerd jaeger install > ./kubernetes/servicemesh/linkerd/tracing/manifests/linkerd-jaeger-21.4.3.yaml
+```
+
+Deploy the manifests:
+
+```
+kubectl apply -f ./kubernetes/servicemesh/linkerd/tracing/manifests/linkerd-jaeger-21.4.3.yaml
+```
+
+See components
+
+```
+watch kubectl -n linkerd-jaeger get pods
+
+#do a check
+linkerd jaeger check
+```
+
+
+kubectl -n default set env --all deploy OC_AGENT_HOST=collector.linkerd-jaeger:55678
+
+# Jaeger Dashboard
+
+See service mesh traces in the dashboard
+
+```
+kubectl -n linkerd-jaeger port-forward svc/jaeger 16686
+```
+
+Deploy the Jaeger All-in-One image for demo purposes
+
+ kubectl apply -f .\kubernetes\servicemesh\linkerd\tracing\jaeger-all-in-one.yaml
+
+kubectl port-forward svc/jaeger-query 16686:80
+
+ Enable tracing :
+
+ linkerd upgrade config --addon-config kubernetes/servicemesh/linkerd/tracing/config.yaml | kubectl apply -f -
diff --git a/kubernetes/servicemesh/linkerd/tracing/config.yaml b/kubernetes/servicemesh/linkerd/tracing/config.yaml
new file mode 100644
index 000000000..925e1fe76
--- /dev/null
+++ b/kubernetes/servicemesh/linkerd/tracing/config.yaml
@@ -0,0 +1,2 @@
+tracing:
+ enabled: true
\ No newline at end of file
diff --git a/kubernetes/servicemesh/linkerd/tracing/jaeger-all-in-one.yaml b/kubernetes/servicemesh/linkerd/tracing/jaeger-all-in-one.yaml
new file mode 100644
index 000000000..140dc5b43
--- /dev/null
+++ b/kubernetes/servicemesh/linkerd/tracing/jaeger-all-in-one.yaml
@@ -0,0 +1,158 @@
+#
+# Copyright 2017-2019 The Jaeger Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+# in compliance with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software distributed under the License
+# is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+# or implied. See the License for the specific language governing permissions and limitations under
+# the License.
+#
+
+apiVersion: v1
+kind: List
+items:
+- apiVersion: apps/v1
+ kind: Deployment
+ metadata:
+ name: jaeger
+ labels:
+ app: jaeger
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: all-in-one
+ spec:
+ selector:
+ matchLabels:
+ app: jaeger
+ replicas: 1
+ strategy:
+ type: Recreate
+ template:
+ metadata:
+ labels:
+ app: jaeger
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: all-in-one
+ annotations:
+ prometheus.io/scrape: "true"
+ prometheus.io/port: "16686"
+ spec:
+ containers:
+ - env:
+ - name: COLLECTOR_ZIPKIN_HTTP_PORT
+ value: "9411"
+ image: jaegertracing/all-in-one
+ name: jaeger
+ ports:
+ - containerPort: 5775
+ protocol: UDP
+ - containerPort: 6831
+ protocol: UDP
+ - containerPort: 6832
+ protocol: UDP
+ - containerPort: 5778
+ protocol: TCP
+ - containerPort: 16686
+ protocol: TCP
+ - containerPort: 9411
+ protocol: TCP
+ readinessProbe:
+ httpGet:
+ path: "/"
+ port: 14269
+ initialDelaySeconds: 5
+- apiVersion: v1
+ kind: Service
+ metadata:
+ name: jaeger-query
+ labels:
+ app: jaeger
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: query
+ spec:
+ ports:
+ - name: query-http
+ port: 80
+ protocol: TCP
+ targetPort: 16686
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: all-in-one
+ type: LoadBalancer
+- apiVersion: v1
+ kind: Service
+ metadata:
+ name: jaeger-collector
+ labels:
+ app: jaeger
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: collector
+ spec:
+ ports:
+ - name: jaeger-collector-tchannel
+ port: 14267
+ protocol: TCP
+ targetPort: 14267
+ - name: jaeger-collector-http
+ port: 14268
+ protocol: TCP
+ targetPort: 14268
+ - name: jaeger-collector-zipkin
+ port: 9411
+ protocol: TCP
+ targetPort: 9411
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: all-in-one
+ type: ClusterIP
+- apiVersion: v1
+ kind: Service
+ metadata:
+ name: jaeger-agent
+ labels:
+ app: jaeger
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: agent
+ spec:
+ ports:
+ - name: agent-zipkin-thrift
+ port: 5775
+ protocol: UDP
+ targetPort: 5775
+ - name: agent-compact
+ port: 6831
+ protocol: UDP
+ targetPort: 6831
+ - name: agent-binary
+ port: 6832
+ protocol: UDP
+ targetPort: 6832
+ - name: agent-configs
+ port: 5778
+ protocol: TCP
+ targetPort: 5778
+ clusterIP: None
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: all-in-one
+- apiVersion: v1
+ kind: Service
+ metadata:
+ name: zipkin
+ labels:
+ app: jaeger
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: zipkin
+ spec:
+ ports:
+ - name: jaeger-collector-zipkin
+ port: 9411
+ protocol: TCP
+ targetPort: 9411
+ clusterIP: None
+ selector:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/component: all-in-one
diff --git a/kubernetes/servicemesh/linkerd/tracing/manifests/linkerd-jaeger-21.4.3.yaml b/kubernetes/servicemesh/linkerd/tracing/manifests/linkerd-jaeger-21.4.3.yaml
new file mode 100644
index 000000000..633fd6a3a
--- /dev/null
+++ b/kubernetes/servicemesh/linkerd/tracing/manifests/linkerd-jaeger-21.4.3.yaml
@@ -0,0 +1,350 @@
+---
+kind: Namespace
+apiVersion: v1
+metadata:
+ name: linkerd-jaeger
+ labels:
+ linkerd.io/extension: jaeger
+ annotations:
+ linkerd.io/inject: enabled
+---
+###
+### Jaeger Injector
+###
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ linkerd.io/extension: jaeger
+ app.kubernetes.io/name: jaeger-injector
+ app.kubernetes.io/part-of: Linkerd
+ app.kubernetes.io/version: edge-21.4.3
+ component: jaeger-injector
+ name: jaeger-injector
+ namespace: linkerd-jaeger
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ linkerd.io/extension: jaeger
+ component: jaeger-injector
+ template:
+ metadata:
+ annotations:
+ checksum/config: 4b2f7dc6a9d7525cbacb6dc9aaaa014583a54724af8ee10d8dc3c6a3d4d22d13
+ labels:
+ linkerd.io/extension: jaeger
+ component: jaeger-injector
+ spec:
+ containers:
+ - args:
+ - -collector-svc-addr=collector.linkerd-jaeger:55678
+ - -collector-svc-account=collector
+ - -log-level=info
+ image: cr.l5d.io/linkerd/jaeger-webhook:edge-21.4.3
+ imagePullPolicy: IfNotPresent
+ livenessProbe:
+ httpGet:
+ path: /ping
+ port: 9995
+ initialDelaySeconds: 10
+ name: jaeger-injector
+ ports:
+ - containerPort: 8443
+ name: jaeger-injector
+ - containerPort: 9995
+ name: admin-http
+ readinessProbe:
+ failureThreshold: 7
+ httpGet:
+ path: /ready
+ port: 9995
+ volumeMounts:
+ - mountPath: /var/run/linkerd/tls
+ name: tls
+ readOnly: true
+ serviceAccountName: jaeger-injector
+ volumes:
+ - name: tls
+ secret:
+ secretName: jaeger-injector-k8s-tls
+---
+kind: Service
+apiVersion: v1
+metadata:
+ name: jaeger-injector
+ namespace: linkerd-jaeger
+ labels:
+ linkerd.io/extension: jaeger
+ component: jaeger-injector
+spec:
+ type: ClusterIP
+ selector:
+ linkerd.io/extension: jaeger
+ component: jaeger-injector
+ ports:
+ - name: jaeger-injector
+ port: 443
+ targetPort: jaeger-injector
+---
+###
+### collector RBAC
+###
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: collector
+ namespace: linkerd-jaeger
+---
+###
+### jaeger RBAC
+###
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: jaeger
+ namespace: linkerd-jaeger
+
+---
+###
+### Jaeger Injector RBAC
+###
+kind: ClusterRole
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-jaeger-injector
+ labels:
+ linkerd.io/extension: jaeger
+rules:
+- apiGroups: [""]
+ resources: ["namespaces"]
+ verbs: ["get", "list", "watch"]
+---
+kind: ClusterRoleBinding
+apiVersion: rbac.authorization.k8s.io/v1
+metadata:
+ name: linkerd-jaeger-injector
+ labels:
+ linkerd.io/extension: jaeger
+subjects:
+- kind: ServiceAccount
+ name: jaeger-injector
+ namespace: linkerd-jaeger
+ apiGroup: ""
+roleRef:
+ kind: ClusterRole
+ name: linkerd-jaeger-injector
+ apiGroup: rbac.authorization.k8s.io
+---
+kind: ServiceAccount
+apiVersion: v1
+metadata:
+ name: jaeger-injector
+ namespace: linkerd-jaeger
+---
+kind: Secret
+apiVersion: v1
+metadata:
+ name: jaeger-injector-k8s-tls
+ namespace: linkerd-jaeger
+type: kubernetes.io/tls
+data:
+ tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVakNDQWpxZ0F3SUJBZ0lRVHFDdnBmMCtHbGtJL0VyUWFTOFl3ekFOQmdrcWhraUc5dzBCQVFzRkFEQXQKTVNzd0tRWURWUVFERXlKcVlXVm5aWEl0YVc1cVpXTjBiM0l1YkdsdWEyVnlaQzFxWVdWblpYSXVjM1pqTUI0WApEVEl4TURReE5UQTFORFkwT0ZvWERUSXlNRFF4TlRBMU5EWTBPRm93TFRFck1Da0dBMVVFQXhNaWFtRmxaMlZ5CkxXbHVhbVZqZEc5eUxteHBibXRsY21RdGFtRmxaMlZ5TG5OMll6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFEQ0NBUW9DZ2dFQkFORStuNm1US1N6bXo5a0RSbEUzRTkvZlc2c24zemhyclArbFUyNnFiNXYxb1M0VgppUDRkZmFkbDNwYkJmV0hNaXM4RDRQN3llTjV5UlBPZHlWKzBFaG9DdjllY3B1bkx5MmJxWUJNQVJFdVBuejNPCnBvSHR0WGwrK0pVWDFxVTFpUkEzNDU3NW5ycjBFNWNDMXJvaVNPbkh1eDdZYWwrcTVlK2VWb2ExYTJJck81eUwKT21ZRlFERHZ3S2IxRlU4QjdnOFlKYnpOS3VSTEFqT2NxcmR2S3JycGlXZUQ1VHFWOE1xTG8xTzNLRDhXWGZVVwpYZVZBWUFmNHhBL1JRMjA4S2QrZ0EwZVN0V1ZqL0VLcFVOR3RhbEREYjJNRHJ4bEh1NjlRQlhVK3lJMW8zS1FNCkZKSk0zRWVMdnE0NGJaVE9KWDhMUlo1RXN3bUMxUXI0U2tYWTVDY0NBd0VBQWFOdU1Hd3dEZ1lEVlIwUEFRSC8KQkFRREFnV2dNQjBHQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBTUJnTlZIUk1CQWY4RQpBakFBTUMwR0ExVWRFUVFtTUNTQ0ltcGhaV2RsY2kxcGJtcGxZM1J2Y2k1c2FXNXJaWEprTFdwaFpXZGxjaTV6CmRtTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR1VRbEo5a2ZZUW1MR0syUzlteG45OXhmMmlNdWZTN2dKcTMKMFI5VVNPS2EyZ2hMSmVqbjEzQkd0MlBWbnZDVXFTbzRnVGtHNjZlM1IvT2FPdm1iVkZLRUpqUTQ5Q3VzRHBmVgpwQnNTMFhwVm9Eb1B3ck1DQWtyb0h4K3dURDdQTzZqZ0FzSy9kbUl0czJHSFpPS3dQTU10cStjTk1IWEgxRTRECjdJVGVxazA1T2MyamkrcDBEWkc2N1hubDZZV2g1Y0tzNFMyMy82WEo5QlZKU3pQc2s5UnFpTzhqRU5KUE92MHYKV0QwRjlYeWRwYUZ2ZmYyS2ZGa3YrUlBMWlBsZHFsQ25BdHFRblZwQytIVDRqdUhMdVY3aVY3MTFOVTBWaUt2SwpqbzRub2tuRXdCd01VSUtLdUxEUTJUYXBhUGI0THJ5czJBK3VGN0s2cjlBbkhWM01pSmc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ tls.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBMFQ2ZnFaTXBMT2JQMlFOR1VUY1QzOTlicXlmZk9HdXMvNlZUYnFwdm0vV2hMaFdJCi9oMTlwMlhlbHNGOVljeUt6d1BnL3ZKNDNuSkU4NTNKWDdRU0dnSy8xNXltNmN2TFp1cGdFd0JFUzQrZlBjNm0KZ2UyMWVYNzRsUmZXcFRXSkVEZmpudm1ldXZRVGx3TFd1aUpJNmNlN0h0aHFYNnJsNzU1V2hyVnJZaXM3bklzNgpaZ1ZBTU8vQXB2VVZUd0h1RHhnbHZNMHE1RXNDTTV5cXQyOHF1dW1KWjRQbE9wWHd5b3VqVTdjb1B4WmQ5UlpkCjVVQmdCL2pFRDlGRGJUd3AzNkFEUjVLMVpXUDhRcWxRMGExcVVNTnZZd092R1VlN3IxQUZkVDdJaldqY3BBd1UKa2t6Y1I0dStyamh0bE00bGZ3dEZua1N6Q1lMVkN2aEtSZGprSndJREFRQUJBb0lCQVFDNGxqd1hSZ0R1NFhhKwpCSXVGbmNia21ZK3VmM0FGdjhkUGhyTUJUMDFDRWYvc1BZY3FWUzNCL0xYTjNFY1ZmWEYraWZkME1NYTd4YVphCkd2bkllWHYyZ2pKbXJJVDZmcE9pNkdOMG42bWYxc1V0cXgxc1JSendYemcvbmxYMlRESHJvc0lrUGlUdTI5NWsKTzFiZHdOejlqdnJkalNEWjRGTVRmV1RyVlNPejVzRndsM2tEWmlTSjFOOXp1eW0vT0FkVUpYN0VrdWJhaGwxVwpmaUhXR25zQk9GRkZ1TWQrNlRmcVpNUlNmTE0vTm9hM3pvemRucERmRk80NEI3ZS9WRkhrazNTQVpPYUk1WXVxCitZbTBXYnlzNVE4ZDliUEJGdjdyUmlzSlNWRjdUdTRIOGVIZXZOK053MHo0aHlrTmZkc1hhZkwrekU5M1BmOE4KeEFmVFAyV2hBb0dCQU5KNGJTaDJCZnhiN0xTTXZ5NHFlbWk2T2xBVUZ2RzNyMUQ1d3hkMFhpbWRmbGFGdSszcQozUDFlQklOYkJ1empkZ25QM3J5czZYa0JBTDduK2FTbkQwRmg1R05zdko3ZEZxTmRCa1FwdXFIUk45Ync5bDNiCm02NFFoWEZoeTk0R1ZnVzlabCt0R2RwRzN0MmZRSDRwd3JaT1pUWGJzUEV5emc1SEhqenNCMUV2QW9HQkFQNkMKVUlZOVFxK1ZQaGZqRkU0N3lVUG5GOHNCUmV4UTBKM0QvT2kvYmZ6QUQ5c2VkQWhROTg2WDlxTGtqZUZ6eTVjcQpmNnVVc1RScjF1SldwOEVzekYwWURTWGEvVTZjQStTbzdzR2FJR3dpNTJ4VVQxdVNoSm1JNllkYU1xTFBIOE5sCmJoTDZneWM0dGxOQjFqSWVXUWxwVW9lenhlWUxRRWlSZTZQcUtDNkpBb0dBYkhZTTRyWDNuYllOaEhtbnAvWFMKQVJnL0pyZERuNnNtR0pldGR1L0wrcXdqeUJqQTRQbVFpcTBockVPRGpSNG0zU1dYUmluaFl5OG1JRHRSUmcybAphZTgxa0JzZ0ZNb2dlVzFkNWxDTzBnY01QS01PZ3czQjYzQ3VJK0RlKzNyT1o4VFQ5ZWd4azIvRU4vZHlkOUd6CmV0bHBoTmpERlhrMkFOdWJkSSs1c1pjQ2dZQkE1RzB2clJNQnZlWFZKVnNhRDNoanpkcHRNbWZudHp0WjNvenYKczArUjhFNmFxZ3NmeTdWRGdjK3EvT2VJSW9RNGlPZUFraXNVbUtKemwzQ3llbitwQk9ibFRnN2tLamQ3NSs3bwpnaW5lS0pBbE9PSDdFVUtwK3hUQUpDbGhCYnF0a1lFZGFhNWpJN3lwUWRJaGVVZHVkT0pNSTNSRUVYNVVnbk9wCitaeEJNUUtCZ1FDQWFTdDRSQXoxVHAyZS9FZTZlU0JvZUlrUEt2YjFqMSsxUGtUOHQyMHExZGpuUWlHTHozdEUKL0lKTEkvM3A1M0RXeWthSitWQkZBTGhqQjd5Zm9QS2NKVXAwcHd5RWZWZjlKNmJmNG14V0JZMGFjU1hOUCs3OAo0MWozeitRaDlzZUZ6V3JNNk1WdzdKQWhCQVhVa1BjZVJiMFIxTFVsK20yMU1mY0twMFB3Snc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQ==
+---
+apiVersion: admissionregistration.k8s.io/v1
+kind: MutatingWebhookConfiguration
+metadata:
+ name: linkerd-jaeger-injector-webhook-config
+ labels:
+ linkerd.io/extension: jaeger
+webhooks:
+- name: jaeger-injector.linkerd.io
+ clientConfig:
+ service:
+ name: jaeger-injector
+ namespace: linkerd-jaeger
+ path: "/"
+ caBundle: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURVakNDQWpxZ0F3SUJBZ0lRVHFDdnBmMCtHbGtJL0VyUWFTOFl3ekFOQmdrcWhraUc5dzBCQVFzRkFEQXQKTVNzd0tRWURWUVFERXlKcVlXVm5aWEl0YVc1cVpXTjBiM0l1YkdsdWEyVnlaQzFxWVdWblpYSXVjM1pqTUI0WApEVEl4TURReE5UQTFORFkwT0ZvWERUSXlNRFF4TlRBMU5EWTBPRm93TFRFck1Da0dBMVVFQXhNaWFtRmxaMlZ5CkxXbHVhbVZqZEc5eUxteHBibXRsY21RdGFtRmxaMlZ5TG5OMll6Q0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFEQ0NBUW9DZ2dFQkFORStuNm1US1N6bXo5a0RSbEUzRTkvZlc2c24zemhyclArbFUyNnFiNXYxb1M0VgppUDRkZmFkbDNwYkJmV0hNaXM4RDRQN3llTjV5UlBPZHlWKzBFaG9DdjllY3B1bkx5MmJxWUJNQVJFdVBuejNPCnBvSHR0WGwrK0pVWDFxVTFpUkEzNDU3NW5ycjBFNWNDMXJvaVNPbkh1eDdZYWwrcTVlK2VWb2ExYTJJck81eUwKT21ZRlFERHZ3S2IxRlU4QjdnOFlKYnpOS3VSTEFqT2NxcmR2S3JycGlXZUQ1VHFWOE1xTG8xTzNLRDhXWGZVVwpYZVZBWUFmNHhBL1JRMjA4S2QrZ0EwZVN0V1ZqL0VLcFVOR3RhbEREYjJNRHJ4bEh1NjlRQlhVK3lJMW8zS1FNCkZKSk0zRWVMdnE0NGJaVE9KWDhMUlo1RXN3bUMxUXI0U2tYWTVDY0NBd0VBQWFOdU1Hd3dEZ1lEVlIwUEFRSC8KQkFRREFnV2dNQjBHQTFVZEpRUVdNQlFHQ0NzR0FRVUZCd01CQmdnckJnRUZCUWNEQWpBTUJnTlZIUk1CQWY4RQpBakFBTUMwR0ExVWRFUVFtTUNTQ0ltcGhaV2RsY2kxcGJtcGxZM1J2Y2k1c2FXNXJaWEprTFdwaFpXZGxjaTV6CmRtTXdEUVlKS29aSWh2Y05BUUVMQlFBRGdnRUJBR1VRbEo5a2ZZUW1MR0syUzlteG45OXhmMmlNdWZTN2dKcTMKMFI5VVNPS2EyZ2hMSmVqbjEzQkd0MlBWbnZDVXFTbzRnVGtHNjZlM1IvT2FPdm1iVkZLRUpqUTQ5Q3VzRHBmVgpwQnNTMFhwVm9Eb1B3ck1DQWtyb0h4K3dURDdQTzZqZ0FzSy9kbUl0czJHSFpPS3dQTU10cStjTk1IWEgxRTRECjdJVGVxazA1T2MyamkrcDBEWkc2N1hubDZZV2g1Y0tzNFMyMy82WEo5QlZKU3pQc2s5UnFpTzhqRU5KUE92MHYKV0QwRjlYeWRwYUZ2ZmYyS2ZGa3YrUlBMWlBsZHFsQ25BdHFRblZwQytIVDRqdUhMdVY3aVY3MTFOVTBWaUt2SwpqbzRub2tuRXdCd01VSUtLdUxEUTJUYXBhUGI0THJ5czJBK3VGN0s2cjlBbkhWM01pSmc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+ failurePolicy: Ignore
+ admissionReviewVersions: ["v1", "v1beta1"]
+ reinvocationPolicy: IfNeeded
+ rules:
+ - operations: [ "CREATE" ]
+ apiGroups: [""]
+ apiVersions: ["v1"]
+ resources: ["pods"]
+ sideEffects: None
+---
+###
+### Tracing Collector Service
+###
+apiVersion: v1
+kind: ConfigMap
+metadata:
+ name: collector-config
+ namespace: linkerd-jaeger
+ labels:
+ component: collector
+data:
+ collector-config: |
+ receivers:
+ opencensus:
+ port: 55678
+ zipkin:
+ port: 9411
+ jaeger:
+ jaeger-thrift-http-port: 14268
+ queued-exporters:
+ jaeger-all-in-one:
+ num-workers: 4
+ queue-size: 100
+ retry-on-failure: true
+ sender-type: jaeger-thrift-http
+ jaeger-thrift-http:
+ collector-endpoint: http://jaeger.linkerd-jaeger:14268/api/traces
+ timeout: 5s
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: collector
+ namespace: linkerd-jaeger
+ labels:
+ component: collector
+spec:
+ type: ClusterIP
+ ports:
+ - name: opencensus
+ port: 55678
+ protocol: TCP
+ targetPort: 55678
+ - name: zipkin
+ port: 9411
+ protocol: TCP
+ targetPort: 9411
+ - name: jaeger
+ port: 14268
+ protocol: TCP
+ targetPort: 14268
+ selector:
+ component: collector
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/name: collector
+ app.kubernetes.io/part-of: Linkerd
+ component: collector
+ name: collector
+ namespace: linkerd-jaeger
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ component: collector
+ minReadySeconds: 5
+ progressDeadlineSeconds: 120
+ template:
+ metadata:
+ annotations:
+ prometheus.io/path: /metrics
+ prometheus.io/port: "8888"
+ prometheus.io/scrape: "true"
+ labels:
+ component: collector
+ spec:
+ containers:
+ - command:
+ - /occollector_linux
+ - --config=/conf/collector-config.yaml
+ env:
+ - name: GOGC
+ value: "80"
+ image: omnition/opencensus-collector:0.1.11
+ imagePullPolicy: Always
+ livenessProbe:
+ httpGet:
+ path: /
+ port: 13133
+ name: oc-collector
+ ports:
+ - containerPort: 55678
+ - containerPort: 9411
+ - containerPort: 14268
+ - containerPort: 8888
+ readinessProbe:
+ httpGet:
+ path: /
+ port: 13133
+ volumeMounts:
+ - mountPath: /conf
+ name: collector-config-val
+ serviceAccountName: collector
+ volumes:
+ - configMap:
+ items:
+ - key: collector-config
+ path: collector-config.yaml
+ name: collector-config
+ name: collector-config-val
+---
+###
+### Tracing Jaeger Service
+###
+apiVersion: v1
+kind: Service
+metadata:
+ name: jaeger
+ namespace: linkerd-jaeger
+ labels:
+ component: jaeger
+spec:
+ type: ClusterIP
+ selector:
+ component: jaeger
+ ports:
+ - name: collection
+ port: 14268
+ - name: ui
+ port: 16686
+---
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app.kubernetes.io/name: jaeger
+ app.kubernetes.io/part-of: Linkerd
+ component: jaeger
+ name: jaeger
+ namespace: linkerd-jaeger
+spec:
+ replicas: 1
+ selector:
+ matchLabels:
+ component: jaeger
+ template:
+ metadata:
+ annotations:
+ prometheus.io/path: /metrics
+ prometheus.io/port: "14269"
+ prometheus.io/scrape: "true"
+ labels:
+ component: jaeger
+ spec:
+ containers:
+ - args:
+ - --query.base-path=/jaeger
+ image: jaegertracing/all-in-one:1.19.2
+ imagePullPolicy: Always
+ name: jaeger
+ ports:
+ - containerPort: 14269
+ name: admin
+ - containerPort: 14268
+ name: collection
+ - containerPort: 16686
+ name: ui
+ dnsPolicy: ClusterFirst
+ serviceAccountName: jaeger
diff --git a/tracing/README.md b/tracing/README.md
index f615b826d..57025d95c 100644
--- a/tracing/README.md
+++ b/tracing/README.md
@@ -105,13 +105,13 @@ This is intentional to demonstrate a busy network.
+------------+ +---------------+ +--------------+
| videos-web +---->+ playlists-api +--->+ playlists-db |
-| | | | | |
+| | | | | [redis] |
+------------+ +-----+---------+ +--------------+
|
v
+-----+------+ +-----------+
| videos-api +------>+ videos-db |
- | | | |
+ | | | [redis] |
+------------+ +-----------+
```
diff --git a/tracing/applications-go/playlists-api/app.go b/tracing/applications-go/playlists-api/app.go
index d5d6850dc..84100801d 100644
--- a/tracing/applications-go/playlists-api/app.go
+++ b/tracing/applications-go/playlists-api/app.go
@@ -23,6 +23,8 @@ const serviceName = "playlists-api"
var environment = os.Getenv("ENVIRONMENT")
var redis_host = os.Getenv("REDIS_HOST")
var redis_port = os.Getenv("REDIS_PORT")
+var jaeger_host_port = os.Getenv("JAEGER_HOST_PORT")
+
var ctx = context.Background()
var rdb *redis.Client
@@ -40,7 +42,7 @@ func main() {
// Log the emitted spans to stdout.
Reporter: &config.ReporterConfig{
LogSpans: true,
- LocalAgentHostPort: "jaeger:6831",
+ LocalAgentHostPort: jaeger_host_port,
},
}
@@ -60,7 +62,7 @@ func main() {
opentracing.HTTPHeadersCarrier(r.Header),
)
- span := tracer.StartSpan("/ GET", ext.RPCServerOption(spanCtx))
+ span := tracer.StartSpan("playlists-api: GET /", ext.RPCServerOption(spanCtx))
defer span.Finish()
cors(w)
@@ -80,7 +82,7 @@ func main() {
vs := []videos{}
for vi := range playlists[pi].Videos {
- span, _ := opentracing.StartSpanFromContext(ctx, "videos-api GET")
+ span, _ := opentracing.StartSpanFromContext(ctx, "playlists-api: videos-api GET /id")
v := videos{}
@@ -96,8 +98,8 @@ func main() {
)
videoResp, err :=http.DefaultClient.Do(req)
-
span.Finish()
+
if err != nil {
fmt.Println(err)
span.SetTag("error", true)
@@ -149,7 +151,7 @@ func main() {
func getPlaylists(ctx context.Context)(response string){
- span, _ := opentracing.StartSpanFromContext(ctx, "redis-get")
+ span, _ := opentracing.StartSpanFromContext(ctx, "playlists-api: redis-get")
defer span.Finish()
playlistData, err := rdb.Get(ctx, "playlists").Result()
diff --git a/tracing/applications-go/videos-api-netcore/deploy.yaml b/tracing/applications-go/videos-api-netcore/deploy.yaml
new file mode 100644
index 000000000..cdcb58589
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/deploy.yaml
@@ -0,0 +1,65 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: videos-api
+ labels:
+ app: videos-api
+spec:
+ selector:
+ matchLabels:
+ app: videos-api
+ replicas: 1
+ strategy:
+ type: RollingUpdate
+ rollingUpdate:
+ maxSurge: 1
+ maxUnavailable: 0
+ template:
+ metadata:
+ labels:
+ app: videos-api
+ spec:
+ containers:
+ - name: videos-api
+ image: aimvector/jaeger-tracing:videos-api-netcore-1.0.0
+ imagePullPolicy : Always
+ ports:
+ - containerPort: 10010
+ env:
+ - name: "ENVIRONMENT"
+ value: "DEBUG"
+ - name: "REDIS_HOST"
+ value: "videos-db"
+ - name: "REDIS_PORT"
+ value: "6379"
+ - name: "JAEGER_AGENT_HOST"
+ value: "collection-sumologic-otelcol.sumologic"
+ - name: "JAEGER_AGENT_PORT"
+ value: "6831"
+ - name: "JAEGER_SERVICE_NAME"
+ value: "videos-api"
+ - name: "JAEGER_REPORTER_LOG_SPANS"
+ value: "true"
+ - name: "JAEGER_SAMPLER_TYPE"
+ value: "const"
+ - name: "JAEGER_PROPAGATION"
+ value: "jaeger"
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: videos-api
+ labels:
+ app: videos-api
+spec:
+ type: ClusterIP
+ selector:
+ app: videos-api
+ ports:
+ - protocol: TCP
+ name: http
+ port: 10010
+ targetPort: 10010
+---
+
+
diff --git a/tracing/applications-go/videos-api-netcore/dockerfile b/tracing/applications-go/videos-api-netcore/dockerfile
new file mode 100644
index 000000000..fa4184d04
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/dockerfile
@@ -0,0 +1,16 @@
+#docker run -it -v ${PWD}:/work -p 5000:5000 -w /work aimvector/jaeger-tracing:videos-api-netcore-1.0.0 bash
+FROM mcr.microsoft.com/dotnet/sdk:5.0 as dev
+
+WORKDIR /work/
+
+FROM mcr.microsoft.com/dotnet/sdk:5.0 as build
+
+WORKDIR /work/
+COPY ./src/videos-api.csproj /work/videos-api.csproj
+RUN dotnet restore
+
+COPY ./src/ /work/
+RUN mkdir /out/
+RUN dotnet publish --no-restore --output /out/ --configuration Release
+
+ENTRYPOINT ["dotnet", "run"]
\ No newline at end of file
diff --git a/tracing/applications-go/videos-api-netcore/src/Controllers/VideosController.cs b/tracing/applications-go/videos-api-netcore/src/Controllers/VideosController.cs
new file mode 100644
index 000000000..ef3710ed9
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/Controllers/VideosController.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Logging;
+using StackExchange.Redis;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+using OpenTracing;
+using OpenTracing.Propagation;
+
+namespace videos_api.Controllers
+{
+ [ApiController]
+ [Route("")]
+ public class VideosController : ControllerBase
+ {
+ private readonly ITracer _tracer;
+ private readonly string _redisHost;
+ private readonly string _redisPort;
+ private readonly ConnectionMultiplexer _redis;
+ private readonly ILogger _logger;
+ private readonly JsonSerializerOptions _serializationOptions;
+
+ public VideosController(ILogger logger, ITracer tracer)
+ {
+ _redisHost = Environment.GetEnvironmentVariable("REDIS_HOST");
+ _redisPort = Environment.GetEnvironmentVariable("REDIS_PORT");
+ _redis = ConnectionMultiplexer.Connect(_redisHost + ":" + _redisPort);
+ _logger = logger;
+ _tracer = tracer ?? throw new ArgumentNullException(nameof(tracer));
+
+ _serializationOptions = new JsonSerializerOptions
+ {
+ PropertyNameCaseInsensitive = true
+ };
+ }
+
+ [HttpGet]
+ [Route("/{id}")]
+ public Videos Get(string id)
+ {
+ ISpanContext traceContext = _tracer.Extract(BuiltinFormats.HttpHeaders, new TextMapExtractAdapter(GetHeaders()));
+
+ string videoContent;
+
+ using (var scope = _tracer.BuildSpan("videos-api-net: redis-get")
+ .AsChildOf(traceContext)
+ .StartActive(true))
+ {
+
+
+
+ IDatabase db = _redis.GetDatabase();
+ videoContent = db.StringGet(id);
+ }
+
+ var video = JsonSerializer.Deserialize(videoContent,_serializationOptions);
+ return video;
+
+ }
+
+ public Dictionary GetHeaders()
+ {
+ var headers = new Dictionary();
+ foreach (var header in Request.Headers)
+ {
+ headers.Add(header.Key, header.Value);
+ }
+
+ return headers;
+ }
+ }
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/Program.cs b/tracing/applications-go/videos-api-netcore/src/Program.cs
new file mode 100644
index 000000000..c5e5becd0
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/Program.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+
+namespace videos_api
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ CreateHostBuilder(args).Build().Run();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureLogging(logging =>
+ {
+ logging.ClearProviders();
+ logging.AddConsole();
+ })
+ .ConfigureWebHostDefaults(webBuilder =>
+ {
+ webBuilder.UseUrls("http://*:10010");
+ webBuilder.UseStartup();
+ });
+ }
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/Properties/launchSettings.json b/tracing/applications-go/videos-api-netcore/src/Properties/launchSettings.json
new file mode 100644
index 000000000..af451ab50
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/Properties/launchSettings.json
@@ -0,0 +1,31 @@
+{
+ "$schema": "http://json.schemastore.org/launchsettings.json",
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:27460",
+ "sslPort": 44312
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "videos_api": {
+ "commandName": "Project",
+ "dotnetRunMessages": "true",
+ "launchBrowser": true,
+ "launchUrl": "swagger",
+ "applicationUrl": "https://localhost:5001;http://localhost:5000",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/Startup.cs b/tracing/applications-go/videos-api-netcore/src/Startup.cs
new file mode 100644
index 000000000..fd0e5c533
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/Startup.cs
@@ -0,0 +1,103 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.AspNetCore.HttpsPolicy;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Microsoft.OpenApi.Models;
+using Jaeger;
+using Jaeger.Reporters;
+using Jaeger.Samplers;
+using Jaeger.Senders;
+using Jaeger.Senders.Thrift;
+using OpenTracing;
+using OpenTracing.Contrib.NetCore.Configuration;
+using OpenTracing.Util;
+
+
+namespace videos_api
+{
+ public class Startup
+ {
+ public Startup(IConfiguration configuration)
+ {
+ Configuration = configuration;
+ }
+
+ public IConfiguration Configuration { get; }
+
+ // This method gets called by the runtime. Use this method to add services to the container.
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddLogging(loggingBuilder =>
+ {
+ loggingBuilder.AddConfiguration(Configuration.GetSection("Logging"));
+ loggingBuilder.AddConsole();
+ loggingBuilder.AddDebug();
+ });
+
+ services.AddSingleton(serviceProvider =>
+ {
+ ILoggerFactory loggerFactory = serviceProvider.GetRequiredService();
+ Jaeger.Configuration.SenderConfiguration.DefaultSenderResolver = new SenderResolver(loggerFactory)
+ .RegisterSenderFactory();
+
+ var config = Jaeger.Configuration.FromEnv(loggerFactory);
+ ITracer tracer = config.GetTracer();
+ GlobalTracer.Register(tracer);
+ return tracer;
+
+ // var loggerFactory = serviceProvider.GetRequiredService();
+ // var sampler = new ConstSampler(sample: true);
+
+ // var tracer = new Tracer.Builder("videos-api")
+ // .WithReporter(
+ // new RemoteReporter.Builder()
+ // .WithLoggerFactory(loggerFactory)
+ // .WithSender(
+ // new UdpSender("jaeger", 6831, 0))
+ // .Build())
+ // .WithLoggerFactory(loggerFactory)
+ // .WithSampler(sampler)
+ // .Build();
+
+ // GlobalTracer.Register(tracer);
+ // return tracer;
+
+ });
+
+ services.AddOpenTracing();
+
+ services.AddControllers();
+ services.AddSwaggerGen(c =>
+ {
+ c.SwaggerDoc("v1", new OpenApiInfo { Title = "videos_api", Version = "v1" });
+ });
+ }
+
+ // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+ {
+ if (env.IsDevelopment())
+ {
+ app.UseDeveloperExceptionPage();
+ app.UseSwagger();
+ app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "videos_api v1"));
+ }
+
+ app.UseHttpsRedirection();
+ app.UseRouting();
+ app.UseAuthorization();
+ app.UseEndpoints(endpoints =>
+ {
+ endpoints.MapControllers();
+ });
+ }
+ }
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/Videos.cs b/tracing/applications-go/videos-api-netcore/src/Videos.cs
new file mode 100644
index 000000000..201ca9e35
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/Videos.cs
@@ -0,0 +1,13 @@
+using System;
+
+namespace videos_api
+{
+ public class Videos
+ {
+ public string Id { get; set; }
+ public string Title { get; set; }
+ public string Description { get; set; }
+ public string Imageurl { get; set; }
+ public string Url { get; set; }
+ }
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/appsettings.Development.json b/tracing/applications-go/videos-api-netcore/src/appsettings.Development.json
new file mode 100644
index 000000000..dba68eb12
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/appsettings.Development.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft": "Warning",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ }
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/appsettings.json b/tracing/applications-go/videos-api-netcore/src/appsettings.json
new file mode 100644
index 000000000..81ff87771
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/appsettings.json
@@ -0,0 +1,10 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Information",
+ "Microsoft": "Warning",
+ "Microsoft.Hosting.Lifetime": "Information"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/tracing/applications-go/videos-api-netcore/src/videos-api.csproj b/tracing/applications-go/videos-api-netcore/src/videos-api.csproj
new file mode 100644
index 000000000..b88aefbae
--- /dev/null
+++ b/tracing/applications-go/videos-api-netcore/src/videos-api.csproj
@@ -0,0 +1,15 @@
+
+
+
+ net5.0
+ videos_api
+
+
+
+
+
+
+
+
+
+
diff --git a/tracing/applications-go/videos-api/app.go b/tracing/applications-go/videos-api/app.go
index 9ad8ec8e7..6e5ae37d3 100644
--- a/tracing/applications-go/videos-api/app.go
+++ b/tracing/applications-go/videos-api/app.go
@@ -25,6 +25,7 @@ const serviceName = "videos-api"
var environment = os.Getenv("ENVIRONMENT")
var redis_host = os.Getenv("REDIS_HOST")
var redis_port = os.Getenv("REDIS_PORT")
+var jaeger_host_port = os.Getenv("JAEGER_HOST_PORT")
var flaky = os.Getenv("FLAKY")
var delay = os.Getenv("DELAY")
@@ -45,7 +46,7 @@ func main() {
// Log the emitted spans to stdout.
Reporter: &config.ReporterConfig{
LogSpans: true,
- LocalAgentHostPort: "jaeger:6831",
+ LocalAgentHostPort: jaeger_host_port,
},
}
@@ -65,7 +66,7 @@ func main() {
opentracing.HTTPHeadersCarrier(r.Header),
)
- span := tracer.StartSpan("/id GET", ext.RPCServerOption(spanCtx))
+ span := tracer.StartSpan("videos-api: GET /id", ext.RPCServerOption(spanCtx))
defer span.Finish()
if flaky == "true" {
@@ -98,7 +99,7 @@ func main() {
func video(writer http.ResponseWriter, request *http.Request, p httprouter.Params, ctx context.Context)(response string){
- span, _ := opentracing.StartSpanFromContext(ctx, "redis-get")
+ span, _ := opentracing.StartSpanFromContext(ctx, "videos-api: redis-get")
defer span.Finish()
id := p.ByName("id")
diff --git a/tracing/docker-compose.yaml b/tracing/docker-compose.yaml
index ebcf99c72..c768bbd60 100644
--- a/tracing/docker-compose.yaml
+++ b/tracing/docker-compose.yaml
@@ -18,6 +18,7 @@ services:
- "ENVIRONMENT=DEBUG"
- "REDIS_HOST=playlists-db"
- "REDIS_PORT=6379"
+ - "JAEGER_HOST_PORT=jaeger:6831"
ports:
- 81:10010
networks:
@@ -39,12 +40,32 @@ services:
- "ENVIRONMENT=DEBUG"
- "REDIS_HOST=videos-db"
- "REDIS_PORT=6379"
+ - "JAEGER_HOST_PORT=jaeger:6831"
#- "DELAY=true"
#- "FLAKY=true"
ports:
- 82:10010
networks:
- tracing
+ # videos-api-netcore:
+ # container_name: videos-api
+ # image: aimvector/jaeger-tracing:videos-api-netcore-1.0.0
+ # build:
+ # context: ./applications-go/videos-api-netcore
+ # environment:
+ # - "ENVIRONMENT=DEBUG"
+ # - "REDIS_HOST=videos-db"
+ # - "REDIS_PORT=6379"
+ # - "JAEGER_AGENT_HOST=jaeger"
+ # - "JAEGER_AGENT_PORT=6831"
+ # - "JAEGER_SERVICE_NAME=videos-api"
+ # - "JAEGER_REPORTER_LOG_SPANS=true"
+ # - "JAEGER_SAMPLER_TYPE=const"
+ # - "JAEGER_PROPAGATION=jaeger"
+ # ports:
+ # - 82:5000
+ # networks:
+ # - tracing
videos-db:
container_name: videos-db
image: redis:6.0-alpine