@@ -12,19 +14,19 @@
display: flex;
align-items: center;
min-width: 200px;
- padding-left: spacer(2);
- border: solid 1px $border-color;
+ padding-left: abstracts.size(2);
+ border: solid 1px abstracts.$border-color;
border-radius: 999px;
- background-color: $white;
+ background-color: abstracts.$white;
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
svg {
flex-shrink: 0;
- width: icon-size("md");
- height: icon-size("md");
+ width: abstracts.icon-size("md");
+ height: abstracts.icon-size("md");
path {
- color: $gray;
+ color: abstracts.$gray;
}
}
input[type=text],
@@ -34,8 +36,8 @@
outline: none;
}
input[type=reset] {
- padding-right: spacer(3);
- color: $blue;
+ padding-right: abstracts.size(3);
+ color: abstracts.$blue;
cursor: pointer;
}
// Hide reset button if search input is empty
@@ -48,12 +50,12 @@
&.search-input--sm {
svg {
- width: icon-size("sm");
- height: icon-size("sm");
+ width: abstracts.icon-size("sm");
+ height: abstracts.icon-size("sm");
}
input[type=text],
input[type=reset] {
- font-size: $font-size-sm;
+ font-size: abstracts.$font-size-sm;
}
}
}
diff --git a/linkerd.io/assets/scss/components/_thumbnail.scss b/linkerd.io/assets/scss/components/_thumbnail.scss
index 337c156186..f91be38b65 100644
--- a/linkerd.io/assets/scss/components/_thumbnail.scss
+++ b/linkerd.io/assets/scss/components/_thumbnail.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup
@@ -9,7 +11,7 @@
.thumbnail {
position: relative;
overflow: hidden;
- border-radius: $border-radius;
+ border-radius: abstracts.$border-radius;
span {
position: absolute;
diff --git a/linkerd.io/assets/scss/layout/_container.scss b/linkerd.io/assets/scss/layout/_container.scss
index f1e9efb0f7..f893beb12c 100644
--- a/linkerd.io/assets/scss/layout/_container.scss
+++ b/linkerd.io/assets/scss/layout/_container.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
.container,
.container-fluid,
.container-sm,
@@ -8,46 +10,46 @@
width: 100%;
margin-left: auto;
margin-right: auto;
- padding-left: $container-padding;
- padding-right: $container-padding;
+ padding-left: abstracts.$container-padding;
+ padding-right: abstracts.$container-padding;
}
-@media (min-width: breakpoint-min-width("sm")) {
+@media (min-width: abstracts.breakpoint-min-width("sm")) {
.container,
.container-sm,
.container-md,
.container-lg,
.container-xl,
.container-xxl {
- max-width: container-max-width("sm");
+ max-width: abstracts.container-max-width("sm");
}
}
-@media (min-width: breakpoint-min-width("md")) {
+@media (min-width: abstracts.breakpoint-min-width("md")) {
.container,
.container-md,
.container-lg,
.container-xl,
.container-xxl {
- max-width: container-max-width("md");
+ max-width: abstracts.container-max-width("md");
}
}
-@media (min-width: breakpoint-min-width("lg")) {
+@media (min-width: abstracts.breakpoint-min-width("lg")) {
.container,
.container-lg,
.container-xl,
.container-xxl {
- max-width: container-max-width("lg");
+ max-width: abstracts.container-max-width("lg");
}
}
-@media (min-width: breakpoint-min-width("xl")) {
+@media (min-width: abstracts.breakpoint-min-width("xl")) {
.container,
.container-xl,
.container-xxl {
- max-width: container-max-width("xl");
+ max-width: abstracts.container-max-width("xl");
}
}
-@media (min-width: breakpoint-min-width("xxl")) {
+@media (min-width: abstracts.breakpoint-min-width("xxl")) {
.container,
.container-xxl {
- max-width: container-max-width("xxl");
+ max-width: abstracts.container-max-width("xxl");
}
}
diff --git a/linkerd.io/assets/scss/main.scss b/linkerd.io/assets/scss/main.scss
index c1b70b1e0f..f93a9d5e99 100644
--- a/linkerd.io/assets/scss/main.scss
+++ b/linkerd.io/assets/scss/main.scss
@@ -1,61 +1,50 @@
-// Utility functions
-@import "functions";
-
-// Values for colors, fonts, spacing, etc
-@import "variables";
-
// Font file imports
-@import "fonts";
-
-// Mix-ins
-@import "mixins/button";
-@import "mixins/card";
-@import "mixins/stack";
+@use "base/fonts";
// Global styling of html elements
-@import "base";
+@use "base/base";
// Components
-@import "components/accordion";
-@import "components/alert";
-@import "components/anchor";
-@import "components/avatar";
-@import "components/badge";
-@import "components/button";
-@import "components/card";
-@import "components/form-control";
-@import "components/hero";
-@import "components/highlight";
-@import "components/icon-button";
-@import "components/icon";
-@import "components/img";
-@import "components/keyval";
-@import "components/loader";
-@import "components/page";
-@import "components/paginator";
-@import "components/prose";
-@import "components/search-input";
-@import "components/thumbnail";
-@import "components/toggle";
+@use "components/accordion";
+@use "components/alert";
+@use "components/anchor";
+@use "components/avatar";
+@use "components/badge";
+@use "components/button";
+@use "components/card";
+@use "components/form-control";
+@use "components/hero";
+@use "components/highlight";
+@use "components/icon-button";
+@use "components/icon";
+@use "components/img";
+@use "components/keyval";
+@use "components/loader";
+@use "components/page";
+@use "components/paginator";
+@use "components/prose";
+@use "components/search-input";
+@use "components/thumbnail";
+@use "components/toggle";
-// Application
-@import "app/adopters";
-@import "app/ambassadors-apply";
-@import "app/ambassadors";
-@import "app/blog";
-@import "app/docs";
-@import "app/enterprise";
-@import "app/get-involved";
-@import "app/heroes";
-@import "app/home";
-@import "app/main-announcement";
-@import "app/main-footer";
-@import "app/main-header";
-@import "app/main-nav";
-@import "app/meetup";
-@import "app/search";
-@import "app/404";
-//@import "app/tests";
+// Layout containers and utilities
+@use "layout/container";
-// Responsive containers and utilities
-@import "layout/container";
+// Pages
+@use "pages/adopters";
+@use "pages/ambassadors-apply";
+@use "pages/ambassadors";
+@use "pages/blog";
+@use "pages/docs";
+@use "pages/enterprise";
+@use "pages/get-involved";
+@use "pages/heroes";
+@use "pages/home";
+@use "pages/main-announcement";
+@use "pages/main-footer";
+@use "pages/main-header";
+@use "pages/main-nav";
+@use "pages/meetup";
+@use "pages/search";
+@use "pages/four0four";
+//@import "pages/tests";
diff --git a/linkerd.io/assets/scss/mixins/_button.scss b/linkerd.io/assets/scss/mixins/_button.scss
deleted file mode 100644
index 866e7f0a90..0000000000
--- a/linkerd.io/assets/scss/mixins/_button.scss
+++ /dev/null
@@ -1,99 +0,0 @@
-@mixin make-button {
- display: inline-block;
- padding: 8.5px 16px;
- color: $blue;
- background-color: transparent;
- border-radius: $border-radius;
- outline-width: 0;
- white-space: nowrap;
- vertical-align: middle;
- text-align: center;
- text-decoration: none;
- font-family: $font-family-base;
- font-weight: $font-weight-bold;
- font-size: $font-size-base;
- line-height: $line-height-base;
- cursor: pointer;
- transition: background-color 0.2s ease;
-
- &:focus {
- outline: 0;
- }
- &:hover,
- &:active {
- color: shade-color($blue, 20%);
- background-color: $light-blue;
- }
-}
-@mixin make-button--primary {
- color: $white;
- background-color: $blue;
-
- &:hover,
- &:active {
- color: $white;
- background-color: shade-color($blue, 20%);
- }
-}
-@mixin make-button--secondary {
- color: $navy;
- background-color: $green;
-
- &:hover,
- &:active {
- color: $navy;
- background-color: darken($green, 15%);
- }
-}
-@mixin make-button--outline {
- background-color: transparent;
- outline: solid 1px $border-color;
- transition: color 0.2s ease, border-color 0.2s ease;
-
- &.button--primary {
- color: $blue;
- outline-color: $blue;
-
- &:hover,
- &:active {
- color: shade-color($blue, 20%);
- outline-color: shade-color($blue, 20%);
- background-color: transparent;
- }
- }
- &.button--secondary {
- color: darken($green, 30%);
- outline-color: darken($green, 30%);
-
- &:hover,
- &:active {
- color: darken($green, 35%);
- outline-color: darken($green, 35%);
- background-color: transparent;
- }
- }
-}
-@mixin make-button--lg {
- padding: 13px 24px;
- font-size: $font-size-lg;
-}
-@mixin make-button--md {
- padding: 8.5px 16px;
- font-size: $font-size-base;
-}
-@mixin make-button--sm {
- padding: 8px 14px;
- font-size: $font-size-sm;
-}
-@mixin make-button--xs {
- padding: 2px 8px;
- font-size: $font-size-xs;
-}
-@mixin make-button--block {
- display: block;
- width: 100%;
-}
-@mixin make-button--disabled {
- pointer-events: none;
- opacity: 0.25;
-}
diff --git a/linkerd.io/assets/scss/mixins/_stack.scss b/linkerd.io/assets/scss/mixins/_stack.scss
deleted file mode 100644
index 96643cbdeb..0000000000
--- a/linkerd.io/assets/scss/mixins/_stack.scss
+++ /dev/null
@@ -1,16 +0,0 @@
-@mixin make-stack($spacer) {
- & > * {
- margin-bottom: 0;
- }
- & > * + * {
- margin-top: spacer($spacer);
- }
-}
-@mixin make-stack-recursive($spacer) {
- & * {
- margin-bottom: 0;
- }
- & * + * {
- margin-top: spacer($spacer);
- }
-}
diff --git a/linkerd.io/assets/scss/app/_adopters.scss b/linkerd.io/assets/scss/pages/_adopters.scss
similarity index 61%
rename from linkerd.io/assets/scss/app/_adopters.scss
rename to linkerd.io/assets/scss/pages/_adopters.scss
index f4b5f49ef9..b9d4269f67 100644
--- a/linkerd.io/assets/scss/app/_adopters.scss
+++ b/linkerd.io/assets/scss/pages/_adopters.scss
@@ -1,42 +1,44 @@
+@use "../abstracts";
+
/*
@markup See: layouts/community/adopters.html
*/
.adopters {
.page__container {
- @include make-stack(7);
+ @include abstracts.make-stack(7);
}
.adopters__case-studies {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
blockquote {
// Remove base styling
padding: 0;
border: none;
- background-color: $white;
+ background-color: abstracts.$white;
}
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
grid-template-columns: repeat(2, 1fr);
}
}
.adopters__logos {
display: grid;
- gap: spacer(7);
+ gap: abstracts.size(7);
grid-template-columns: 1fr;
img {
// Multiply the logos because some of them have a white background
mix-blend-mode: multiply;
}
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
grid-template-columns: repeat(2, 1fr);
}
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
grid-template-columns: repeat(3, 1fr);
}
- @media (min-width: breakpoint-min-width("xl")) {
+ @media (min-width: abstracts.breakpoint-min-width("xl")) {
grid-template-columns: repeat(4, 1fr);
}
}
diff --git a/linkerd.io/assets/scss/pages/_ambassadors-apply.scss b/linkerd.io/assets/scss/pages/_ambassadors-apply.scss
new file mode 100644
index 0000000000..c7a94eaa78
--- /dev/null
+++ b/linkerd.io/assets/scss/pages/_ambassadors-apply.scss
@@ -0,0 +1,26 @@
+@use "../abstracts";
+
+/*
+@markup See: layouts/community/ambassadors-apply.html
+*/
+
+.ambassadors-apply {
+ // Override all h2s on the page
+ h2 {
+ font-size: abstracts.$font-size-h1;
+ }
+ .page__container {
+ @include abstracts.make-stack(7);
+ }
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
+ section {
+ padding-left: abstracts.size(6);
+ padding-right: abstracts.size(6);
+ }
+ .card {
+ @include abstracts.make-card--horz;
+ @include abstracts.make-card--reverse;
+ padding: abstracts.size(6);
+ }
+ }
+}
diff --git a/linkerd.io/assets/scss/app/_ambassadors.scss b/linkerd.io/assets/scss/pages/_ambassadors.scss
similarity index 50%
rename from linkerd.io/assets/scss/app/_ambassadors.scss
rename to linkerd.io/assets/scss/pages/_ambassadors.scss
index 36796f90df..187640dea9 100644
--- a/linkerd.io/assets/scss/app/_ambassadors.scss
+++ b/linkerd.io/assets/scss/pages/_ambassadors.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/community/ambassadors.html
*/
@@ -5,15 +7,15 @@
.ambassadors {
// Override all h2s on the page
h2 {
- font-size: $font-size-h1;
+ font-size: abstracts.$font-size-h1;
}
.page__container {
- @include make-stack(7);
+ @include abstracts.make-stack(7);
}
.ambassadors__section {
- @include make-stack(5);
+ @include abstracts.make-stack(5);
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
h2 {
text-align: center;
}
@@ -21,10 +23,10 @@
}
.ambassadors__items {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
grid-template-columns: repeat(2, 1fr);
}
}
@@ -32,20 +34,20 @@
position: relative;
.card__footer {
- gap: spacer(1);
+ gap: abstracts.size(1);
}
.ambassadors__emeritus-badge {
position: absolute;
- @media (max-width: breakpoint-max-width("lg")) {
- left: spacer(4);
- bottom: spacer(4);
+ @media (max-width: abstracts.breakpoint-max-width("lg")) {
+ left: abstracts.size(4);
+ bottom: abstracts.size(4);
width: 128px; // Thumbnail width
text-align: center; // Center badge under thumbnail
}
- @media (min-width: breakpoint-min-width("xl")) {
- top: spacer(3);
- right: spacer(3);
+ @media (min-width: abstracts.breakpoint-min-width("xl")) {
+ top: abstracts.size(3);
+ right: abstracts.size(3);
}
}
}
diff --git a/linkerd.io/assets/scss/app/_blog.scss b/linkerd.io/assets/scss/pages/_blog.scss
similarity index 60%
rename from linkerd.io/assets/scss/app/_blog.scss
rename to linkerd.io/assets/scss/pages/_blog.scss
index 852590f5b3..e2d6207ca0 100644
--- a/linkerd.io/assets/scss/app/_blog.scss
+++ b/linkerd.io/assets/scss/pages/_blog.scss
@@ -1,21 +1,23 @@
+@use "../abstracts";
+
/*
@markup See: layouts/blog/*
*/
.blog {
- padding: spacer(7) 0;
+ padding: abstracts.size(7) 0;
&.blog--list {
- background-color: $offwhite;
+ background-color: abstracts.$offwhite;
}
// Override all card header links in the blog section
.card__header {
a {
- color: $navy;
+ color: abstracts.$navy;
&:hover {
- color: $blue;
+ color: abstracts.$blue;
}
}
}
@@ -24,19 +26,19 @@
// .blog__container
.blog__container {
- @include make-stack(6);
+ @include abstracts.make-stack(6);
}
// .blog-list
.blog-list {
- @include make-stack(5);
+ @include abstracts.make-stack(5);
h2 {
// Override all h2s on the blog list page
- color: $gray;
- font-size: $font-size-base;
- font-weight: $font-weight-normal;
+ color: abstracts.$gray;
+ font-size: abstracts.$font-size-base;
+ font-weight: abstracts.$font-weight-normal;
text-align: center;
}
.blog-list__header {
@@ -51,10 +53,10 @@
.blog-list__feature,
.blog-list__pages {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
}
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
.blog-list__feature,
.blog-list__pages {
grid-template-columns: repeat(2, 1fr);
@@ -65,13 +67,13 @@
// .blog-post
.blog-post {
- @include make-stack(4);
+ @include abstracts.make-stack(4);
max-width: 800px;
margin: 0 auto;
.blog-post__header {
h1 {
- font-weight: $font-weight-normal;
+ font-weight: abstracts.$font-weight-normal;
}
}
}
@@ -79,21 +81,21 @@
// .blog-post-related
.blog-post-related {
- @include make-stack(5);
+ @include abstracts.make-stack(5);
h2 {
// Override base styles
- color: $gray;
- font-size: $font-size-base;
- font-weight: $font-weight-normal;
+ color: abstracts.$gray;
+ font-size: abstracts.$font-size-base;
+ font-weight: abstracts.$font-weight-normal;
text-align: center;
}
.blog-post-related__pages {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
}
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
.blog-post-related__pages {
grid-template-columns: repeat(2, 1fr);
}
@@ -104,7 +106,7 @@
.blog-post-meta {
display: flex;
- gap: spacer(2);
+ gap: abstracts.size(2);
align-items: center;
.blog-post-meta__body {
@@ -112,9 +114,9 @@
flex-direction: column;
}
.blog-post-meta__name {
- font-weight: $font-weight-bold;
+ font-weight: abstracts.$font-weight-bold;
}
.blog-post-meta__date {
- font-size: $font-size-sm;
+ font-size: abstracts.$font-size-sm;
}
}
diff --git a/linkerd.io/assets/scss/app/_docs.scss b/linkerd.io/assets/scss/pages/_docs.scss
similarity index 50%
rename from linkerd.io/assets/scss/app/_docs.scss
rename to linkerd.io/assets/scss/pages/_docs.scss
index 901a530fd0..b110ba9fbe 100644
--- a/linkerd.io/assets/scss/app/_docs.scss
+++ b/linkerd.io/assets/scss/pages/_docs.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/docs/*
*/
@@ -14,11 +16,11 @@
grid-template-columns: 1fr;
}
.docs__sidebar {
- background-color: $light-gray;
+ background-color: abstracts.$light-gray;
}
.docs__nav {
- @include make-stack(3);
- padding: spacer(4);
+ @include abstracts.make-stack(3);
+ padding: abstracts.size(4);
select {
// Override base styles
@@ -33,57 +35,57 @@
}
nav li {
position: relative; // Needed to position label
- line-height: $line-height-tight;
+ line-height: abstracts.$line-height-tight;
a {
display: block;
- padding: spacer(2) 0 spacer(2) spacer(3);
- margin-right: spacer(5); // Prevent the text from touching the label
- color: $gray;
+ padding: abstracts.size(2) 0 abstracts.size(2) abstracts.size(3);
+ margin-right: abstracts.size(5); // Prevent the text from touching the label
+ color: abstracts.$gray;
&:hover {
- color: $blue;
+ color: abstracts.$blue;
}
}
label {
// Postion toggle button
position: absolute;
top: 6px;
- right: spacer(2);
+ right: abstracts.size(2);
}
&.docs__nav--selected {
- background-color: $white;
+ background-color: abstracts.$white;
& > a {
- color: $navy;
+ color: abstracts.$navy;
}
}
li {
// Indent submenus
- padding-left: spacer(3);
+ padding-left: abstracts.size(3);
li {
// Reduce font size and spacing below level 2
- font-size: $font-size-sm;
+ font-size: abstracts.$font-size-sm;
a {
- padding-top: spacer(1);
- padding-bottom: spacer(1);
+ padding-top: abstracts.size(1);
+ padding-bottom: abstracts.size(1);
}
}
}
}
.docs__versions {
- padding-bottom: spacer(2);
- border-bottom: solid 1px $border-color;
+ padding-bottom: abstracts.size(2);
+ border-bottom: solid 1px abstracts.$border-color;
}
.docs__community {
- margin-top: spacer(3);
- padding: spacer(4) spacer(3);
- border-top: solid 1px $border-color;
+ margin-top: abstracts.size(3);
+ padding: abstracts.size(4) abstracts.size(3);
+ border-top: solid 1px abstracts.$border-color;
ul {
- @include make-stack(3);
+ @include abstracts.make-stack(3);
}
img {
width: auto;
@@ -92,21 +94,21 @@
}
}
.docs__main {
- padding: spacer(7) 0;
+ padding: abstracts.size(7) 0;
}
.docs__header {
h1 {
- margin-bottom: spacer(5); // Override base styles
+ margin-bottom: abstracts.size(5); // Override base styles
}
}
.docs__body {
max-width: 800px;
- padding-left: spacer(4);
- padding-right: spacer(4);
+ padding-left: abstracts.size(4);
+ padding-right: abstracts.size(4);
}
-@media (min-width: breakpoint-min-width("md")) {
+@media (min-width: abstracts.breakpoint-min-width("md")) {
.docs__sidebar {
- padding: spacer(7) 0;
+ padding: abstracts.size(7) 0;
}
.docs__container {
grid-template-columns: 300px 1fr;
@@ -117,19 +119,19 @@
}
.docs__nav {
width: 300px;
- padding: 0 0 0 spacer(4);
+ padding: 0 0 0 abstracts.size(4);
}
.docs__versions,
.docs__community {
- margin-right: spacer(4);
+ margin-right: abstracts.size(4);
}
}
-@media (min-width: breakpoint-min-width("xl")) {
+@media (min-width: abstracts.breakpoint-min-width("xl")) {
.docs__body {
- padding-left: spacer(7);
+ padding-left: abstracts.size(7);
}
}
-@media (min-width: breakpoint-min-width("xxl")) {
+@media (min-width: abstracts.breakpoint-min-width("xxl")) {
.docs__container {
grid-template-columns: 33% 1fr;
}
diff --git a/linkerd.io/assets/scss/pages/_enterprise.scss b/linkerd.io/assets/scss/pages/_enterprise.scss
new file mode 100644
index 0000000000..e6ee1926a9
--- /dev/null
+++ b/linkerd.io/assets/scss/pages/_enterprise.scss
@@ -0,0 +1,26 @@
+@use "../abstracts";
+
+/*
+@markup See: layouts/enterprise/list.html
+*/
+
+.enterprise {
+ // Override all h2s on the page
+ h2 {
+ font-size: abstracts.$font-size-h1;
+ }
+ .page__container {
+ @include abstracts.make-stack(7);
+ }
+ .enterprise__section {
+ @include abstracts.make-stack(5);
+ }
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
+ .card {
+ @include abstracts.make-card--horz;
+ @include abstracts.make-card--reverse;
+ gap: abstracts.size(6);
+ padding: abstracts.size(6);
+ }
+ }
+}
diff --git a/linkerd.io/assets/scss/app/_404.scss b/linkerd.io/assets/scss/pages/_four0four.scss
similarity index 53%
rename from linkerd.io/assets/scss/app/_404.scss
rename to linkerd.io/assets/scss/pages/_four0four.scss
index 67e7d266d9..349a039c3c 100644
--- a/linkerd.io/assets/scss/app/_404.scss
+++ b/linkerd.io/assets/scss/pages/_four0four.scss
@@ -1,11 +1,13 @@
+@use "../abstracts";
+
/*
@markup See: layouts/404.html
*/
.four0four {
.four0four__container {
- @include make-stack(4);
- padding: spacer(8) 0;
+ @include abstracts.make-stack(4);
+ padding: abstracts.size(8) 0;
text-align: center;
}
}
diff --git a/linkerd.io/assets/scss/app/_get-involved.scss b/linkerd.io/assets/scss/pages/_get-involved.scss
similarity index 64%
rename from linkerd.io/assets/scss/app/_get-involved.scss
rename to linkerd.io/assets/scss/pages/_get-involved.scss
index d938a6c999..681692ccef 100644
--- a/linkerd.io/assets/scss/app/_get-involved.scss
+++ b/linkerd.io/assets/scss/pages/_get-involved.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/community/get-involved.html
*/
@@ -5,10 +7,10 @@
.get-involved {
.page__container {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
grid-template-columns: repeat(2, 1fr);
}
}
diff --git a/linkerd.io/assets/scss/app/_heroes.scss b/linkerd.io/assets/scss/pages/_heroes.scss
similarity index 71%
rename from linkerd.io/assets/scss/app/_heroes.scss
rename to linkerd.io/assets/scss/pages/_heroes.scss
index 8d8ddb0fe2..23eed1f35e 100644
--- a/linkerd.io/assets/scss/app/_heroes.scss
+++ b/linkerd.io/assets/scss/pages/_heroes.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/community/heroes.html
*/
@@ -5,10 +7,10 @@
.heroes {
.page__container {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
grid-template-columns: repeat(2, 1fr);
}
}
@@ -17,7 +19,7 @@
.heroes__type {
position: absolute;
- top: spacer(3);
+ top: abstracts.size(3);
right: 0;
z-index: 1;
}
diff --git a/linkerd.io/assets/scss/app/_home.scss b/linkerd.io/assets/scss/pages/_home.scss
similarity index 68%
rename from linkerd.io/assets/scss/app/_home.scss
rename to linkerd.io/assets/scss/pages/_home.scss
index e078052fe4..b60a5f31e2 100644
--- a/linkerd.io/assets/scss/app/_home.scss
+++ b/linkerd.io/assets/scss/pages/_home.scss
@@ -1,17 +1,19 @@
+@use "../abstracts";
+
/*
@markup See: layouts/index.html
*/
.home {
- @include make-stack(7);
- padding-bottom: spacer(8);
+ @include abstracts.make-stack(7);
+ padding-bottom: abstracts.size(8);
// Override all h2s on the home page
h2 {
- margin-bottom: spacer(6);
- font-size: $font-size-h1;
+ margin-bottom: abstracts.size(6);
+ font-size: abstracts.$font-size-h1;
}
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
h2 {
font-size: 48px;
}
@@ -35,7 +37,7 @@
text-wrap: balance;
}
}
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
background-image: url("/home/hero/bkgd.png");
.hero__header {
@@ -44,7 +46,7 @@
}
}
}
- @media (min-width: breakpoint-min-width("xxl")) {
+ @media (min-width: abstracts.breakpoint-min-width("xxl")) {
.hero_container {
// Override component styles
padding-top: 120px;
@@ -63,27 +65,27 @@
.home-stats {
margin-top: 0; // Override stack
- padding: spacer(6) 0;
- background-image: linear-gradient($light-blue, $white);
+ padding: abstracts.size(6) 0;
+ background-image: linear-gradient(abstracts.$light-blue, abstracts.$white);
background-size: 100% 200px;
background-repeat: no-repeat;
.home-stats__body {
display: grid;
- gap: spacer(2);
+ gap: abstracts.size(2);
grid-template-columns: repeat(2, 1fr);
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
grid-template-columns: repeat(4, 1fr);
}
}
.home-stats__property {
- font-size: $font-size-sm;
+ font-size: abstracts.$font-size-sm;
text-align: center;
}
.home-stats__value {
- font-size: $font-size-h1;
- font-weight: $font-weight-heavy;
+ font-size: abstracts.$font-size-h1;
+ font-weight: abstracts.$font-weight-heavy;
text-align: center;
}
}
@@ -93,10 +95,10 @@
.home-articles {
.home-articles__content {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
grid-template-columns: repeat(3, 1fr);
}
}
@@ -121,14 +123,14 @@
}
}
.home-adopters {
- padding: spacer(6) 0;
- background-image: linear-gradient($white, $light-green, $light-green, $white);
+ padding: abstracts.size(6) 0;
+ background-image: linear-gradient(abstracts.$white, abstracts.$light-green, abstracts.$light-green, abstracts.$white);
.home-adopters__body {
display: flex;
flex-direction: column;
- gap: spacer(6);
- font-size: $font-size-sm;
+ gap: abstracts.size(6);
+ font-size: abstracts.$font-size-sm;
}
.home-adopters__title {
display: flex;
@@ -138,7 +140,7 @@
a {
display: block;
- color: $navy;
+ color: abstracts.$navy;
white-space: nowrap;
}
img {
@@ -146,7 +148,7 @@
width: 160px;
height: auto;
margin: 0 auto;
- padding-top: spacer(2);
+ padding-top: abstracts.size(2);
}
}
.home-adopters__content,
@@ -181,12 +183,12 @@
.home-adopters__logos-2 {
animation: home-adopters-logos-2-keyframes 60s linear infinite;
}
- @media (max-width: breakpoint-max-width("md")) {
+ @media (max-width: abstracts.breakpoint-max-width("md")) {
.home__container {
padding: 0;
}
}
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
.home-adopters__body {
flex-direction: row;
}
@@ -212,11 +214,11 @@
z-index: 1;
}
&::before {
- background-image: linear-gradient(90deg, $light-green, rgba($light-green, 0));
+ background-image: linear-gradient(90deg, abstracts.$light-green, rgba(abstracts.$light-green, 0));
left: 0;
}
&::after {
- background-image: linear-gradient(-90deg, $light-green, rgba($light-green, 0));
+ background-image: linear-gradient(-90deg, abstracts.$light-green, rgba(abstracts.$light-green, 0));
right: 0;
}
}
@@ -228,10 +230,10 @@
.home-case-studies {
.home-case-studies__content {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
grid-template-columns: repeat(3, 1fr);
}
}
@@ -247,10 +249,10 @@
.home-features {
.home-features__content {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
grid-template-columns: repeat(2, 1fr);
}
}
@@ -260,9 +262,9 @@
.home-cncf {
.home-cncf__body {
- @include make-stack(4);
- padding: spacer(6) spacer(4);
- background-color: $light-blue;
+ @include abstracts.make-stack(4);
+ padding: abstracts.size(6) abstracts.size(4);
+ background-color: abstracts.$light-blue;
text-align: center;
}
}
@@ -272,10 +274,10 @@
.home-tweets {
.home-tweets__content {
display: grid;
- gap: spacer(4);
+ gap: abstracts.size(4);
grid-template-columns: 1fr;
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
grid-template-columns: repeat(2, 1fr);
}
}
diff --git a/linkerd.io/assets/scss/pages/_main-announcement.scss b/linkerd.io/assets/scss/pages/_main-announcement.scss
new file mode 100644
index 0000000000..62b164a50e
--- /dev/null
+++ b/linkerd.io/assets/scss/pages/_main-announcement.scss
@@ -0,0 +1,25 @@
+@use "../abstracts";
+
+/*
+@markup See: layouts/partials/main-announcement.html
+*/
+
+.main-announcement {
+ padding: abstracts.size(2);
+ background-color: abstracts.$navy;
+ color: abstracts.$white;
+ font-size: abstracts.$font-size-sm;
+ text-align: center;
+
+ a {
+ color: abstracts.$white;
+ font-weight: abstracts.$font-weight-bold;
+ text-decoration: underline;
+ text-decoration-thickness: 2px;
+ text-decoration-color: rgba(abstracts.$white, 0.4);
+ }
+ .main-announcement__link {
+ display: inline-block;
+ padding-left: abstracts.size(2);
+ }
+}
diff --git a/linkerd.io/assets/scss/app/_main-footer.scss b/linkerd.io/assets/scss/pages/_main-footer.scss
similarity index 64%
rename from linkerd.io/assets/scss/app/_main-footer.scss
rename to linkerd.io/assets/scss/pages/_main-footer.scss
index b930ad184f..4333230567 100644
--- a/linkerd.io/assets/scss/app/_main-footer.scss
+++ b/linkerd.io/assets/scss/pages/_main-footer.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/partials/main-footer.html
*/
@@ -14,29 +16,29 @@
flex-direction: column;
}
.main-footer__top {
- padding: spacer(6) 0;
- background-color: $light-blue;
+ padding: abstracts.size(6) 0;
+ background-color: abstracts.$light-blue;
.main-footer__container {
- gap: spacer(6);
+ gap: abstracts.size(6);
}
}
.main-footer__bottom {
- padding: spacer(3) 0;
- background-color: $navy;
- color: $light-blue;
+ padding: abstracts.size(3) 0;
+ background-color: abstracts.$navy;
+ color: abstracts.$light-blue;
text-align: center;
p {
- font-size: $font-size-sm;
+ font-size: abstracts.$font-size-sm;
}
.main-footer__container {
- gap: spacer(3);
+ gap: abstracts.size(3);
}
}
.main-footer__info {
- @include make-stack(2);
- color: $gray;
+ @include abstracts.make-stack(2);
+ color: abstracts.$gray;
text-align: center;
img {
@@ -46,14 +48,14 @@
.main-footer__links {
display: flex;
justify-content: center;
- gap: spacer(7);
+ gap: abstracts.size(7);
}
- @media (min-width: breakpoint-min-width("md")) {
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
.main-footer__container {
flex-direction: row;
}
.main-footer__top {
- padding: spacer(7) 0;
+ padding: abstracts.size(7) 0;
.main-footer__container {
justify-content: space-between;
diff --git a/linkerd.io/assets/scss/app/_main-header.scss b/linkerd.io/assets/scss/pages/_main-header.scss
similarity index 75%
rename from linkerd.io/assets/scss/app/_main-header.scss
rename to linkerd.io/assets/scss/pages/_main-header.scss
index 10b21fdc5e..d83caf5d91 100644
--- a/linkerd.io/assets/scss/app/_main-header.scss
+++ b/linkerd.io/assets/scss/pages/_main-header.scss
@@ -1,13 +1,15 @@
+@use "../abstracts";
+
/*
@markup See: layouts/partials/main-header.html
*/
body {
// Add top padding to the body to avoid content overlay with fixed header
- padding-top: $header-min-height;
+ padding-top: abstracts.$header-min-height;
}
-@media (max-width: $mobile-max-breakpoint) {
+@media (max-width: abstracts.$mobile-max-breakpoint) {
// Hide body scrollbar when mobile nav is open
body {
&:has(.main-header__toggle-checkbox:checked) {
@@ -21,23 +23,23 @@ body {
top: 0;
right: 0;
left: 0;
- z-index: $z-index-main-nav;
- background-color: $white;
- box-shadow: $box-shadow;
+ z-index: abstracts.$z-index-main-nav;
+ background-color: abstracts.$white;
+ box-shadow: abstracts.$box-shadow;
.main-header__container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
- gap: spacer(4);
- padding: spacer(2) spacer(3);
+ gap: abstracts.size(4);
+ padding: abstracts.size(2) abstracts.size(3);
}
.main-header__logo {
display: flex;
align-items: center;
// Maintain height of header
- min-height: ($header-min-height - spacer(3));
+ min-height: (abstracts.$header-min-height - abstracts.size(3));
img {
display: block;
@@ -49,7 +51,7 @@ body {
}
.main-header__toggle-icon {
cursor: pointer;
- font-family: $font-family-mono;
+ font-family: abstracts.$font-family-mono;
}
.main-header__toggle-icon--open {
display: inline-block;
@@ -58,7 +60,7 @@ body {
display: none;
}
// Mobile nav
- @media (max-width: $mobile-max-breakpoint) {
+ @media (max-width: abstracts.$mobile-max-breakpoint) {
&:has(.main-header__toggle-checkbox:checked) {
// Stretch header to fill window
height: 100vh;
@@ -81,7 +83,7 @@ body {
}
}
// Desktop nav
- @media (min-width: $desktop-min-breakpoint) {
+ @media (min-width: abstracts.$desktop-min-breakpoint) {
.main-header__container {
flex-wrap: nowrap;
}
diff --git a/linkerd.io/assets/scss/app/_main-nav.scss b/linkerd.io/assets/scss/pages/_main-nav.scss
similarity index 53%
rename from linkerd.io/assets/scss/app/_main-nav.scss
rename to linkerd.io/assets/scss/pages/_main-nav.scss
index ce638866be..8cb681b5e6 100644
--- a/linkerd.io/assets/scss/app/_main-nav.scss
+++ b/linkerd.io/assets/scss/pages/_main-nav.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/partials/main-nav.html
*/
@@ -5,7 +7,7 @@
.main-nav {
display: flex;
flex-direction: column;
- gap: spacer(3);
+ gap: abstracts.size(3);
ul,
li {
@@ -20,18 +22,18 @@
flex-direction: column;
a {
- color: $navy;
- font-size: $font-size-sm;
- font-weight: $font-weight-bold;
+ color: abstracts.$navy;
+ font-size: abstracts.$font-size-sm;
+ font-weight: abstracts.$font-weight-bold;
&:hover,
&:active {
- color: $blue;
+ color: abstracts.$blue;
}
}
.main-nav__menu--selected {
& > a {
- color: $blue;
+ color: abstracts.$blue;
}
}
}
@@ -39,19 +41,19 @@
height: 28px;
}
// Mobile nav
- @media (max-width: $mobile-max-breakpoint) {
+ @media (max-width: abstracts.$mobile-max-breakpoint) {
.main-nav__menu {
li {
- padding: spacer(2) 0;
+ padding: abstracts.size(2) 0;
&:has(ul) {
padding-bottom: 0;
}
}
ul {
- border-left: solid 2px $border-color;
- margin: spacer(3) 0;
- padding-left: spacer(3);
+ border-left: solid 2px abstracts.$border-color;
+ margin: abstracts.size(3) 0;
+ padding-left: abstracts.size(3);
}
}
.icon {
@@ -59,7 +61,7 @@
}
}
// Desktop nav
- @media (min-width: $desktop-min-breakpoint) {
+ @media (min-width: abstracts.$desktop-min-breakpoint) {
flex-direction: row;
align-items: center;
@@ -67,7 +69,7 @@
position: relative;
flex-grow: 1;
flex-direction: row;
- gap: spacer(4);
+ gap: abstracts.size(4);
& > li:hover ul {
display: block;
@@ -75,23 +77,23 @@
ul {
position: absolute;
display: none;
- padding: spacer(3);
- background-color: $white;
- box-shadow: $box-shadow;
- border-radius: $border-radius;
- z-index: $z-index-main-nav-submenu;
+ padding: abstracts.size(3);
+ background-color: abstracts.$white;
+ box-shadow: abstracts.$box-shadow;
+ border-radius: abstracts.$border-radius;
+ z-index: abstracts.$z-index-main-nav-submenu;
li {
- padding: spacer(2);
+ padding: abstracts.size(2);
}
}
.icon {
- margin-left: spacer(1);
+ margin-left: abstracts.size(1);
}
}
}
// Hack: Hide the Github button in the Desktop nav when it doesn't fit
- @media (min-width: breakpoint-min-width("lg")) and (max-width: breakpoint-max-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) and (max-width: abstracts.breakpoint-max-width("lg")) {
.main-nav__github {
display: none;
}
diff --git a/linkerd.io/assets/scss/app/_meetup.scss b/linkerd.io/assets/scss/pages/_meetup.scss
similarity index 58%
rename from linkerd.io/assets/scss/app/_meetup.scss
rename to linkerd.io/assets/scss/pages/_meetup.scss
index 72f2808679..d8a3fc3a08 100644
--- a/linkerd.io/assets/scss/app/_meetup.scss
+++ b/linkerd.io/assets/scss/pages/_meetup.scss
@@ -1,3 +1,5 @@
+@use "../abstracts";
+
/*
@markup See: layouts/meetup-in-a-box.html
*/
@@ -5,17 +7,17 @@
.meetup {
.hero {
.meetup__content {
- @include make-stack(4);
+ @include abstracts.make-stack(4);
}
.hero__footer {
flex-direction: column; // Override component styles
}
- @media (min-width: breakpoint-min-width("lg")) {
+ @media (min-width: abstracts.breakpoint-min-width("lg")) {
.hero__body {
- @include make-stack(0);
+ @include abstracts.make-stack(0);
display: flex;
flex-direction: row;
- gap: spacer(6);
+ gap: abstracts.size(6);
}
}
}
diff --git a/linkerd.io/assets/scss/pages/_search.scss b/linkerd.io/assets/scss/pages/_search.scss
new file mode 100644
index 0000000000..72e6aef7e9
--- /dev/null
+++ b/linkerd.io/assets/scss/pages/_search.scss
@@ -0,0 +1,44 @@
+@use "../abstracts";
+
+/*
+@markup See: layouts/search/list.html
+*/
+
+.search {
+ padding: abstracts.size(6) 0;
+
+ @media (min-width: abstracts.breakpoint-min-width("md")) {
+ padding: abstracts.size(7) 0;
+ }
+}
+
+// .search-results
+
+.search-results {
+ @include abstracts.make-stack(4);
+
+ // Add extra space between header and entries
+ & > :nth-child(2) {
+ margin-top: abstracts.size(6); // Override stack
+ }
+}
+
+// .search-results-entry
+
+.search-results-entry {
+ @include abstracts.make-stack(3);
+ padding-bottom: abstracts.size(4);
+ border-bottom: solid 1px abstracts.$border-color;
+
+ &:last-of-type {
+ padding-bottom: 0;
+ border-bottom: none;
+ }
+ .search-results-entry__section {
+ color: abstracts.$gray;
+ font-size: abstracts.$font-size-sm;
+ }
+ .search-results-entry__title {
+ margin-top: abstracts.size(1); // Override stack
+ }
+}
diff --git a/linkerd.io/assets/scss/app/_tests.scss b/linkerd.io/assets/scss/pages/_tests.scss
similarity index 100%
rename from linkerd.io/assets/scss/app/_tests.scss
rename to linkerd.io/assets/scss/pages/_tests.scss
diff --git a/linkerd.io/build b/linkerd.io/build
index 77d747f5e7..2494d7da14 100755
--- a/linkerd.io/build
+++ b/linkerd.io/build
@@ -5,4 +5,4 @@ set -e
BASE_DIR=$(pwd -P)
rm -rf "$BASE_DIR"/public
-hugo --minify
+hugo --minify --cleanDestinationDir
diff --git a/linkerd.io/content/2-edge/features/topology-aware-routing.md b/linkerd.io/content/2-edge/features/topology-aware-routing.md
index a92dfe12d1..2342588960 100644
--- a/linkerd.io/content/2-edge/features/topology-aware-routing.md
+++ b/linkerd.io/content/2-edge/features/topology-aware-routing.md
@@ -18,11 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
-
-(Topology aware routing is distinct from the `trafficDistribution` feature that
-appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
-Linkerd.)
+endpoints whose `hints.forZones` field matches the client's zone.
{{< note >}}
diff --git a/linkerd.io/content/2-edge/reference/cli/diagnostics.md b/linkerd.io/content/2-edge/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2-edge/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2-edge/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2-edge/reference/cli/multicluster.md b/linkerd.io/content/2-edge/reference/cli/multicluster.md
index 88c71c87ca..523191d82b 100644
--- a/linkerd.io/content/2-edge/reference/cli/multicluster.md
+++ b/linkerd.io/content/2-edge/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2-edge/reference/cli/viz.md b/linkerd.io/content/2-edge/reference/cli/viz.md
index cd3792a134..642bad742d 100644
--- a/linkerd.io/content/2-edge/reference/cli/viz.md
+++ b/linkerd.io/content/2-edge/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
@@ -154,6 +156,12 @@ Because retries are only performed on the _outbound_ (client) side, the
{{< docs/cli-description "viz tap" >}}
+{{< note >}}If a pod is configured with the annotations
+`config.linkerd.io/skip-inbound-ports` or
+`config.linkerd.io/skip-outbound-ports`, traffic on those ports bypasses the
+Linkerd proxy. Because `linkerd tap` observes traffic through the proxy,
+**traffic on skipped ports cannot be tapped**.{{< /note >}}
+
{{< docs/cli-examples "viz tap" >}}
{{< docs/cli-flags "viz tap" >}}
diff --git a/linkerd.io/content/2-edge/reference/k8s-versions.md b/linkerd.io/content/2-edge/reference/k8s-versions.md
index f26fd84b9d..e176729ac2 100644
--- a/linkerd.io/content/2-edge/reference/k8s-versions.md
+++ b/linkerd.io/content/2-edge/reference/k8s-versions.md
@@ -29,7 +29,7 @@ chart below as these situations arise.
| `2.16` | `1.22` | `1.29` |
| `2.17` | `1.22` | `1.31` |
| `2.18` | `1.22` | `1.32` |
-| `2.19` | `1.22` | `1.34` |
+| `2.19` | `1.22` | `1.35` |
{{< /keyval >}}
diff --git a/linkerd.io/content/2-edge/tasks/managing-egress-traffic.md b/linkerd.io/content/2-edge/tasks/managing-egress-traffic.md
index a43eadb61a..59f26aa612 100644
--- a/linkerd.io/content/2-edge/tasks/managing-egress-traffic.md
+++ b/linkerd.io/content/2-edge/tasks/managing-egress-traffic.md
@@ -70,7 +70,7 @@ Now SSH into the client container and start generating some external traffic:
```bash
kubectl -n egress-test exec -it client -c client -- sh
-$ while sleep 1; do curl -s http://httpbin.org/get ; done
+$ while sleep 1; do curl -s https://httpbin.org/get ; done
```
In a separate shell, you can use the Linkerd diagnostics command to visualize
@@ -458,7 +458,7 @@ Now let's verify all works as expected:
```bash
# plaintext traffic goes as expected to the /get path
-$ curl http://httpbin.org/get
+$ curl https://httpbin.org/get
{
"args": {},
"headers": {
@@ -468,7 +468,7 @@ $ curl http://httpbin.org/get
"X-Amzn-Trace-Id": "Root=1-674599d4-77a473943844e9e31844b48e"
},
"origin": "51.116.126.217",
- "url": "http://httpbin.org/get"
+ "url": "https://httpbin.org/get"
}
# encrypted traffic can target all paths and hosts
@@ -479,7 +479,7 @@ $ curl https://httpbin.org/ip
# arbitrary unencrypted traffic goes to the internal service
-$ curl http://google.com
+$ curl https://google.com
{
"requestUID": "in:http-sid:terminus-grpc:-1-h1:80-190120723",
"payload": "You cannot go there right now"}
diff --git a/linkerd.io/content/2.10/reference/cli/diagnostics.md b/linkerd.io/content/2.10/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.10/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.10/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.10/reference/cli/jaeger.md b/linkerd.io/content/2.10/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.10/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.10/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.10/reference/cli/multicluster.md b/linkerd.io/content/2.10/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.10/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.10/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.10/reference/cli/viz.md b/linkerd.io/content/2.10/reference/cli/viz.md
index 23f4287bb1..4dfe37e219 100644
--- a/linkerd.io/content/2.10/reference/cli/viz.md
+++ b/linkerd.io/content/2.10/reference/cli/viz.md
@@ -10,6 +10,8 @@ title: viz
## Subcommands
+{{< docs/cli-subcommands "viz" >}}
+
### check
{{< docs/cli-description "viz check" >}}
@@ -73,7 +75,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -88,7 +90,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -103,7 +105,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.11/reference/cli/diagnostics.md b/linkerd.io/content/2.11/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.11/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.11/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.11/reference/cli/jaeger.md b/linkerd.io/content/2.11/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.11/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.11/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.11/reference/cli/multicluster.md b/linkerd.io/content/2.11/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.11/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.11/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.11/reference/cli/viz.md b/linkerd.io/content/2.11/reference/cli/viz.md
index 23f4287bb1..4dfe37e219 100644
--- a/linkerd.io/content/2.11/reference/cli/viz.md
+++ b/linkerd.io/content/2.11/reference/cli/viz.md
@@ -10,6 +10,8 @@ title: viz
## Subcommands
+{{< docs/cli-subcommands "viz" >}}
+
### check
{{< docs/cli-description "viz check" >}}
@@ -73,7 +75,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -88,7 +90,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -103,7 +105,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.12/features/topology-aware-routing.md b/linkerd.io/content/2.12/features/topology-aware-routing.md
index 8b20b0fdf8..338a40806f 100644
--- a/linkerd.io/content/2.12/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.12/features/topology-aware-routing.md
@@ -18,11 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
-
-(Topology aware routing is distinct from the `trafficDistribution` feature that
-appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
-Linkerd.)
+endpoints whose `hints.forZones` field matches the client's zone.
To get started with topology aware routing take a look at the
[enabling topology aware routing](../tasks/enabling-topology-aware-routing/)
diff --git a/linkerd.io/content/2.12/reference/cli/diagnostics.md b/linkerd.io/content/2.12/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.12/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.12/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.12/reference/cli/jaeger.md b/linkerd.io/content/2.12/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.12/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.12/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.12/reference/cli/multicluster.md b/linkerd.io/content/2.12/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.12/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.12/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.12/reference/cli/viz.md b/linkerd.io/content/2.12/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.12/reference/cli/viz.md
+++ b/linkerd.io/content/2.12/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.13/features/topology-aware-routing.md b/linkerd.io/content/2.13/features/topology-aware-routing.md
index 8b20b0fdf8..e70a129c16 100644
--- a/linkerd.io/content/2.13/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.13/features/topology-aware-routing.md
@@ -18,7 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
+endpoints whose `hints.forZones` field matches the client's zone.
(Topology aware routing is distinct from the `trafficDistribution` feature that
appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
diff --git a/linkerd.io/content/2.13/reference/cli/diagnostics.md b/linkerd.io/content/2.13/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.13/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.13/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.13/reference/cli/jaeger.md b/linkerd.io/content/2.13/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.13/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.13/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.13/reference/cli/multicluster.md b/linkerd.io/content/2.13/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.13/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.13/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.13/reference/cli/viz.md b/linkerd.io/content/2.13/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.13/reference/cli/viz.md
+++ b/linkerd.io/content/2.13/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.14/features/topology-aware-routing.md b/linkerd.io/content/2.14/features/topology-aware-routing.md
index a92dfe12d1..077d82dd17 100644
--- a/linkerd.io/content/2.14/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.14/features/topology-aware-routing.md
@@ -18,7 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
+endpoints whose `hints.forZones` field matches the client's zone.
(Topology aware routing is distinct from the `trafficDistribution` feature that
appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
diff --git a/linkerd.io/content/2.14/reference/cli/diagnostics.md b/linkerd.io/content/2.14/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.14/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.14/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.14/reference/cli/jaeger.md b/linkerd.io/content/2.14/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.14/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.14/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.14/reference/cli/multicluster.md b/linkerd.io/content/2.14/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.14/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.14/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.14/reference/cli/viz.md b/linkerd.io/content/2.14/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.14/reference/cli/viz.md
+++ b/linkerd.io/content/2.14/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.15/features/topology-aware-routing.md b/linkerd.io/content/2.15/features/topology-aware-routing.md
index a92dfe12d1..077d82dd17 100644
--- a/linkerd.io/content/2.15/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.15/features/topology-aware-routing.md
@@ -18,7 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
+endpoints whose `hints.forZones` field matches the client's zone.
(Topology aware routing is distinct from the `trafficDistribution` feature that
appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
diff --git a/linkerd.io/content/2.15/reference/cli/diagnostics.md b/linkerd.io/content/2.15/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.15/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.15/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.15/reference/cli/jaeger.md b/linkerd.io/content/2.15/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.15/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.15/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.15/reference/cli/multicluster.md b/linkerd.io/content/2.15/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.15/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.15/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.15/reference/cli/viz.md b/linkerd.io/content/2.15/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.15/reference/cli/viz.md
+++ b/linkerd.io/content/2.15/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.16/features/topology-aware-routing.md b/linkerd.io/content/2.16/features/topology-aware-routing.md
index a92dfe12d1..077d82dd17 100644
--- a/linkerd.io/content/2.16/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.16/features/topology-aware-routing.md
@@ -18,7 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
+endpoints whose `hints.forZones` field matches the client's zone.
(Topology aware routing is distinct from the `trafficDistribution` feature that
appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
diff --git a/linkerd.io/content/2.16/reference/cli/diagnostics.md b/linkerd.io/content/2.16/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.16/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.16/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.16/reference/cli/jaeger.md b/linkerd.io/content/2.16/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.16/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.16/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.16/reference/cli/multicluster.md b/linkerd.io/content/2.16/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.16/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.16/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.16/reference/cli/viz.md b/linkerd.io/content/2.16/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.16/reference/cli/viz.md
+++ b/linkerd.io/content/2.16/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.17/features/topology-aware-routing.md b/linkerd.io/content/2.17/features/topology-aware-routing.md
index a92dfe12d1..2342588960 100644
--- a/linkerd.io/content/2.17/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.17/features/topology-aware-routing.md
@@ -18,11 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
-
-(Topology aware routing is distinct from the `trafficDistribution` feature that
-appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
-Linkerd.)
+endpoints whose `hints.forZones` field matches the client's zone.
{{< note >}}
diff --git a/linkerd.io/content/2.17/reference/cli/diagnostics.md b/linkerd.io/content/2.17/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.17/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.17/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.17/reference/cli/jaeger.md b/linkerd.io/content/2.17/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.17/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.17/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.17/reference/cli/multicluster.md b/linkerd.io/content/2.17/reference/cli/multicluster.md
index 912d45cab0..519ba5b57e 100644
--- a/linkerd.io/content/2.17/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.17/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.17/reference/cli/viz.md b/linkerd.io/content/2.17/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.17/reference/cli/viz.md
+++ b/linkerd.io/content/2.17/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.17/tasks/managing-egress-traffic.md b/linkerd.io/content/2.17/tasks/managing-egress-traffic.md
index d77f290917..fd9e886cbb 100644
--- a/linkerd.io/content/2.17/tasks/managing-egress-traffic.md
+++ b/linkerd.io/content/2.17/tasks/managing-egress-traffic.md
@@ -69,7 +69,7 @@ Now SSH into the client container and start generating some external traffic:
```bash
kubectl -n egress-test exec -it client-xxx -c client -- sh
-$ while sleep 1; do curl -s http://httpbin.org/get ; done
+$ while sleep 1; do curl -s https://httpbin.org/get ; done
```
In a separate shell, you can use the Linkerd diagnostics command to visualize
@@ -413,7 +413,7 @@ Now let's verify all works as expected:
```bash
# plaintext traffic goes as expected to the /get path
-$ curl http://httpbin.org/get
+$ curl https://httpbin.org/get
{
"args": {},
"headers": {
@@ -423,7 +423,7 @@ $ curl http://httpbin.org/get
"X-Amzn-Trace-Id": "Root=1-674599d4-77a473943844e9e31844b48e"
},
"origin": "51.116.126.217",
- "url": "http://httpbin.org/get"
+ "url": "https://httpbin.org/get"
}
# encrypted traffic can target all paths and hosts
@@ -434,7 +434,7 @@ $ curl https://httpbin.org/ip
# arbitrary unencrypted traffic goes to the internal service
-$ curl http://google.com
+$ curl https://google.com
{
"requestUID": "in:http-sid:terminus-grpc:-1-h1:80-190120723",
"payload": "You cannot go there right now"}
diff --git a/linkerd.io/content/2.18/features/topology-aware-routing.md b/linkerd.io/content/2.18/features/topology-aware-routing.md
index a92dfe12d1..2342588960 100644
--- a/linkerd.io/content/2.18/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.18/features/topology-aware-routing.md
@@ -18,11 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
-
-(Topology aware routing is distinct from the `trafficDistribution` feature that
-appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
-Linkerd.)
+endpoints whose `hints.forZones` field matches the client's zone.
{{< note >}}
diff --git a/linkerd.io/content/2.18/reference/cli/diagnostics.md b/linkerd.io/content/2.18/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.18/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.18/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.18/reference/cli/jaeger.md b/linkerd.io/content/2.18/reference/cli/jaeger.md
index a4792690c3..1301361532 100644
--- a/linkerd.io/content/2.18/reference/cli/jaeger.md
+++ b/linkerd.io/content/2.18/reference/cli/jaeger.md
@@ -10,6 +10,8 @@ title: jaeger
## Subcommands
+{{< docs/cli-subcommands "jaeger" >}}
+
### check
{{< docs/cli-description "jaeger check" >}}
diff --git a/linkerd.io/content/2.18/reference/cli/multicluster.md b/linkerd.io/content/2.18/reference/cli/multicluster.md
index 88c71c87ca..523191d82b 100644
--- a/linkerd.io/content/2.18/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.18/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.18/reference/cli/viz.md b/linkerd.io/content/2.18/reference/cli/viz.md
index cd3792a134..2477e875ba 100644
--- a/linkerd.io/content/2.18/reference/cli/viz.md
+++ b/linkerd.io/content/2.18/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
diff --git a/linkerd.io/content/2.18/tasks/managing-egress-traffic.md b/linkerd.io/content/2.18/tasks/managing-egress-traffic.md
index a43eadb61a..59f26aa612 100644
--- a/linkerd.io/content/2.18/tasks/managing-egress-traffic.md
+++ b/linkerd.io/content/2.18/tasks/managing-egress-traffic.md
@@ -70,7 +70,7 @@ Now SSH into the client container and start generating some external traffic:
```bash
kubectl -n egress-test exec -it client -c client -- sh
-$ while sleep 1; do curl -s http://httpbin.org/get ; done
+$ while sleep 1; do curl -s https://httpbin.org/get ; done
```
In a separate shell, you can use the Linkerd diagnostics command to visualize
@@ -458,7 +458,7 @@ Now let's verify all works as expected:
```bash
# plaintext traffic goes as expected to the /get path
-$ curl http://httpbin.org/get
+$ curl https://httpbin.org/get
{
"args": {},
"headers": {
@@ -468,7 +468,7 @@ $ curl http://httpbin.org/get
"X-Amzn-Trace-Id": "Root=1-674599d4-77a473943844e9e31844b48e"
},
"origin": "51.116.126.217",
- "url": "http://httpbin.org/get"
+ "url": "https://httpbin.org/get"
}
# encrypted traffic can target all paths and hosts
@@ -479,7 +479,7 @@ $ curl https://httpbin.org/ip
# arbitrary unencrypted traffic goes to the internal service
-$ curl http://google.com
+$ curl https://google.com
{
"requestUID": "in:http-sid:terminus-grpc:-1-h1:80-190120723",
"payload": "You cannot go there right now"}
diff --git a/linkerd.io/content/2.19/features/topology-aware-routing.md b/linkerd.io/content/2.19/features/topology-aware-routing.md
index a92dfe12d1..2342588960 100644
--- a/linkerd.io/content/2.19/features/topology-aware-routing.md
+++ b/linkerd.io/content/2.19/features/topology-aware-routing.md
@@ -18,11 +18,7 @@ prefer endpoints by basing decisions solely off the node's
`topology.kubernetes.io/zone` label. If a client is in `zone-a`, then it should
prefer endpoints marked for use by clients in `zone-a`. When the feature is
enabled and the label set, Linkerd's destination controller will attempt to find
-endpoints whose `routing.ForZones` field matches the client's zone.
-
-(Topology aware routing is distinct from the `trafficDistribution` feature that
-appears in Kubernetes 1.31. `trafficDistribution` is not yet supported by
-Linkerd.)
+endpoints whose `hints.forZones` field matches the client's zone.
{{< note >}}
diff --git a/linkerd.io/content/2.19/reference/cli/diagnostics.md b/linkerd.io/content/2.19/reference/cli/diagnostics.md
index 740a753b09..ffa45c39be 100644
--- a/linkerd.io/content/2.19/reference/cli/diagnostics.md
+++ b/linkerd.io/content/2.19/reference/cli/diagnostics.md
@@ -10,6 +10,8 @@ title: diagnostics
## Subcommands
+{{< docs/cli-subcommands "diagnostics" >}}
+
### controller-metrics
{{< docs/cli-description "diagnostics controller-metrics" >}}
diff --git a/linkerd.io/content/2.19/reference/cli/multicluster.md b/linkerd.io/content/2.19/reference/cli/multicluster.md
index 88c71c87ca..523191d82b 100644
--- a/linkerd.io/content/2.19/reference/cli/multicluster.md
+++ b/linkerd.io/content/2.19/reference/cli/multicluster.md
@@ -10,6 +10,8 @@ title: multicluster
## Subcommands
+{{< docs/cli-subcommands "multicluster" >}}
+
### allow
{{< docs/cli-description "multicluster allow" >}}
diff --git a/linkerd.io/content/2.19/reference/cli/viz.md b/linkerd.io/content/2.19/reference/cli/viz.md
index cd3792a134..642bad742d 100644
--- a/linkerd.io/content/2.19/reference/cli/viz.md
+++ b/linkerd.io/content/2.19/reference/cli/viz.md
@@ -10,7 +10,9 @@ title: viz
## Subcommands
-## allow-scrapes
+{{< docs/cli-subcommands "viz" >}}
+
+### allow-scrapes
{{< docs/cli-description "viz allow-scrapes" >}}
@@ -18,7 +20,7 @@ title: viz
{{< docs/cli-flags "viz allow-scrapes" >}}
-## authz
+### authz
{{< docs/cli-description "viz authz" >}}
@@ -89,7 +91,7 @@ that is receiving the requests. For more information about how to create a
service profile, see [service profiles](../../features/service-profiles/). and
the [profile](profile) command reference.
-## Inbound Metrics
+#### Inbound Metrics
By default, `routes` displays _inbound_ metrics for a target. In other words, it
shows information about requests which are sent to the target and responses
@@ -104,7 +106,7 @@ Displays the request volume, success rate, and latency of requests to the
perspective, which means that, for example, these latencies do not include the
network latency between a client and the `webapp` deployment.
-## Outbound Metrics
+#### Outbound Metrics
If you specify the `--to` flag then `linkerd viz routes` displays _outbound_
metrics from the target resource to the resource in the `--to` flag. In contrast
@@ -119,7 +121,7 @@ linkerd viz routes deploy/traffic --to deploy/webapp
Displays the request volume, success rate, and latency of requests from
`traffic` to `webapp` from the perspective of the `traffic` deployment.
-## Effective and Actual Metrics
+#### Effective and Actual Metrics
If you are looking at _outbound_ metrics (by specifying the `--to` flag) you can
also supply the `-o wide` flag to differentiate between _effective_ and _actual_
@@ -154,6 +156,12 @@ Because retries are only performed on the _outbound_ (client) side, the
{{< docs/cli-description "viz tap" >}}
+{{< note >}}If a pod is configured with the annotations
+`config.linkerd.io/skip-inbound-ports` or
+`config.linkerd.io/skip-outbound-ports`, traffic on those ports bypasses the
+Linkerd proxy. Because `linkerd tap` observes traffic through the proxy,
+**traffic on skipped ports cannot be tapped**.{{< /note >}}
+
{{< docs/cli-examples "viz tap" >}}
{{< docs/cli-flags "viz tap" >}}
diff --git a/linkerd.io/content/2.19/reference/k8s-versions.md b/linkerd.io/content/2.19/reference/k8s-versions.md
index 220361f2bb..09d9110ee8 100644
--- a/linkerd.io/content/2.19/reference/k8s-versions.md
+++ b/linkerd.io/content/2.19/reference/k8s-versions.md
@@ -29,7 +29,7 @@ chart below as these situations arise.
| `2.16` | `1.22` | `1.29` |
| `2.17` | `1.22` | `1.31` |
| `2.18` | `1.22` | `1.32` |
-| `2.19` | `1.29` | `1.34` |
+| `2.19` | `1.29` | `1.35` |
{{< /keyval >}}
diff --git a/linkerd.io/content/2.19/tasks/managing-egress-traffic.md b/linkerd.io/content/2.19/tasks/managing-egress-traffic.md
index a43eadb61a..59f26aa612 100644
--- a/linkerd.io/content/2.19/tasks/managing-egress-traffic.md
+++ b/linkerd.io/content/2.19/tasks/managing-egress-traffic.md
@@ -70,7 +70,7 @@ Now SSH into the client container and start generating some external traffic:
```bash
kubectl -n egress-test exec -it client -c client -- sh
-$ while sleep 1; do curl -s http://httpbin.org/get ; done
+$ while sleep 1; do curl -s https://httpbin.org/get ; done
```
In a separate shell, you can use the Linkerd diagnostics command to visualize
@@ -458,7 +458,7 @@ Now let's verify all works as expected:
```bash
# plaintext traffic goes as expected to the /get path
-$ curl http://httpbin.org/get
+$ curl https://httpbin.org/get
{
"args": {},
"headers": {
@@ -468,7 +468,7 @@ $ curl http://httpbin.org/get
"X-Amzn-Trace-Id": "Root=1-674599d4-77a473943844e9e31844b48e"
},
"origin": "51.116.126.217",
- "url": "http://httpbin.org/get"
+ "url": "https://httpbin.org/get"
}
# encrypted traffic can target all paths and hosts
@@ -479,7 +479,7 @@ $ curl https://httpbin.org/ip
# arbitrary unencrypted traffic goes to the internal service
-$ curl http://google.com
+$ curl https://google.com
{
"requestUID": "in:http-sid:terminus-grpc:-1-h1:80-190120723",
"payload": "You cannot go there right now"}
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/bezaleel-silva.jpg b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/bezaleel-silva.jpg
new file mode 100644
index 0000000000..feb722a872
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/bezaleel-silva.jpg differ
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/communication-flow.webp b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/communication-flow.webp
new file mode 100644
index 0000000000..de0f9b3038
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/communication-flow.webp differ
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/cover.jpg b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/cover.jpg
new file mode 100644
index 0000000000..f5b2d9cb15
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/cover.jpg differ
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/destination-api.webp b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/destination-api.webp
new file mode 100644
index 0000000000..972e5946e9
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/destination-api.webp differ
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/index.md b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/index.md
new file mode 100644
index 0000000000..8efb3d16d1
--- /dev/null
+++ b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/index.md
@@ -0,0 +1,150 @@
+---
+date: 2026-02-26T00:00:00Z
+title: |-
+ Deep Dive: How linkerd-destination works in the Linkerd Service Mesh
+keywords: [linkerd, control-plane, linkerd-destination, "destination service"]
+params:
+ author:
+ name: Bezaleel Silva, Linkerd Ambassador
+ avatar: bezaleel-silva.jpg
+ showCover: true
+images: [social.jpg] # Open graph image
+---
+
+_This blog post was originally published on
+[Bezaleel Silva’s Medium blog](https://medium.com/@bezarsnba/deep-dive-the-linkerd-destination-service-en-19f6efd1b308)._
+
+Recently, in our daily operations, we took a deep dive into the inner workings
+of **linkerd-destination**, one of the most critical components of the Linkerd
+control plane.
+
+The motivation was simple: as our cluster grew and traffic increased, the
+question shifted from “Does Linkerd work?” to “**How exactly does it react when
+everything changes at once?**”. Frequent deployments, production scaling,
+security policies being applied — and at the center of all this, the
+_destination_ service.
+
+Throughout this analysis, I connected code reviews, observed behavior in
+production, and documented references. To organize this process, I used the
+**Zettelkasten method**, stitching together atomic ideas until a clear vision of
+the intelligence behind the mesh was formed. This article is the result of that
+synthesis. Shall we dive in?
+
+## Where the Magic Happens: The Role of linkerd-destination
+
+Modern microservices architecture requires a dedicated infrastructure layer to
+manage communication: the **Service Mesh**. Linkerd, a pioneer in this space,
+stands out for its operational simplicity and high performance.
+
+To understand how Linkerd works in practice, it is essential to dissect its
+**Control Plane**, specifically the **linkerd-destination** component. It acts
+as the central routing and policy authority for the entire mesh. It is
+responsible for translating the dynamic state of Kubernetes into actionable
+decisions propagated, in real-time, to thousands of proxies. Its three core
+functions are:
+
+- **Service Discovery:** Translates logical DNS names into sets of actual
+ endpoints, enriching each address with metadata (_mTLS identity,
+ locality/zone, and protocol_).
+- **Policy Distribution:** Informs proxies which connections are authorized,
+ based on modern resources like the Gateway API and policy CRDs (_Server,
+ AuthorizationPolicy_).
+- **Service Profiles (L7 Configuration):** Provides advanced Layer 7 rules, such
+ as regex-based routes, retry budgets, and timeouts.
+
+To visualize how this orchestration occurs between components, the diagram below
+illustrates the communication flow between the control plane and the proxies in
+the data plane:
+
+
+
+It is crucial to note the impact of a **Degraded State**: should the
+_destination_ service fail, proxies will continue to operate using their last
+known configuration (_caching_). However, the cluster loses its ability to react
+to new deployments or immediate security policy changes, as the update channel
+illustrated above would be interrupted.
+
+## Internal Architecture: Separation of Concerns
+
+To understand the behavior of **linkerd-destination** at scale, we must look
+inside the pod itself. Far from being a monolithic controller, Linkerd maintains
+a clear separation of concerns distributed across multiple cooperating
+containers.
+
+The following diagram details how the Destination API is internally divided to
+simultaneously process discovery, profiles, and authorization policies:
+
+
+
+1. **Destination Container: The Heart (Go)** Implemented in Go, it functions as
+ an event-driven controller. It utilizes the _Informer/Reflector_ pattern from
+ the `client-go` library, avoiding expensive polling against the Kubernetes
+ API.
+1. **SP-Validator Container: The Guardian Acts** as a **Validating Admission
+ Webhook**, blocking syntax errors in _Service Profiles_ before they reach
+ etcd.
+1. **Policy Container: The Judge** Evaluates security policies
+ (_MeshTLSAuthentication_) in a decoupled manner.
+1. **The Proxy in the Proxy** The _destination_ pod itself has an injected
+ _linkerd-proxy_. This ensures that control plane traffic is secured by mTLS
+ and fully observable.
+
+## Performance Engineering: Events and Translation
+
+The _destination_ service does not periodically query the API; it reacts to
+**Watches**. When a Pod comes online, an event is triggered and processed by the
+**EndpointTranslator**.
+
+This “brain” enriches raw Kubernetes data by cross-referencing IPs to extract
+identities and identifying availability zones to optimize routing. Furthermore,
+the use of **EndpointSlices** allows the system to process only “deltas”
+(partial changes), which is vital for the health of the system in large-scale
+clusters.
+
+### Destination API and gRPC Streaming
+
+The interface between the proxy and the _destination_ is a continuous flow. When
+calling `destination.Get()`, the server keeps the stream open and sends:
+
+- **Initial Batch:** The full state at the moment of connection.
+- **Incremental Updates:** Only the deltas (_add / remove_).
+- **NoEndpoints:** A critical message that triggers the proxy to execute **fail
+ fast** if no healthy instances are available.
+
+The sequence diagram below summarizes this lifecycle, demonstrating the
+efficiency of push-based communication:
+
+
+
+## Observability: What to monitor?
+
+During our deep dive, we identified specific signals that act as the “EKG” of
+the control plane:
+
+- **`services_informer_lag_seconds`:** The delay between a change in K8s and
+ Linkerd’s perception of it.
+- **`endpoint_updates_queue_overflow`:** If greater than 0, it indicates the
+ system is dropping updates due to saturation.
+- **`grpc_server_handled_total`:** Check for an increase in error codes
+ (anything other than `OK`).
+- **`proxy_inject_admission_responses_total`:** Reveals the success rate of
+ sidecar injections across the cluster.
+- **`control_response_total`:** Provides the real-time success rate of control
+ plane responses.
+- **`identity_cert_expiration_timestamp_seconds`:** The security countdown.
+ Ignoring this metric means accepting the risk of total downtime due to expired
+ mTLS certificates.
+
+_Note: You can obtain additional metrics using the command:
+`$ linkerd diagnostics controller-metrics`_
+
+## Conclusion
+
+The **linkerd-destination** service is the junction point between the dynamism
+of Kubernetes and the predictability of a service mesh. Understanding its
+event-driven architecture and the role of the **EndpointTranslator** is
+essential for operating Linkerd with confidence in high-scale environments.
+
+If you operate Linkerd in production or have ever needed to investigate control
+plane behavior under load, understanding the _destination_ component completely
+changes the way you debug and scale the mesh.
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/lifecycle.webp b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/lifecycle.webp
new file mode 100644
index 0000000000..7944418e3b
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/lifecycle.webp differ
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/social.jpg b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/social.jpg
new file mode 100644
index 0000000000..55e5a1d179
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/social.jpg differ
diff --git a/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/thumbnail.jpg b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/thumbnail.jpg
new file mode 100644
index 0000000000..437fd390a2
Binary files /dev/null and b/linkerd.io/content/blog/2026/0226-deep-dive-the-linkerd-destination-service/thumbnail.jpg differ
diff --git a/linkerd.io/content/blog/_index.md b/linkerd.io/content/blog/_index.md
index c1fc3d3128..a08de6416e 100644
--- a/linkerd.io/content/blog/_index.md
+++ b/linkerd.io/content/blog/_index.md
@@ -8,6 +8,6 @@ outputs:
- RSS # Enable RSS
params:
feature:
+ - /blog/2026/0226-deep-dive-the-linkerd-destination-service
- /blog/2026/0209-protocol-detection
- - /blog/2025/1031-announcing-linkerd-2.19
---
diff --git a/linkerd.io/content/community/ambassadors/_index.md b/linkerd.io/content/community/ambassadors/_index.md
index 8bdaa2523b..3c76777959 100644
--- a/linkerd.io/content/community/ambassadors/_index.md
+++ b/linkerd.io/content/community/ambassadors/_index.md
@@ -58,14 +58,6 @@ params:
github: https://github.com/Eli-Goldberg
twitter: https://twitter.com/EliG0ldberg
linkedin: https://www.linkedin.com/in/eli-go/
- - name: Fredrik Klingenberg
- role: Developer
- image: images/fredrik-klingenberg.jpg
- flag: 🇳🇴
- urls:
- github: https://github.com/fredrkl
- twitter: https://twitter.com/fredrkl
- linkedin: https://www.linkedin.com/in/fredrikklingenberg/
- name: Mahendran Selvakumar
role: DevOps Engineer
image: images/mahendran-selvakumar.jpg
@@ -91,6 +83,14 @@ params:
urls:
github: https://github.com/cpretzer
linkedin: https://www.linkedin.com/in/charlespretzer/
+ - name: Fredrik Klingenberg
+ role: Developer
+ image: images/fredrik-klingenberg.jpg
+ flag: 🇳🇴
+ urls:
+ github: https://github.com/fredrkl
+ twitter: https://twitter.com/fredrkl
+ linkedin: https://www.linkedin.com/in/fredrikklingenberg/
- name: Kasper Nissen
role: Lead Platform Architect
image: images/kasper-nissen.jpg
diff --git a/linkerd.io/content/enterprise/_index.md b/linkerd.io/content/enterprise/_index.md
index daf67786b3..0d5986b9cd 100644
--- a/linkerd.io/content/enterprise/_index.md
+++ b/linkerd.io/content/enterprise/_index.md
@@ -51,6 +51,14 @@ params:
button:
href: https://www.infracloud.io/linkerd-support/
text: Learn more
+ - title: Linkerd consulting, implementation, and service mesh support
+ content: |-
+ - Linkerd service mesh consulting and implementation
+ - Traffic management, mTLS, and observability for Kubernetes
+ image: images/procedure.svg
+ button:
+ href: https://procedure.tech/services/linkerd-consulting
+ text: Learn more
- title: Training
items:
- title: Buoyant Service Mesh Academy
diff --git a/linkerd.io/content/enterprise/images/procedure.svg b/linkerd.io/content/enterprise/images/procedure.svg
new file mode 100644
index 0000000000..f7792fa351
--- /dev/null
+++ b/linkerd.io/content/enterprise/images/procedure.svg
@@ -0,0 +1,32 @@
+
+
\ No newline at end of file
diff --git a/linkerd.io/layouts/partials/head-css.html b/linkerd.io/layouts/partials/head-css.html
index 658a066f6a..1552c9eea2 100644
--- a/linkerd.io/layouts/partials/head-css.html
+++ b/linkerd.io/layouts/partials/head-css.html
@@ -4,7 +4,7 @@
{{ end }}
{{ end }}
{{ with resources.Get "scss/main.scss" }}
- {{ $css := . | toCSS (dict "transpiler" "libsass" "targetPath" "css/main.css") }}
+ {{ $css := . | toCSS (dict "transpiler" "dartsass" "targetPath" "css/main.css") }}
{{ if hugo.IsProduction }}
{{ $css = $css | minify | fingerprint }}
{{ end }}
diff --git a/linkerd.io/layouts/shortcodes/docs/cli-examples.html b/linkerd.io/layouts/shortcodes/docs/cli-examples.html
index 29e2eb3360..7606004a20 100644
--- a/linkerd.io/layouts/shortcodes/docs/cli-examples.html
+++ b/linkerd.io/layouts/shortcodes/docs/cli-examples.html
@@ -4,9 +4,9 @@
{{- /* Output data */}}
{{ range where $data.CLIReference "Name" (.Get 0) }}
{{ with .Example }}
-
+
Examples
-
+
{{ highlight (replaceRE "(?m)^[ ]{2}" "" .) "bash" }}
{{ end }}
{{ end }}
diff --git a/linkerd.io/layouts/shortcodes/docs/cli-flags.html b/linkerd.io/layouts/shortcodes/docs/cli-flags.html
index 7a3cfe7562..eed07be98d 100644
--- a/linkerd.io/layouts/shortcodes/docs/cli-flags.html
+++ b/linkerd.io/layouts/shortcodes/docs/cli-flags.html
@@ -5,9 +5,9 @@
{{ range where $data.CLIReference "Name" (.Get 0) }}
{{ $opts := where .Options "Name" "!=" "help" }}
{{ if ge (len $opts) 1 }}
-
+
Flags
-
+
diff --git a/linkerd.io/layouts/shortcodes/docs/cli-subcommands.html b/linkerd.io/layouts/shortcodes/docs/cli-subcommands.html
new file mode 100644
index 0000000000..e6777a9fd0
--- /dev/null
+++ b/linkerd.io/layouts/shortcodes/docs/cli-subcommands.html
@@ -0,0 +1,37 @@
+{{- /* Get the CLI data file for the current linkerd version */}}
+{{- $file := replace .Page.Section "." "-" }}
+{{- $data := index site.Data.cli $file }}
+{{- $cmd := .Get 0 }}
+{{- /* Output data */}}
+{{ if $cmd }}
+
+
+
+ |
+ Subcommand
+ |
+
+ Description
+ |
+
+
+
+ {{ range $data.CLIReference }}
+ {{ if hasPrefix .Name (printf "%s " $cmd) }}
+ {{ $subcmd := index (split .Name " ") 1 }}
+ {{ $href := printf "#%s" $subcmd }}
+
+
+
+ {{ $subcmd }}
+
+ |
+
+ {{ .Synopsis | markdownify }}
+ |
+
+ {{ end }}
+ {{ end }}
+
+
+{{ end }}