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
+
+
+
+ | Name |
+ istio.io/use-waypoint-canary-weight |
+
+
+ | Feature Status |
+ Alpha |
+
+
+ | 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
+
+
+
+ | Name |
+ istio.io/use-waypoint-canary |
+
+
+ | Feature Status |
+ Alpha |
+
+
+ | 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
+
+
+
+ | Name |
+ istio.io/use-waypoint-canary-namespace |
+
+
+ | Feature Status |
+ Alpha |
+
+
+ | 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`.