🐻 The Universal Service Mesh. CNCF Sandbox Project.

CircleCI Go Report Card License Artifact HUB Slack Twitter

Kuma is a modern Envoy-based service mesh that can run on every cloud, in a single or multi-zone capacity, across both Kubernetes and VMs. Thanks to its broad universal workload support, combined with native support for Envoy as its data plane proxy technology (but with no Envoy expertise required), Kuma provides modern L4-L7 service connectivity, discovery, security, observability, routing and more across any service on any platform, databases included.

Easy to use, with built-in service mesh policies for security, traffic control, discovery, observability and more, Kuma ships with an advanced multi-zone and multi-mesh support that automatically enables cross-zone communication across different clusters and clouds, and automatically propagates service mesh policies across the infrastructure. Kuma is currently being adopted by enterprise organization around the world to support distributed service meshes across the application teams, on both Kubernetes and VMs.

Originally created and donated by Kong, Kuma is today CNCF (Cloud Native Computing Foundation) Sandbox project and therefore available with the same openness and neutrality as every other CNCF project. Kuma has been engineered to be both powerful yet simple to use, reducing the complexity of running a service mesh across every organization with very unique capabilities like multi-zone support, multi-mesh support, and a gradual and intuitive learning curve.

Users that require enterprise-level support for Kuma can explore the enterprise offerings available.

Built by Envoy contributors at Kong 🦍 .

Need help? In your journey with Kuma you can get in touch with the broader community via the official Slack chat.

Installation | Documentation | Community + Slack Chat | Blog

Summary

Why Kuma?

Built with enterprise use-cases in mind, Kuma is a universal service mesh that supports both Kubernetes and VMs deployments across single and multi-zone setups, with turnkey service mesh policies to get up and running easily while supporting multi-tenancy and multi-mesh on the same control plane. Kuma is a CNCF Sandbox project.

Unlike other service mesh solutions, Kuma innovates the service mesh ecosystem by providing ease of use, native support for both Kubernetes and VMs on both the control plane and the data plane, multi-mesh support that can cross every boundary including Kubernetes namespaces, out of the box multi-zone and multi-cluster support with automatic policy synchronization and connectivity, zero-trust, observability and compliance in one-click, support for custom workload attributes that can be leveraged to accelerate PCI and GDPR compliance, and much more.

Below an example of using Kuma's attributes to route all traffic generated by any PCI-compliant service in Switzerland, to only be routed within the Swiss region:

apiVersion: kuma.io/v1alpha1
kind: TrafficRoute
mesh: default
metadata:
  name: ch-pci-compliance
spec:
  sources:
    - match:
        kuma.io/service: '*'
        kuma.io/zone: 'CH'
        PCI: true
  destinations:
    - match:
        kuma.io/service: '*'
  conf:
    loadBalancer:
      roundRobin: {}
    split:
      - weight: 100
        destination:
          kuma.io/service: '*'
          kuma.io/zone: 'CH'

The above example can also be applied on virtual machines via the built-in kumactl CLI.

With Kuma, our application teams can stop building connectivity management code in every service and every application, and they can rely on modern service mesh infrastructure instead to improve their efficiency and the overall agility of the organization:

Features

  • Universal Control Plane: Easy to use, distributed, runs anywhere on both Kubernetes and VM/Bare Metal.
  • Lightweight Data Plane: Powered by Envoy to process any L4/L7 traffic, with automatic Envoy bootstrapping.
  • Automatic DP Injection: No code changes required in K8s. Easy YAML specification for VM and Bare Metal deployments.
  • Multi-Mesh: To setup multiple isolated Meshes in one cluster and one Control Plane, lowering OPs cost.
  • Single and Multi Zone: To deploy a service mesh that is cross-platform, cross-cloud and cross-cluster.
  • Automatic Discovery & Ingress: With built-in service discovery and connectivity across single and multi-zones.
  • Global & Remote CPs: For scalability across deployments with multiple zones, including hybrid VMs + K8s meshes.
  • mTLS: Automatic mTLS issuing, identity and encryption with optional support for third-party CA.
  • TLS Rotation: Automatic certificate rotation for all the data planes, with configurable settings.
  • Internal & External Services: Aggregation of internal services and support for services outside the mesh.
  • Traffic Permissions: To firewall traffic between the services of a Mesh.
  • Traffic Routing: With dynamic load-balancing for blue/green, canary, versioning and rollback deployments.
  • Fault Injection: To harden our systems by injecting controlled artificial faults and observe the behavior.
  • Traffic Logs: To log all the activity to a third-party service, like Splunk or ELK.
  • Traffic Tracing: To observe the full trace of the service traffic and determine bottlenecks.
  • Traffic Metrics: For every Envoy dataplane managed by Kuma with native Prometheus/Grafana support.
  • Retries: To improve application reliability by automatically retrying requests.
  • Proxy Configuration Templating: The easiest way to run and configure Envoy with low-level configuration.
  • Gateway Support: To support any API Gateway or Ingress, like Kong Gateway.
  • Healthchecks: Both active and passive.
  • GUI: Out of the box browser GUI to explore all the Service Meshes configured in the system.
  • Tagging Selectors: To apply sophisticated regional, cloud-specific and team-oriented policies.
  • Platform-Agnostic: Support for Kubernetes, VMs, and bare metal. Including hybrid deployments.
  • Transparent Proxying: Out of the box transparent proxying on Kubernetes, VMs and any other platform.
  • Network Overlay: Create a configurable Mesh overlay across different Kubernetes clusters and namespaces.

Distributions

Kuma is a platform-agnostic product that ships in different distributions. You can explore the available installation options at the official website.

You can use Kuma for modern greenfield applications built on containers as well as existing applications running on more traditional infrastructure. Kuma can be fully configured via CRDs (Custom Resource Definitions) on Kubernetes and via a RESTful HTTP API in other environments that can be easily integrated with CI/CD workflows.

Kuma also provides an easy to use kumactl CLI client for every environment, and an official GUI that can be accessed by the browser.

Development

Kuma is under active development and production-ready.

See Developer Guide for further details.

Enterprise Support

If you are implementing Kuma in a mission-critical environment and require enterprise support and features, please visit Enterprise to explore the available offerings.

License

Copyright 2021 the Kuma 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.
Owner
Kuma
The Universal Service Mesh. CNCF Sandbox Project.
Kuma
Comments
  • upstream connect error or disconnect/reset before headers. reset reason: protocol error

    upstream connect error or disconnect/reset before headers. reset reason: protocol error

    What happened?

    We have a Java Spring boot app deployed on AKS cluster that in response provides a json object. App works fine without Kuma but as soon as Kuma is enabled, urls throws an upstream error and reason being protocol error. I can say, Kuma in general is working as we have other apps on the cluster that are working as expected. Been trying to troubleshoot for a while but gone no where with it. Any insights on how to troubleshoot or if there is anything that needs to be fixed in Kuma. I see 502 Bad gateway error when I do a curl on the endpoint, at least from what I understood(could be wrong as well) Kuma is not liking the json response from the backend and throwing a 502.

  • DPP w/invalid or missing CA cert should fail instead of endless error loop

    DPP w/invalid or missing CA cert should fail instead of endless error loop

    Summary

    If a DPP starts with a missing or invalid CA cert, both the DPP and CP get in an endless error loop. The DPP should fail and exit as a retry isn't going to ever succeed:

    DPP:

    [2021-05-21 17:19:18.477][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:334] StreamHealthCheck gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
    [2021-05-21 17:19:18.477][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:71] HdsDelegate stream/connection failure, will retry in 535 ms.
    [2021-05-21 17:19:19.015][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:334] StreamHealthCheck gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
    [2021-05-21 17:19:19.015][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:71] HdsDelegate stream/connection failure, will retry in 226 ms.
    [2021-05-21 17:19:19.246][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:334] StreamHealthCheck gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
    [2021-05-21 17:19:19.246][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:71] HdsDelegate stream/connection failure, will retry in 427 ms.
    [2021-05-21 17:19:19.671][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:334] StreamHealthCheck gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
    [2021-05-21 17:19:19.671][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:71] HdsDelegate stream/connection failure, will retry in 918 ms.
    [2021-05-21 17:19:20.594][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:334] StreamHealthCheck gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure, transport failure reason: TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED
    [2021-05-21 17:19:20.594][1921][warning][upstream] [source/common/upstream/health_discovery_service.cc:71] HdsDelegate stream/connection failure, will retry in 628 ms.
    

    CP:

    2021/05/21 17:19:12 http: TLS handshake error from 172.31.4.238:40740: remote error: tls: unknown certificate authority
    2021/05/21 17:19:13 http: TLS handshake error from 172.31.4.238:40742: remote error: tls: unknown certificate authority
    2021/05/21 17:19:13 http: TLS handshake error from 172.31.4.238:40744: remote error: tls: unknown certificate authority
    2021/05/21 17:19:13 http: TLS handshake error from 172.31.4.238:40746: remote error: tls: unknown certificate authority
    2021/05/21 17:19:14 http: TLS handshake error from 172.31.4.238:40748: remote error: tls: unknown certificate authority
    2021/05/21 17:19:14 http: TLS handshake error from 172.31.4.238:40750: remote error: tls: unknown certificate authority
    2021/05/21 17:19:15 http: TLS handshake error from 172.31.4.238:40752: remote error: tls: unknown certificate authority
    2021/05/21 17:19:15 http: TLS handshake error from 172.31.4.238:40754: remote error: tls: unknown certificate authority
    2021/05/21 17:19:15 http: TLS handshake error from 172.31.4.238:40756: remote error: tls: unknown certificate authority
    2021/05/21 17:19:16 http: TLS handshake error from 172.31.4.238:40758: remote error: tls: unknown certificate authority
    2021/05/21 17:19:16 http: TLS handshake error from 172.31.4.238:40760: remote error: tls: unknown certificate authority
    2021/05/21 17:19:17 http: TLS handshake error from 172.31.4.238:40762: remote error: tls: unknown certificate authority
    2021/05/21 17:19:18 http: TLS handshake error from 172.31.4.238:40764: remote error: tls: unknown certificate authority
    2021/05/21 17:19:18 http: TLS handshake error from 172.31.4.238:40766: remote error: tls: unknown certificate authority
    2021/05/21 17:19:18 http: TLS handshake error from 172.31.4.238:40768: remote error: tls: unknown certificate authority
    2021/05/21 17:19:19 http: TLS handshake error from 172.31.4.238:40770: remote error: tls: unknown certificate authority
    2021/05/21 17:19:19 http: TLS handshake error from 172.31.4.238:40772: remote error: tls: unknown certificate authority
    2021/05/21 17:19:19 http: TLS handshake error from 172.31.4.238:40774: remote error: tls: unknown certificate authority
    2021/05/21 17:19:20 http: TLS handshake error from 172.31.4.238:40776: remote error: tls: unknown certificate authority
    

    Steps To Reproduce

    [root@ip-172-31-2-167 ~]# env | grep KUMA KUMA_GENERAL_TLS_KEY_FILE=/home/ec2-user/ip-172-31-2-167.us-east-2.compute.internal.key KUMA_DP_SERVER_TLS_KEY_FILE=/home/ec2-user/ip-172-31-2-167.us-east-2.compute.internal.key KUMA_API_SERVER_AUTH_CLIENT_CERTS_DIR=/home/ec2-user KUMA_GENERAL_TLS_CERT_FILE=/home/ec2-user/ip-172-31-2-167.us-east-2.compute.internal.crt KUMA_DP_SERVER_TLS_CERT_FILE=/home/ec2-user/ip-172-31-2-167.us-east-2.compute.internal.crt [root@ip-172-31-2-167 ~]# KUMA_MODE=remote KUMA_MULTIZONE_REMOTE_ZONE=universal-2 KUMA_MULTIZONE_REMOTE_GLOBAL_ADDRESS=grpcs://ip-172-31-7-0.us-east-2.compute.internal:5685 KUMA_DNS_SERVER_PORT=53 kuma-cp run --license-path=/home/ec2-user/license.json

    2. ```
    [ec2-user@ip-172-31-4-238 ~]$ env | grep KUMA
    KUMA_GENERAL_TLS_KEY_FILE=/home/ec2-user/ip-172-31-4-238.us-east-2.compute.internal.key
    KUMA_DNS_SERVER_PORT=53
    KUMA_DNS_SERVER_CIDR=240.0.0.0/4
    KUMA_DP_SERVER_TLS_KEY_FILE=/home/ec2-user/ip-172-31-4-238.us-east-2.compute.internal.key
    KUMA_API_SERVER_AUTH_CLIENT_CERTS_DIR=/home/ec2-user
    KUMA_DNS_SERVER_DOMAIN=mesh
    KUMA_GENERAL_TLS_CERT_FILE=/home/ec2-user/ip-172-31-4-238.us-east-2.compute.internal.crt
    KUMA_DP_SERVER_TLS_CERT_FILE=/home/ec2-user/ip-172-31-4-238.us-east-2.compute.internal.crt
    [ec2-user@ip-172-31-4-238 ~]$ kuma-dp run --cp-address=https://ip-172-31-2-167.us-east-2.compute.internal:5678/ --dataplane-token-file=/home/ec2-user/universal-token --dataplane-file=/home/ec2-user/dataplane-universal.yaml  --dns-enabled
    
  • feat(kuma-cp) - set host network var as true by default

    feat(kuma-cp) - set host network var as true by default

    Summary

    For alternate overlay networking(other than the basic CNI provided by EKS for example, like cilium), This is mandatory value that has to be set, otherwise it will have communication errors with the control plane. If you are using the default CNI component, it's running on the default network.

    Full changelog

    • Implement hostNetwork: true in cp-deployment.yaml file.

    Documentation

    Testing

    • [ ] Unit tests
    • [ ] E2E tests
    • [ ] Manual testing on Universal
    • [ X ] Manual testing on Kubernetes

    Backwards compatibility

    • [ ] Update UPGRADE.md with any steps users will need to take when upgrading.
    • [ ] Add backport-to-stable label if the code follows our backporting policy
  • Difficult Day 0

    Difficult Day 0

    What happened?

    1. Follow installation instructions (https://kuma.io/docs/1.2.x/installation/eks/)
    	./kumactl install control-plane | kubectl apply -f - 
    
    	kumactl install control-plane | kubectl apply -f -
    	Error: Failed to render helm template files: Failed to render templates: template: kuma/templates/cp-webhooks-and-secrets.yaml:20:16: executing "kuma/templates/cp-webhooks-and-secrets.yaml" at <lookup "v1" "Secret" .Release.Namespace $secretName>: error calling lookup: unable to get apiresource from unstructured: /v1, Kind=Secret: exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1"
    	error: error parsing STDIN: error converting YAML to JSON: yaml: line 2: mapping values are not allowed in this context
    
    1. Install Kuma with helm
    	helm install --create-namespace --namespace kuma-system kuma kuma/kuma
    
    1. Launch UI to verify installation all looks well
    	kubectl port-forward svc/kuma-control-plane -n kuma-system 5681:5681
    
    1. Install demo app
    	kubectl apply -f demo.yaml
    
    1. Note that no demo pods are coming up, look at demo app replicaset and see the following error
    	Warning  FailedCreate  8m30s (x20 over 49m)  replicaset-controller  Error creating: Internal error occurred: failed calling webhook "namespace-kuma-injector.kuma.io": failed to call webhook: Post "[https://kuma-control-plane.kuma-system.svc:443/inject-sidecar?timeout=10s](https://kuma-control-plane.kuma-system.svc/inject-sidecar?timeout=10s)": context deadline exceeded
    
    1. Take a look at the control plane logs; no errors only this interesting message repeated over and over
    	2022-06-25T11:38:10.363Z    INFO    defaults    trying to create default Mesh
    
    1. Look in helm chart docs for debug flag and redeploy helm
    	helm upgrade --install --set controlPlane.logLevel=debug --namespace kuma-system kuma kuma/kuma
    
    1. Take a look at the control plane logs
    	2022-06-25T11:40:55.488Z    INFO    defaults    trying to create default Mesh                                                                          │
    	│ 2022-06-25T11:41:05.496Z    DEBUG    defaults    could not create default mesh    {"err": "failed to create k8s resource: Internal error occurred: fai │
    	│ led calling webhook \"mesh.defaulter.kuma-admission.kuma.io\": failed to call webhook: Post \"https://kuma-control-plane.kuma-system.svc:443/default-k │
    	│ uma-io-v1alpha1-mesh?timeout=10s\": context deadline exceeded", "errVerbose": "Internal error occurred: failed calling webhook \"mesh.defaulter.kuma-a │
    	│ dmission.kuma.io\": failed to call webhook: Post \"https://kuma-control-plane.kuma-system.svc:443/default-kuma-io-v1alpha1-mesh?timeout=10s\": context │
    	│  deadline exceeded\nfailed to create k8s resource\ngithub.com/kumahq/kuma/pkg/plugins/resources/k8s.(*KubernetesStore).Create\n\t/home/circleci/projec │
    	│ t/pkg/plugins/resources/k8s/store.go:75\ngithub.com/kumahq/kuma/pkg/core/resources/store.(*paginationStore).Create\n\t/home/circleci/project/pkg/core/ │
    	│ resources/store/pagination_store.go:30\ngithub.com/kumahq/kuma/pkg/metrics/store.(*MeteredStore).Create\n\t/home/circleci/project/pkg/metrics/store/st │
    	│ ore.go:38\ngithub.com/kumahq/kuma/pkg/core/resources/store.(*customizableResourceStore).Create\n\t/home/circleci/project/pkg/core/resources/store/cust │
    	│ omizable_store.go:30\ngithub.com/kumahq/kuma/pkg/core/managers/apis/mesh.(*meshManager).Create\n\t/home/circleci/project/pkg/core/managers/apis/mesh/m │
    	│ esh_manager.go:82\ngithub.com/kumahq/kuma/pkg/core/resources/manager.(*customizableResourceManager).Create\n\t/home/circleci/project/pkg/core/resource │
    	│ s/manager/customizable_manager.go:48\ngithub.com/kumahq/kuma/pkg/defaults.(*defaultsComponent).createMeshIfNotExist\n\t/home/circleci/project/pkg/defa │
    	│ ults/mesh.go:26\ngithub.com/kumahq/kuma/pkg/defaults.(*defaultsComponent).Start.func1.1\n\t/home/circleci/project/pkg/defaults/components.go:90\ngithu │
    	│ b.com/sethvargo/go-retry.Do\n\t/home/circleci/.go-kuma-go/pkg/mod/github.com/sethvargo/[email protected]/retry.go:60\ngithub.com/kumahq/kuma/pkg/default │
    	│ s.(*defaultsComponent).Start.func1\n\t/home/circleci/project/pkg/defaults/components.go:89\nruntime.goexit\n\t/home/circleci/go/src/runtime/asm_amd64. │
    	│ s:1571"}
    
    1. Scratch head 😕
  • zsh: too many levels of symbolic links: kumactl

    zsh: too many levels of symbolic links: kumactl

    Summary

    Facing error on terminal while hitting command zsh: too many levels of symbolic links: kumactl

    Steps To Reproduce

    1. echo "type: Mesh name: my-first-mesh" | kumactl apply -f - .

    Additional Details & Logs

    Following this

    • Version
    • Error logs -- zsh: too many levels of symbolic links: kumactl
    • Configuration
    • Platform and Operating System -- MAC OS
    • Installation Method (Helm, kumactl, AWS CloudFormation, etc.) -- kumactl
  • feat (kumactl) kumactl can communicate to kuma-cp over https

    feat (kumactl) kumactl can communicate to kuma-cp over https

    Summary

    kumactl and kuma-dp communicates to kuma-cp over http. In case kuma-cp is behind a https reverese proxy, kumactl cannot connect to it. Added support to upgrade connection to https and disable client security check for ssl.

    this PR will enable https://github.com/Kong/kuma/issues/597

  • feat(helm): add resource limits option for control plane deployment

    feat(helm): add resource limits option for control plane deployment

    Summary

    Currently, there is no place to specify the resource limits for control plane deployment. This PR provides the option to specify limits for control plane deployment

    Full changelog

    Helm - Provided resource limits option for kuma-cp deployment

    Testing

    • [ ] Unit tests
    • [ ] E2E tests
    • [ ] Manual testing on Universal
    • [X] Manual testing on Kubernetes

    Backwards compatibility

    Does not effect backwards compatibility.

    Signed-off-by: Gaurav Dasson [email protected]

  • feat(kuma-cp) Support for udp

    feat(kuma-cp) Support for udp

  • chore(k8s): always inject Kuma as the first container

    chore(k8s): always inject Kuma as the first container

    Checklist prior to review

    • [x] Link to docs PR or issue -- https://github.com/kumahq/kuma/issues/3121
    • [x] Link to UI issue or PR -- n/a
    • [x] Is the issue worked on linked? --
    • [x] The PR does not hardcode values that might break projects that depend on kuma (e.g. "kumahq" as a image registry) --
    • [x] The PR will work for both Linux and Windows, system specific functions like syscall.Mkfifo have equivalent implementation on the other OS --
    • [x] Unit Tests --
    • [x] E2E Tests --
    • [ ] Manual Universal Tests --
    • [ ] Manual Kubernetes Tests --
    • [x] Do you need to update UPGRADE.md? -- no
    • [x] Does it need to be backported according to the backporting policy? -- no
    • [ ] Do you need to explicitly set a > Changelog: entry here or add a ci/ label to run fewer/more tests?
  • Ability to offload to Kuma sidecar the getting of JWT from an IdP

    Ability to offload to Kuma sidecar the getting of JWT from an IdP

    Description

    As discussed here: https://kuma-mesh.slack.com/archives/CN2GN4HE1/p1649873274317209 I would like to understand if the following use case - and related feature - would be interesting for the Kuma community.

    The use case is based on security enforcement: let's say that microservice A wants to send a request to an authenticated API of microservice B. If the microservice A needs a JWT token from a IdP, the first solution would be to implement via application code the interaction with the IdP.

    Since that Kuma provides mTLS and traffic policy, it would be great to offload this phase of getting the JWT token from an Idp to the Kuma sidecar instead of implementing it in the application.

    I would like to get some feedbacks from the community!

  • feat(kuma-cp): Add validation for pods with kuma.io scoped labels and annotations

    feat(kuma-cp): Add validation for pods with kuma.io scoped labels and annotations

    Summary

    This PR adds a validating webhook to validate the kuma.io scoped labels and annotations. A lot of the boilerplate was inspired from #611.

    Full changelog

    • Add a map in metadata.annotations to check for valid annotations/labels.
    • Add webhook configuration in the relevant yaml manifests.
    • Add pod_validator.go and pod_validator_test.go which contain the code for the webhook's Handle and validate methods.

    Issues resolved

    Fix #2331

    Testing

    • [x] Unit tests
  • Kuma is not sending traces do external Jaeger

    Kuma is not sending traces do external Jaeger

    What happened?

    What happened?

    Cannot see traffic traces on Jaeger

    image

    Mesh and Traffic Trace configurations

    apiVersion: kuma.io/v1alpha1
    kind: Mesh
    metadata:
      name: kuma-counter
    spec:
      tracing:
        defaultBackend: jaeger-collector
        backends:
        - name: jaeger-collector
          type: zipkin
          sampling: 100.0
          conf:
            url: http://jaeger-collector.telemetry.svc:9411/api/v2/spans
    
    apiVersion: kuma.io/v1alpha1
    kind: TrafficTrace
    mesh: kuma-counter
    metadata:
      name: trace-all-traffic
    spec:
      selectors:
      - match:
          kuma.io/service: '*'
      conf:
        backend: jaeger-collector
    

    Kuma Envoy sidecar and Kuma Controlplane logs

    k logs demo-app-68bc95bf6-6r8j2 -n demo-app -c kuma-sidecar |tee -a envoy.log k logs kuma-control-plane-6b5f78f944-pn78r -n kuma |tee -a kuma-cp.log

    envoy.log kuma-cp.log

    Jaeger metrics

    curl -s http://jaeger-collector.telemetry.svc:14269/metrics |grep "jaeger_collector_spans_received"
    # HELP jaeger_collector_spans_received_total received
    # TYPE jaeger_collector_spans_received_total counter
    jaeger_collector_spans_received_total{debug="false",format="jaeger",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="false",format="jaeger",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="false",format="jaeger",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="false",format="proto",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="false",format="proto",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="false",format="proto",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="false",format="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="false",format="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="false",format="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="false",format="zipkin",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="false",format="zipkin",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="false",format="zipkin",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="true",format="jaeger",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="true",format="jaeger",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="true",format="jaeger",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="true",format="proto",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="true",format="proto",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="true",format="proto",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="true",format="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="true",format="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="true",format="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_spans_received_total{debug="true",format="zipkin",svc="other-services",transport="grpc"} 0
    jaeger_collector_spans_received_total{debug="true",format="zipkin",svc="other-services",transport="http"} 0
    jaeger_collector_spans_received_total{debug="true",format="zipkin",svc="other-services",transport="unknown"} 0
    root@temp:/# curl -s http://jaeger-collector.telemetry.svc:14269/metrics |grep "jaeger_collector_traces_received"
    # HELP jaeger_collector_traces_received_total received
    # TYPE jaeger_collector_traces_received_total counter
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="jaeger",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="proto",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="unknown",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="false",format="zipkin",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="jaeger",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="proto",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="unknown",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="const",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="const",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="const",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="lowerbound",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="lowerbound",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="lowerbound",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="probabilistic",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="probabilistic",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="probabilistic",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="ratelimiting",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="ratelimiting",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="ratelimiting",svc="other-services",transport="unknown"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="unknown",svc="other-services",transport="grpc"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="unknown",svc="other-services",transport="http"} 0
    jaeger_collector_traces_received_total{debug="true",format="zipkin",sampler_type="unknown",svc="other-services",transport="unknown"} 0
    

    How do I setup de environment

    helm install kuma kuma/kuma -n kuma
    
    helm list -n kuma
    NAME	NAMESPACE	REVISION	UPDATED                             	STATUS  	CHART     	APP VERSION
    kuma	kuma     	1       	2022-12-29 10:47:04.340357 -0300 -03	deployed	kuma-2.0.1	2.0.1
    

    jaeger-collector-service.txt jaeger-collector.txt jaeger-query-service.txt jaeger-query.txt

  • chore(deps): bump github.com/testcontainers/testcontainers-go from 0.15.0 to 0.17.0

    chore(deps): bump github.com/testcontainers/testcontainers-go from 0.15.0 to 0.17.0

    Bumps github.com/testcontainers/testcontainers-go from 0.15.0 to 0.17.0.

    Release notes

    Sourced from github.com/testcontainers/testcontainers-go's releases.

    v0.17.0

    What's Changed

    ⚠️ Breaking Changes

    Given the amount of issues after #476, causing consumers of this library to update their dependencies with multiple replace directives in their go.mod files, we have moved compose code to a separate module. Therefore the majority of the users of the library will only need to replace Docker dependency with the one used in this library, which is simpler in terms of usage. Please see Install instructions for further information.

    replace (
    	github.com/docker/docker => github.com/docker/docker v20.10.3-0.20221013203545-33ab36d6b304+incompatible // 22.06 branch
    )
    

    On the other hand, users of native Docker Compose code will still need all the replace directives, as described in the Compose docs.

    🚀 Features

    🐛 Bug Fixes

    • fix: avoid panics when checking container state and container.raw is nil (#635) @​mdelapenya

    📖 Documentation

    🧹 Housekeeping

    ... (truncated)

    Commits
    • 10c899c chore: move compose code to a separate module (#650)
    • 18a119b docs: refine onboarding process with quickstart guide (#706)
    • 593da80 chore: move redis-specific tests to the example module (#701)
    • 574e1ae chore: bump transitive dependencies (#527)
    • e9fa657 chore: reduce concurrent builds (#702)
    • bb03057 chore: add mysql example (#700)
    • 2de9fb8 chore(deps): bump google.golang.org/api from 0.104.0 to 0.105.0 (#699)
    • 71461a9 chore(deps): bump google.golang.org/api in /examples/firestore (#683)
    • f6b4131 chore(deps): bump cloud.google.com/go/spanner in /examples/spanner (#688)
    • 099b181 chore(deps): bump google.golang.org/api in /examples/pubsub (#685)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
  • MeshTimeout configures wrong timeout for the MeshGateway

    MeshTimeout configures wrong timeout for the MeshGateway

    What happened?

    The policy:

    kind: MeshTimeout
    apiVersion: kuma.io/v1alpha1
    metadata:
      namespace: kuma-system
      name: eg
    spec:
      targetRef:
        kind: MeshService
        name: edge-gateway
      to:
        - targetRef:
            kind: MeshService
            name: frontend_kuma-demo_svc_8080
          default:
            http:
              streamIdleTimeout: 32s
    

    sets streamIdleTimeout for the edge gateway listener. This listener is shared across all destination services so it's not correct to set it this way.

  • Status code dashboard doesn't show internal_upstream_rq_xx

    Status code dashboard doesn't show internal_upstream_rq_xx

    What happened?

    When setting up a timeout the stat that's changed is: envoy_cluster_internal_upstream_rq_xx

    The status code dashboards use: envoy_cluster_external_upstream_rq_xx

    So we have a weird view like:

    image

    We should do something better here (either sum them together or just show them differently)

  • panic in rules api

    panic in rules api

    What happened?

    Seems to be an error in the merge algorithm

    panic: expected struct or pointer to a struct got ptr                                                                                                                                                   
                                                                                                                                                                                                           
    goroutine 1663 [running]:                                                                                                                                                                               
    github.com/kumahq/kuma/pkg/core/xds.mustUnwrapStruct({0x27adb20?, 0xc000bde468?, 0x8?})                                                                                                                 
        /home/circleci/project/pkg/core/xds/merge.go:115 +0xb4                                                                                                                                              
    github.com/kumahq/kuma/pkg/core/xds.appendSlices({0x27adb20?, 0xc000bdedb0?, 0x0?}, {0x27adb20?, 0xc000bde468?, 0x27adb20?})                                                                            
        /home/circleci/project/pkg/core/xds/merge.go:87 +0x9b                                                                                                                                               
    github.com/kumahq/kuma/pkg/core/xds.appendSlices({0x23bbc00?, 0xc000bdedb0?, 0xb0?}, {0x2311a60?, 0xc000e4d250?, 0x30?})                                                                                
        /home/circleci/project/pkg/core/xds/merge.go:103 +0x31f                                                                                                                                             
    github.com/kumahq/kuma/pkg/core/xds.MergeConfs({0xc002038160, 0x2, 0x0?})                                                                                                                               
        /home/circleci/project/pkg/core/xds/merge.go:49 +0x4af                                                                                                                                              
    github.com/kumahq/kuma/pkg/core/xds.BuildRules({0xc00206d940, 0x2, 0xc000ed4e70?})                                                                                                                      
        /home/circleci/project/pkg/core/xds/rules.go:162 +0x570                                                                                                                                             
    github.com/kumahq/kuma/pkg/plugins/policies/matchers.fromRules(0xc00155b328?)                                                                                                                           
        /home/circleci/project/pkg/plugins/policies/matchers/match.go:98 +0xff                                                                                                                              
    github.com/kumahq/kuma/pkg/plugins/policies/matchers.MatchedPolicies({0x282755a, 0xb}, 0xc001563710, {0xc001941fb0?, 0xc000f66180?})                                                                    │
        /home/circleci/project/pkg/plugins/policies/matchers/match.go:55 +0x2fd                                                                                                                             
    github.com/kumahq/kuma/pkg/plugins/policies/meshtimeout/plugin/v1alpha1.plugin.MatchedPolicies(...)                                                                                                     
        /home/circleci/project/pkg/plugins/policies/meshtimeout/plugin/v1alpha1/plugin.go:34                                                                                                                
    github.com/kumahq/kuma/pkg/xds/sync.(*DataplaneProxyBuilder).matchPolicies(0xc0003b3020?, {{0xc001662e40, 0x2c}, 0xc0016ed338, {0xc001941fb0, 0xc000f66180}, 0xc001738db0, 0xc001739410, 0xc001739560,  │
        /home/circleci/project/pkg/xds/sync/dataplane_proxy_builder.go:165 +0x791                                                                                                                           
    github.com/kumahq/kuma/pkg/xds/sync.(*DataplaneProxyBuilder).Build(0xc0003b3020, {0x32096e0, 0xc000a730c0}, {{0xc0007abd70?, 0xc0007d9fc0?}, {0xc0007abd78?, 0xc0007abd70?}}, {{0xc001662e40, 0x2c}, 0x │
        /home/circleci/project/pkg/xds/sync/dataplane_proxy_builder.go:45 +0x14b                                                                                                                            
    github.com/kumahq/kuma/pkg/xds/sync.(*DataplaneWatchdog).syncDataplane(0xc001aecd20, {0x32096e0, 0xc000a730c0}, 0xc00252c320)                                                                           
        /home/circleci/project/pkg/xds/sync/dataplane_watchdog.go:117 +0x42e                                                                                                                                
    github.com/kumahq/kuma/pkg/xds/sync.(*DataplaneWatchdog).Sync(0xc001aecd20, {0x32096e0, 0xc000a730c0})                                                                                                  
        /home/circleci/project/pkg/xds/sync/dataplane_watchdog.go:66 +0x171                                                                                                                                 
    github.com/kumahq/kuma/pkg/xds/sync.(*dataplaneWatchdogFactory).New.func2()                                                                                                                             
        /home/circleci/project/pkg/xds/sync/dataplane_watchdog_factory.go:46 +0xc7                                                                                                                          
    github.com/kumahq/kuma/pkg/util/watchdog.(*SimpleWatchdog).Start(0xc000766820, 0xc001434660)                                                                                                            
        /home/circleci/project/pkg/util/watchdog/watchdog.go:25 +0xe2                                                                                                                                       
    created by github.com/kumahq/kuma/pkg/xds/server/callbacks.(*dataplaneSyncTracker).OnProxyConnected                                                                                                     
        /home/circleci/project/pkg/xds/server/callbacks/dataplane_sync_tracker.go:55 +0x40a
    
    echo 'kind: MeshTimeout
    apiVersion: kuma.io/v1alpha1
    metadata:
      namespace: kuma-system
      name: from-all
    spec:
      targetRef:
        kind: Mesh
      from:
        - targetRef:
            kind: Mesh
          default:
            connectionTimeout: 15s
            idleTimeout: 1h
            http:
              requestTimeout: 15s
              streamIdleTimeout: 1s
              maxStreamDuration: 0s
              maxConnectionDuration: 0s' | kc apply -f-
    
    echo 'kind: MeshTimeout
    apiVersion: kuma.io/v1alpha1
    metadata:
      namespace: kuma-system
      name: fronted-to-backend
    spec:
      targetRef:
        kind: MeshService
        name: frontend_kuma-demo_svc_8080
      from:
        - targetRef:
            kind: Mesh
          default:
            http:
              streamIdleTimeout: 2s
      to:
        - targetRef:
            kind: MeshService
            name: backend_kuma-demo_svc_3001
          default:
            connectionTimeout: 15s
            idleTimeout: 1h
            http:
              requestTimeout: 15s
              streamIdleTimeout: 3s
              maxStreamDuration: 0s
              maxConnectionDuration: 0s' | kc apply -f-
    
Open Service Mesh (OSM) is a lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.
Open Service Mesh (OSM) is a lightweight, extensible, cloud native service mesh that allows users to uniformly manage, secure, and get out-of-the-box observability features for highly dynamic microservice environments.

Open Service Mesh (OSM) Open Service Mesh (OSM) is a lightweight, extensible, Cloud Native service mesh that allows users to uniformly manage, secure,

Jan 2, 2023
OpenYurt - Extending your native Kubernetes to edge(project under CNCF)
OpenYurt - Extending your native Kubernetes to edge(project under CNCF)

openyurtio/openyurt English | 简体中文 What is NEW! Latest Release: September 26th, 2021. OpenYurt v0.5.0. Please check the CHANGELOG for details. First R

Jan 7, 2023
Snowcat - A service mesh scanning tool
 Snowcat - A service mesh scanning tool

Snowcat - A service mesh scanning tool Snowcat gathers and analyzes the configuration of an Istio cluster and audits it for potential violations of se

Nov 9, 2022
Meshery Adapter for Cilium Service Mesh
Meshery Adapter for Cilium Service Mesh

Meshery Adapter for Cilium Service Mesh Cilium Service Mesh Cilium is open sourc

Dec 1, 2022
ADK Node ( a.k.a ADKgo v2 ) for the ADK Mesh with full Smart Contract support [Mainnet]

ADKGo SmartNode (MAINNET v2) Official Golang implementation of the ADK Mesh protocol with Smart Contract funtionality BASE NODE SETUP STEPS (on clean

Nov 24, 2021
TiDB Mesh: Implement Multi-Tenant Keyspace by Decorating Message between Components
TiDB Mesh: Implement Multi-Tenant Keyspace by Decorating Message between Components

TiDB Mesh: Implement Multi-Tenant Keyspace by Decorating Message between Compone

Jan 11, 2022
Multicluster mesh addon: An enhanced addon created with addon-framework

Multicluster Mesh Addon multicluster-mesh-addon is an enhanced addon created wit

Feb 11, 2022
Cheiron is a Kubernetes Operator made with OperatorSDK for reconciling service account and attaching imagePullSecrets to service accounts automatically

anny-co/cheiron NOTE: Cheiron is currently in very early stages of development and and far from anything usable. Feel free to contribute if you want t

Sep 13, 2021
crud is a cobra based CLI utility which helps in scaffolding a simple go based micro-service along with build scripts, api documentation, micro-service documentation and k8s deployment manifests

crud crud is a CLI utility which helps in scaffolding a simple go based micro-service along with build scripts, api documentation, micro-service docum

Nov 29, 2021
Backend Project using Go with Dgraph Database and Chi as HTTP Service

Drawflow-Requests For init DGraph Database docker run --rm -it -p 8080:8080 -v ~/dgraph:/dgraph dgraph/standalone:v20.03.0 docker run --rm -it -p 8080

Dec 11, 2021
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems
Moby Project - a collaborative project for the container ecosystem to assemble container-based systems

The Moby Project Moby is an open-source project created by Docker to enable and accelerate software containerization. It provides a "Lego set" of tool

Jan 8, 2023
A simple project (which is visitor counter) on kubernetesA simple project (which is visitor counter) on kubernetes

k8s playground This project aims to deploy a simple project (which is visitor counter) on kubernetes. Deploy steps kubectl apply -f secret.yaml kubect

Dec 16, 2022
this Project is base project about restfull API and MySQL

Requirements. This project only supports to run on Ubuntu currently go version >= 1.16 docker docker-compose Install Protobuffer https://github.com/pr

Dec 10, 2021
Git with a cup of tea, painless self-hosted git service
Git with a cup of tea, painless self-hosted git service

Gitea - Git with a cup of tea View the chinese version of this document Purpose The goal of this project is to make the easiest, fastest, and most pai

Jan 2, 2023
OpenAPI Terraform Provider that configures itself at runtime with the resources exposed by the service provider (defined in a swagger file)
OpenAPI Terraform Provider that configures itself at runtime with the resources exposed by the service provider (defined in a swagger file)

Terraform Provider OpenAPI This terraform provider aims to minimise as much as possible the efforts needed from service providers to create and mainta

Dec 26, 2022
Web user interface and service agent for the monitoring and remote management of WinAFL.
Web user interface and service agent for the monitoring and remote management of WinAFL.

WinAFL Pet WinAFL Pet is a web user interface dedicated to WinAFL remote management via an agent running as a system service on fuzzing machines. The

Nov 9, 2022
A multi-service dev environment for teams on Kubernetes
A multi-service dev environment for teams on Kubernetes

Tilt Kubernetes for Prod, Tilt for Dev Modern apps are made of too many services. They're everywhere and in constant communication. Tilt powers multi-

Jan 5, 2023
The mec platform for service register/discovery/subscribe and other functions.roject main repo.

EdgeGallery MEP project Introduction Edgegallery MEP is an open source implementation of MEC platform according to ETSI MEC 003 [1] and 011 [2] docume

Nov 15, 2022
Hubble - Network, Service & Security Observability for Kubernetes using eBPF
Hubble - Network, Service & Security Observability for Kubernetes using eBPF

Network, Service & Security Observability for Kubernetes What is Hubble? Getting Started Features Service Dependency Graph Metrics & Monitoring Flow V

Jan 2, 2023