diff --git a/annotation/annotations.gen.go b/annotation/annotations.gen.go index 5e0c956f2e..ed7e0e1634 100644 --- a/annotation/annotations.gen.go +++ b/annotation/annotations.gen.go @@ -313,6 +313,24 @@ Note: When using docker-in-docker container, the default bridge interface name i }, } + IoIstioUseWaypointCanaryWeight = Instance { + Name: "istio.io/use-waypoint-canary-weight", + Description: `Sets the percentage (0-100) of a service's traffic that is shifted to its canary waypoint +("istio.io/use-waypoint-canary"). The remainder continues to the primary +"istio.io/use-waypoint". Defaults to 0 (canary resolved but receives no traffic) when unset. +A value of 100 sends all traffic to the canary (a transient promotion step). Invalid values +(non-integer or outside 0-100) are rejected and the service stays on the primary waypoint. +`, + FeatureStatus: Alpha, + Hidden: false, + Deprecated: false, + Resources: []ResourceTypes{ + Service, + ServiceEntry, + Namespace, + }, + } + IoIstioWorkloadController = Instance { Name: "istio.io/workloadController", Description: "On a WorkloadEntry should store the current/last pilot "+ @@ -983,6 +1001,7 @@ func AllResourceAnnotations() []*Instance { &IoIstioDryRun, &IoIstioRerouteVirtualInterfaces, &IoIstioRev, + &IoIstioUseWaypointCanaryWeight, &IoIstioWorkloadController, &IoKubernetesIngressClass, &NetworkingExportTo, diff --git a/annotation/annotations.pb.html b/annotation/annotations.pb.html index 47ca3c002e..066db18e0d 100644 --- a/annotation/annotations.pb.html +++ b/annotation/annotations.pb.html @@ -167,6 +167,32 @@

istio.io/rev

+

istio.io/use-waypoint-canary-weight

+ + + + + + + + + + + + + + + + + + + +
Nameistio.io/use-waypoint-canary-weight
Feature StatusAlpha
Resource Types[Service ServiceEntry Namespace]
Description

Sets the percentage (0-100) of a service’s traffic that is shifted to its canary waypoint +(istio.io/use-waypoint-canary). The remainder continues to the primary +istio.io/use-waypoint. Defaults to 0 (canary resolved but receives no traffic) when unset. +A value of 100 sends all traffic to the canary (a transient promotion step). Invalid values +(non-integer or outside 0-100) are rejected and the service stays on the primary waypoint.

+

kubernetes.io/ingress.class

diff --git a/annotation/annotations.yaml b/annotation/annotations.yaml index cdc71a01ef..5ec419c813 100644 --- a/annotation/annotations.yaml +++ b/annotation/annotations.yaml @@ -597,6 +597,21 @@ annotations: - Service - ServiceEntry + - name: istio.io/use-waypoint-canary-weight + featureStatus: Alpha + description: | + Sets the percentage (0-100) of a service's traffic that is shifted to its canary waypoint + (`istio.io/use-waypoint-canary`). The remainder continues to the primary + `istio.io/use-waypoint`. Defaults to 0 (canary resolved but receives no traffic) when unset. + A value of 100 sends all traffic to the canary (a transient promotion step). Invalid values + (non-integer or outside 0-100) are rejected and the service stays on the primary waypoint. + deprecated: false + hidden: false + resources: + - Service + - ServiceEntry + - Namespace + - name: ambient.istio.io/bypass-inbound-capture featureStatus: Alpha description: | diff --git a/label/labels.gen.go b/label/labels.gen.go index eef706fb16..a916ed1ea1 100644 --- a/label/labels.gen.go +++ b/label/labels.gen.go @@ -231,6 +231,45 @@ Note: the waypoint must allow the type, see "istio.io/waypoint-for". }, } + IoIstioUseWaypointCanary = Instance { + Name: "istio.io/use-waypoint-canary", + Description: `When set on a "Service" or "ServiceEntry" (or its "Namespace"), names a second, canary waypoint for the +service in addition to the primary "istio.io/use-waypoint". A configurable percentage of the +service's in-mesh (and, with "istio.io/ingress-use-waypoint", ingress) traffic is shifted to +this canary waypoint, controlled by the "istio.io/use-waypoint-canary-weight" annotation. +This is the migration primitive for canarying a service between two waypoints (for example +two waypoint revisions, or two waypoint implementations). + +The canary is assumed to be in the same namespace; for cross-namespace, see +"istio.io/use-waypoint-canary-namespace". The canary waypoint must allow the type, see +"istio.io/waypoint-for". +`, + FeatureStatus: Alpha, + Hidden: false, + Deprecated: false, + Resources: []ResourceTypes{ + Service, + ServiceEntry, + Namespace, + }, + } + + IoIstioUseWaypointCanaryNamespace = Instance { + Name: "istio.io/use-waypoint-canary-namespace", + Description: `When set on a resource, indicates the canary waypoint ("istio.io/use-waypoint-canary") is in +the provided namespace. This must be set in addition to "istio.io/use-waypoint-canary", when a +cross-namespace reference is desired. +`, + FeatureStatus: Alpha, + Hidden: false, + Deprecated: false, + Resources: []ResourceTypes{ + Service, + ServiceEntry, + Namespace, + }, + } + IoIstioUseWaypointNamespace = Instance { Name: "istio.io/use-waypoint-namespace", Description: `When set on a resource, indicates the resource has an associated waypoint in the provided namespace. @@ -499,6 +538,8 @@ func AllResourceLabels() []*Instance { &IoIstioRev, &IoIstioTag, &IoIstioUseWaypoint, + &IoIstioUseWaypointCanary, + &IoIstioUseWaypointCanaryNamespace, &IoIstioUseWaypointNamespace, &IoIstioWaypointFor, &NetworkingEnableAutoallocateIp, diff --git a/label/labels.pb.html b/label/labels.pb.html index a8fbfd672a..cb2b1a922f 100644 --- a/label/labels.pb.html +++ b/label/labels.pb.html @@ -192,6 +192,61 @@

istio.io/use-waypoint

+

istio.io/use-waypoint-canary

+ + + + + + + + + + + + + + + + + + + +
Nameistio.io/use-waypoint-canary
Feature StatusAlpha
Resource Types[Service ServiceEntry Namespace]
Description

When set on a Service or ServiceEntry (or its Namespace), names a second, canary waypoint for the +service in addition to the primary istio.io/use-waypoint. A configurable percentage of the +service’s in-mesh (and, with istio.io/ingress-use-waypoint, ingress) traffic is shifted to +this canary waypoint, controlled by the istio.io/use-waypoint-canary-weight annotation. +This is the migration primitive for canarying a service between two waypoints (for example +two waypoint revisions, or two waypoint implementations).

+ +

The canary is assumed to be in the same namespace; for cross-namespace, see +istio.io/use-waypoint-canary-namespace. The canary waypoint must allow the type, see +istio.io/waypoint-for.

+
+

istio.io/use-waypoint-canary-namespace

+ + + + + + + + + + + + + + + + + + + +
Nameistio.io/use-waypoint-canary-namespace
Feature StatusAlpha
Resource Types[Service ServiceEntry Namespace]
Description

When set on a resource, indicates the canary waypoint (istio.io/use-waypoint-canary) is in +the provided namespace. This must be set in addition to istio.io/use-waypoint-canary, when a +cross-namespace reference is desired.

+

istio.io/use-waypoint-namespace

diff --git a/label/labels.yaml b/label/labels.yaml index a6ed1b7c00..0f94169c1f 100644 --- a/label/labels.yaml +++ b/label/labels.yaml @@ -265,6 +265,39 @@ labels: - ServiceEntry - Namespace + - name: istio.io/use-waypoint-canary + featureStatus: Alpha + description: | + When set on a `Service` or `ServiceEntry` (or its `Namespace`), names a second, canary waypoint for the + service in addition to the primary `istio.io/use-waypoint`. A configurable percentage of the + service's in-mesh (and, with `istio.io/ingress-use-waypoint`, ingress) traffic is shifted to + this canary waypoint, controlled by the `istio.io/use-waypoint-canary-weight` annotation. + This is the migration primitive for canarying a service between two waypoints (for example + two waypoint revisions, or two waypoint implementations). + + The canary is assumed to be in the same namespace; for cross-namespace, see + `istio.io/use-waypoint-canary-namespace`. The canary waypoint must allow the type, see + `istio.io/waypoint-for`. + deprecated: false + hidden: false + resources: + - Service + - ServiceEntry + - Namespace + + - name: istio.io/use-waypoint-canary-namespace + featureStatus: Alpha + description: | + When set on a resource, indicates the canary waypoint (`istio.io/use-waypoint-canary`) is in + the provided namespace. This must be set in addition to `istio.io/use-waypoint-canary`, when a + cross-namespace reference is desired. + deprecated: false + hidden: false + resources: + - Service + - ServiceEntry + - Namespace + - name: istio.io/ingress-use-waypoint featureStatus: Beta descriptions: | diff --git a/releasenotes/notes/weighted-waypoint-canary.yaml b/releasenotes/notes/weighted-waypoint-canary.yaml new file mode 100644 index 0000000000..40eb5b738b --- /dev/null +++ b/releasenotes/notes/weighted-waypoint-canary.yaml @@ -0,0 +1,13 @@ +apiVersion: release-notes/v2 +kind: feature +area: traffic-management +issue: + - 60801 + +releaseNotes: + - | + **Added** the `istio.io/use-waypoint-canary` and + `istio.io/use-waypoint-canary-namespace` labels and the + `istio.io/use-waypoint-canary-weight` annotation, which let a service shift a + configurable percentage of its traffic to a second (canary) waypoint alongside + its primary `istio.io/use-waypoint`.