stable-2.13.0
stable-2.13.0
This release introduces client-side policy to Linkerd, including dynamic routing
and circuit breaking. Gateway API HTTPRoutes
can now be used to configure policy for outbound (client) proxies as well as
inbound (server) proxies, by creating HTTPRoutes with Service resources as their
parentRef
. See the Linkerd documentation for tutorials on dynamic request
routing and circuit breaking. New functionality for debugging HTTPRoute-based
policy is also included in this release, including new proxy metrics and the
ability to display outbound policies in the linkerd diagnostics policy
CLI
command.
In addition, this release adds network-validator
, a new init container to be
used when CNI is enabled. network-validator
ensures that local iptables rules
are working as expected. It will validate this before linkerd-proxy starts.
network-validator
replaces the noop
container, runs as nobody
, and drops
all capabilities before starting.
Finally, this release includes a number of bugfixes, performance improvements,
and other smaller additions.
Upgrade notes: Please see the upgrade instructions.
-
CRDs
- HTTPRoutes may now have Service parents, to configure outbound policy
- Updated HTTPRoute version from
v1alpha1
tov1beta2
-
CLI
- Added a new
linkerd prune
command to the CLI (including most extensions) to
remove resources which are no longer part of Linkerd's manifests - Added additional shortnames for Linkerd policy resources (thanks @javaducky!)
- The
linkerd diagnostics policy
command now displays outbound policy when
the target resource is a Service
- Added a new
-
Control Plane
- The policy controller now discovers outbound policy configurations from
HTTPRoutes that target Services. - Added OutboundPolicies API, for use by
linkerd-proxy
to route
outbound traffic - Added Prometheus
/metrics
endpoint to the admin server, with process
metrics - Fixed QueryParamMatch parsing for HTTPRoutes
- Added the policy status controller which writes the
status
field to
HTTPRoutes when a parent reference Server accepts or rejects it - Added KubeAPI server ports to
ignoreOutboundPorts
ofproxy-injector
- No longer apply
waitBeforeExitSeconds
to control plane, viz and jaeger
extension pods - Added support for the
internalTrafficPolicy
of a service (thanks @yc185050!) - Added block chomping to strip trailing new lines in ConfigMap (thanks @avdicl!)
- Added protection against nil dereference in resources helm template
- Added support for Pod Security Admission (Pod Security Policy resources are
still supported but disabled by default) - Lowered non-actionable error messages in the Destination log to debug-level
entries to avoid triggering false alarms (thanks @siddharthshubhampal!) - Fixed an issue with EndpointSlice endpoint reconciliation on slice deletion;
when using more than one slice, aNoEndpoints
event would be sent to the
proxy regardless of the amount of endpoints that were still available
(thanks @utay!) - Improved diagnostic log messages
- Fixed sending of spurious profile updates
- Removed unnecessary Namespaces access from the destination controller RBAC
- Added the server_port_subscribers metric to track the number of subscribers
to Server changes associated with a pod's port - Added the service_subscribers metric to track the number of subscribers to
Service changes - Fixed a small memory leak in the opaque ports watcher
- The policy controller now discovers outbound policy configurations from
-
Proxy
- Use the new OutboundPolicies API, supporting Gateway API-style routes
in the outbound proxy - Added support for dynamic request routing based on HTTPRoutes
- Added HTTP circuit breaking
- Added
outbound_route_backend_http_requests_total
,
outbound_route_backend_grpc_requests_total
, and
outbound_http_balancer_endpoints
metrics - Changed the proxy's behavior when traffic splitting so that only services
that are not in failfast are used. This will enable the proxy to manage
failover without external coordination - Updated tokio (async runtime) in the proxy which should reduce CPU usage,
especially for proxy's pod local (i.e in the same network namespace)
communication
- Use the new OutboundPolicies API, supporting Gateway API-style routes
-
linkerd-proxy-init
- Changed
proxy-init
iptables rules to be idempotent upon init pod
restart (thanks @jim-minter!) - Improved logging in
proxy-init
andlinkerd-cni
- Added a
proxyInit.privileged
setting to control whether theproxy-init
initContainer runs as a privileged process
- Changed
-
CNI
- Added static and dynamic port overrides for CNI eBPF to work with socket-level
load balancing - Added
network-validator
init container to ensure that iptables rules are
working as expected - Added a
resources
field in the linkerd-cni chart (thanks @jcogilvie!)
- Added static and dynamic port overrides for CNI eBPF to work with socket-level
-
Viz
- Added
tap.ignoredHeaders
Helm value to the linkerd-viz chart. This value
allows users to specify a comma-separated list of header names which will be
ignored by Linkerd Tap (thanks @ryanhristovski!) - Removed duplicate SecurityContext in Prometheus manifest
- Added new flag
--viz-namespace
which avoids requiring permissions for
listing all namespaces inlinkerd viz
subcommands (thanks @danibaeyens!) - Removed the TrafficSplit page from the Linkerd viz dashboard (thanks
@h-dav!) - Introduced new values in the
viz
chart to allow for arbitrary annotations
on theService
objects (thanks @sgrzemski!) - Added an optional AuthorizationPolicy to authorize Grafana to Prometheus
in the Viz extension
- Added
-
Multicluster
- Removed duplicate AuthorizationPolicy for probes from the multicluster
gateway Helm chart - Updated wording for linkerd-multicluster cluster when it fails to probe a
remote gateway mirror - Added multicluster gateway
nodeSelector
andtolerations
helm parameters - Added new configuration options for the multicluster gateway:
gateway.deploymentAnnotations
gateway.terminationGracePeriodSeconds
(thanks @bunnybilou!)gateway.loadBalancerSourceRanges
(thanks @Tyrion85!)
- Removed duplicate AuthorizationPolicy for probes from the multicluster
-
Extensions
- Removed dependency on the
curlimages/curl
3rd-party image used to initialize
extensions namespaces metadata (so they are visible bylinkerd check
),
replaced by the newextension-init
image - Converted
ServerAuthorization
resources toAuthorizationPolicy
resources
in Linkerd extensions - Removed policy resources bound to admin servers in extensions (previously
these resources were used to authorize probes but now are authorized by
default) - Fixed the link to the Jaeger dashboard the in viz dashboard (thanks
@eugenegoncharuk!) - Updated linkerd-jaeger's collector to expose port 4318 in order support HTTP
alongside gRPC (thanks @uralsemih!)
- Removed dependency on the
-
Among other dependency updates, the no-longer maintained ghodss/yaml library
was replaced with sigs.k8s.io/yaml (thanks @Juneezee!)
This release includes changes from a massive list of contributors! A special
thank-you to everyone who helped make this release possible:
- Andrew Pinkham @jambonrose
- Arnaud Beun @bunnybilou
- Carlos Tadeu Panato Junior @cpanato
- Christian Segundo @someone-stole-my-name
- Dani Baeyens @danibaeyens
- Duc Tran @ductnn
- Eng Zer Jun @Juneezee
- Ivan Ivic @Tyrion85
- Joe Bowbeer @joebowbeer
- Jonathan Ogilvie @jcogilvie
- Jun @junnplus
- Loong Dai @daixiang0
- María Teresa Rojas @mtrojas
- Mo Sattler @MoSattler
- Oleg Vorobev @olegy2008
- Paul Balogh @javaducky
- Peter Smit @psmit
- Ryan Hristovski @ryanhristovski
- Semih Ural @uralsemih
- Shubhodeep Mukherjee @shubhodeep9
- Siddharth S Pal @siddharthshubhampal
- Subhash Choudhary @subhashchy
- Szymon Grzemski @sgrzemski
- Takumi Sue @mikutas
- Yannick Utard @utay
- Yu Cao @yc185050
- anoxape @anoxape
- bastienbosser @bastienbosser
- bitfactory-sem-denbroeder @bitfactory-sem-denbroeder
- cui fliter @cuishuang
- eugenegoncharuk @eugenegoncharuk
- h-dav @h-dav
- martinkubrak @martinkubra
- verbotenj @verbotenj
- ziollek @ziollek