Linkerd Versions Save

Old repo for Linkerd 1.x. See the linkerd2 repo for Linkerd 2.x.

1.6.2.1

5 years ago

This bug fix release fixes an issue where Linkerd can send excessive load to Namerd in certain situations when Linkerd is unable to establish TCP connections to services. To remedy this, detailed delegation information has been removed from error responses returned by Linkerd. This detailed delegation information is still available by using the dtab page of the Linkerd admin server.

1.6.2

5 years ago

This Linkerd release includes bug fixes for Namerd's k8s watch API as well as memory management improvements in the io.l5d.zk storage plugin. This release features a new failure detector module in the io.l5d.mesh interpreter that sends "heartbeat" pings on all HTTP/2 connections to Namerd. This is intended to monitor the health of connections between Linkerd and Namerd so that connections are torn down and re-established if a ping message is not received within a configured amount of time.

This release also includes doc updates from the following contributors:

A big shoutout to all contributors listed above for their great work!

Full release notes:

  • OpenJ9
    • Fixes an issue in Linkerd's OpenJ9 docker image where Linkerd may sometimes run into an OutOfMemoryErrorException caused by OpenJ9's JDK base image
  • Namerd
    • Fixes a memory leak in the io.l5d.zk dtab storage module
    • Fixes an issue where Namerd stops watching dtabs if it receives HTTP 404 from a Kubernetes API server while restarting a watch API request
  • Linkerd Mesh Interpreter
    • Adds a failure detector in the io.l5d.mesh interpreter to help monitor the health of connections to Namerd. The failure detector can be configured by providing a minPeriodMs which sets the duration between each successive ping and a closeTimeoutMs parameter that sets a duration that must elapse before a connection is marked as "unhealthy"
  • Adds support for configuring socketOptions in the client section of a Linkerd config

1.6.1

5 years ago

The first 1.x release of the year brings minor bug fixes to Namerd, the io.l5d.consul and io.l5d.curator namers. This release features contributions from NCBI and ThreeComma. A big thank you to edio and Chris Goffinet for their contributions in this release.

Full release notes:

  • Improves the io.l5d.consul namer's error handling in cases were it receives intermittent 5xx HTTP errors from Consul
  • Fixes a java.lang.NoSuchMethodError that would sometimes occur when using the io.l5d.curator namer
  • Fixes a NullPointerException that would occur when using the io.l5d.mesh interface in Namerd
  • Adds a new configuration option called backlog to socketOptions that allows you to set up a backlog queue size for TCP connections
  • Fixes an issue where the interpreter_state watch endpoint would sometimes display incorrect IP addresses

1.6.0

5 years ago

Linkerd 1.6.0 includes a Finagle upgrade that reduces direct memory allocation and adds support for more efficient HTTP/1.1 streaming for large HTTP requests. This release also improves Linkerd's execution script to run with Java 9 and higher. Finally, this release adds a new gRPC response-classifier that may be configured with user defined gRPC status codes.

Full release notes:

  • Breaking Change

    • requestAuthorizers are now configured in the client section of a router configuration.
    • maxChunkKB has been removed and is no longer configurable for HTTP/1.1 routers. Rather than enforcing a hard size limit, Linkerd now streams HTTP/1.1 chunked messages that exceed streamAfterContentLengthKB
  • HTTP/1.1

    • Adds a new config option streamAfterContentLengthKB that sets a threshold at which HTTP messages will be streamed instead of being fully buffered in memory, even when chunked-encoding is not used.
  • Consul

    • Fixes an issue where the last known good state of an io.l5d.consul namer would be cleared if a 5xx API response was received from Consul.
  • gRPC

    • Adds support for all io.l5d.h2.grpc.* response classifiers to classify gRPC status codes as Success based off of a user-defined list within the response classification section of a config.
  • Fixes a startup issue where Linkerd would fail to load readTimeoutMs and writeTimeoutMsvalues from socket option configs.

  • Fixes Linkerd's executable script to work with Java version 9 and higher.

  • Upgrades Finagle to 18.12.0 which reduces the amount of direct memory Linkerd allocates at startup time.

1.5.2

5 years ago

Linkerd 1.5.2 adds performance improvements to HTTP/2, dramatically improving throughput when sending many small frames as is common when using unary gRPC methods. It also fixes a long standing race condition where Linkerd could get stuck using out of date endpoint data from the Kubernetes API.

Full release notes:

  • HTTP/2
    • Adds buffering to the channel transport which improves throughput by up to 30% when sending many small messages.
  • HTTP
    • Removes an incorrect log line about the Content-Length header when receiving a 204 response.
  • Kubernetes
    • Fixes a race condition where Kubernetes endpoint sets could get stuck indefinitely with stale data.
  • Prometheus
    • Moves exception names out of the metric names and into an exception label.
  • Adds the keepAlive property in the server socket options config. This allows you to enable the SO_KEEPALIVE socket option which removes dead connections that did not close properly and can therefore help prevent connection leaks. Big thanks to Jonathan Reichhold for this!

1.5.1

5 years ago

Linkerd 1.5.1 adds a new io.l5d.consul.interpreter that allows Linkerd to read dtabs directly from a Consul KV store agent instead of using Namerd. In addition, this release fixes an issue in the HTTP/2 router where Linkerd would get stuck handling connections in certain cases.

This release features contributions from OfferUp, Planet Labs and Buoyant with a special shoutout to Leo Liang and Chris Taylor for their work on fixing a bug in the DNS SRV namer.

Full release notes:

  • HTTP/2
    • Fixes an HTTP/2 issue that causes Linkerd to stop processing incoming frames on an HTTP/2 connection after Linkerd sends a RST_STREAM frame to its remote peer. This was causing gRPC clients to experience timeout errors intermittently because connections between Linkerd and its remote peers weren't being closed properly.
    • Sets the maxConcurrentStreamsPerConnection config value for the h2 router to 1000 by default to prevent Linkerd from running out of memory when HTTP/2 clients leak connection streams.
  • Consul
    • Adds a request timeout to io.l5d.consul namer HTTP polling requests to prevent an issue where the namer holds on to stale service discovery information.
    • Adds a new io.l5d.consul.interpreter that allows Linkerd to read dtabs directly from a Consul KV store.
  • DNS SRV
    • Fixes an issue where the io.l5d.dnssrv namer would get into a bad state and fail to resolve service names.
  • Adds support for configuring JVM GC logging in Linkerd and Namerd by default.
  • Fixes a memory leak issue caused by Finagle's BalancerRegistry failing to properly remove Balancer objects.

1.5.0

5 years ago

Linkerd 1.5.0 adds the long awaited ability to make Linkerd config changes with zero downtime! 🤯 This release adds the socketOptions.reusePort config property which allows multiple processes to bind to the same port. In this way, you can start a new Linkerd process and wait for it to start serving requests before gracefully shutting down the old Linkerd process. Note that this feature is only available on Linux 3.9 distributions and newer.

This release features contributions from Applause, ThreeComma, GuteFrage GmbH, and Buoyant. An extra special thank you to Zack Angelo for laying the groundwork in Finagle for the reusePort feature!

Full release notes:

  • Breaking Change: The threshold and windowSize options have been removed from the failureThreshold config in the Namerd interpreter. These options were of limited value and are no longer supported by Finagle.
  • Socket Options:
    • Certain socket options may now be set on Linkerd servers by adding a socketOptions config in a server config.
    • Add support for the SO_REUSEPORT socket option. This allows multiple processes to bind to the same port and is a great way to do zero downtime Linkerd deploys.
  • Istio features are now marked as deprecated.
  • Marathon:
    • Ensure traffic is not sent to Marathon services during their health-check grace period.
  • Use AsyncAppender for console logging so that logging does not impact Linkerd performance.
  • Upgrade to Finagle 18.9.1

1.4.6

5 years ago

Linkerd 1.4.6 adds even more watch state endpoints to Linkerd's debugging arsenal, allowing you to inspect the state of Linkerd’s watches easily. This release adds watch state endpoints for the Kubernetes ConfigMap interpreter as well as the Marathon and filesystem namers.

Full release notes:

  • HTTP/1.1 and HTTP/2
    • Allow HTTP/1.1 and HTTP/2 POST requests to be retryable.
    • Fix an issue where the x-forwarded-client-cert header was not always cleared on incoming requests.
  • Add TLS support for the io.l5d.etcd namer client.
  • Admin
    • Add new io.l5d.marathon, io.l5d.fs, and io.l5d.k8s.configMap watch state endpoints to allow diagnosis of Linkerd’s various watches.
  • Distributed Tracing
    • Add a new io.l5d.zipkin trace propagation plugin that writes Zipkin B3 trace headers to outgoing requests. Previously, Zipkin trace headers were ignored by Linkerd in order for Linkerd to not interfere with other tracing systems like Zipkin.
  • Namerd
    • Add an experimental io.l5d.destination interface which implements the Linkerd destination API.

1.4.5

5 years ago

Linkerd 1.4.5 contains some minor bugfixes and introduces two much-requested features. First, it is now possible to selectively disable Linkerd's admin endpoints, e.g., keep the UI functional but to disable the shutdown endpoint. A huge thanks to Robert Panzer for all his hard work on this.

Second, we've added experimental support for the OpenJ9 JVM. Preliminary tests with OpenJ9 exhibit a 3x reduction in startup time, a 40% reduction in memory footprint, and a 3x reduction in p99 latency. You can find a Linkerd+OpenJ9 Docker image at buoyantio/linkerd:1.4.5-openj9-experimental on Docker Hub.

Full release notes:

  • Add an OpenJ9 configuration for building a Docker image with the OpenJ9 JVM
  • Fix a NullPointerException when using the -validate flag
  • Fix an error where diagnostic tracing did not work when receiving a chunk encoded response
  • Admin
    • Add a security section to the admin config that controls which admin endpoints are enabled
  • HTTP/2
    • Fix a memory leak when there are a large number of reset streams
    • Allow HTTP/2 response classifiers to be loaded as plugins
  • Namerd
    • Fix a memory leak in the the io.l5d.mesh interpreter when idle services are reaped

1.4.4

5 years ago

Linkerd 1.4.4 continues our focus on diagnostics, performance, and stability. This release features several performance and diagnostics improvements, including better handling of HTTP/2 edge cases, new watch state introspection for the Consul namer, and better isolation of admin page serving from the primary data path. It also features a new, pluggable trace propagation module that allows for easier integration with tracing systems like OpenTracing.

This release features contributions from Salesforce, Walmart, WePay, Comcast, ScalaConsultants, OfferUp, Buoyant, and more. A big thank you to:

Full release notes:

  • Distributed Tracing
    • Refactor Linkerd's trace propagation module to be pluggable. This allows better integration with tracing systems like OpenTracing and allows users to write Linkerd trace propagation plugins for arbitrary tracing systems.
  • TLS
    • Deprecate the trustCerts config field in the client TLS section in favor of trustCertsBundle. This allows you to use multiple trust certs in one file and avoids the need for Linkerd to create temporary files.
  • HTTP, HTTP/2
    • Fix an issue where Linkerd sometimes interprets HTTP/1.0 response with no Content-Length as a chunked response.
    • Improve error messages by adding contextual routing information to a ConnectionFailed exception sent back to a client via Linkerd.
    • Add a gRPC standard-compliant response classifier.
    • Fix an issue where Linkerd doesn't add an l5d-err header in an HTTP/2 response.
    • Fix an issue where Linkerd does not handle HTTP/2 requests with invalid HTTP status codes correctly.
  • Consul
    • Add new watch state instrumentation feature to the io.l5d.consul namer.
    • Fix an issue where the io.l5d.consul namer sometimes does not retry ConnectionRefused exception.
    • Fix an issue where the io.l5d.consul namer returns a single IP for a service node instead of multiple IP addresses for a service node.
  • Admin
    • Fix an issue where Linkerd may slow down data plane requests when the admin server is under heavy load.
    • Improve performance of the Prometheus telemeter when serving metrics for a high cardinality of services.
    • Fix an issue where the intepreter_state endpoint was not available for interpreters that contained a transformer.
    • Fix the namer_state endpoint to expose namers that use transformers.
  • Namerd
    • Fix an issue where null values were accepted by the Dtab HTTP API.