1.30.0
Solo build of Istio version 1.30.0 minor release.
This release note describes what’s different between Solo builds of Istio versions 1.29.0 and 1.30.0.
Upgrade Notes
Permissions change for ECS discovery
Previously, integrating ECS tasks into an ambient mesh only required giving istiod AWS permissions to perform
List and Describe actions on ECS clusters, services, and tasks. With this change, istiod must also have
permission to perform the ec2:DescribeNetworkInterfaces action.
Helm value platforms.ecs renamed to platforms.aws
The platforms.ecs Helm value has been deprecated in favor of platforms.aws. The old path
is still supported for backwards compatibility but will be removed in a future release.
Before:
platforms:
ecs:
accounts:
- role: arn:aws:iam::1111111111:role/istiod
domain: example.acme
regions: ["us-east-1"]After:
platforms:
aws:
ecsDiscovery: true
accounts:
- role: arn:aws:iam::1111111111:role/istiod
domain: example.acme
regions: ["us-east-1"]General Changes
- Built against upstream Istio version 1.30.0. The release notes can be found here.
- Built against upstream Istio commit
65622076eb2695c8a464e55458103df132f87bb3.
Solo Flavor Changes
Improved the
istioctl multicluster checkcommand with the following enhancements:- Detect missing local
Segmentresources that cause auto-generatedServiceEntryresources from a peered cluster to be silently dropped, and report rejected peer segments with an actionable message. - Support structured output via a new
--output(-o) flag. Passing-o jsonor-o yamlemits all check results as a structured document grouped by cluster. - Detect rejected peer
Segmentstates caused by hostname mismatches and overlappingSegmentdomains. - Validate that all Istio proxy containers and all sidecar-injector
ConfigMaptemplates have theISTIO_META_NETWORKenvironment variable set to match the network label on theistio-systemnamespace. - Verify that
ambient.dnsCaptureis enabled in theistio-cni-configConfigMap. - Verify that the
topology.istio.io/clusterlabel is present and valid on istio-remote gateways. - Check that a remote gateway’s effective service account matches the corresponding peer east-west gateway.
- Report hostname conflicts by reading the controller’s conflict annotations on auto-generated
ServiceEntryresources. - Support running against extracted bug-report directories, enabling offline multicluster analysis without direct cluster access.
- Dynamically discover east-west gateway names from
Gatewayobjects instead of hardcodingistio-eastwest. - Correctly detect NodePort east-west gateways that have fallen back to reporting a ClusterIP address by using the peering annotation to detect NodePort mode and validating that the backing
Servicehas the required HBONE port.
- Detect missing local
Added service inheritance support via a new
ENABLE_SERVICE_INHERITANCEenvironment variable, which allows policies that target aServiceto also include itsGlobalServicewhen enabled. Also added asolo.io/service-inheritanceannotation, which can be set totrueorfalseto override the environment variable on a per-resource basis. Service inheritance is supported byAuthorizationPolicy,EnvoyFilter,RequestAuthentication,Telemetry,TrafficExtension, andWasmPlugin.Added Route (HTTPRoute, GRPCRoute, TCPRoute, TLSRoute) ParentRefs support GlobalService kind.
Added metrics to track mesh config parsing and validation status. New
pilot_meshconfig_validation_statusandpilot_meshnetworks_validation_statusgauges indicate whether the current mesh configuration is valid (0) or invalid (1).Added an EC2 instance discovery platform. Auto-discovers EC2 instances tagged with
ec2.solo.io/*metadata and createsWorkloadEntryandServiceresources. Supports multi-account and multi-region discovery, public/private IP selection, and multi-workload instances.Added
istioctl ec2 add-workloadandistioctl vm add-workloadcommands for registering EC2 instances and generic VMs into the mesh.Added support for using public IPs attached to ECS tasks as
WorkloadEntryaddresses by setting theecs.solo.io/use-public-iptag on the task totrue.Added two new environment variables,
PEERING_EXCLUDED_LABELSandPEERING_EXCLUDED_ANNOTATIONS, that define a comma-delimited string of labels and annotations which are excluded from auto-generated peering resources’ metadata.Added the ability to propagate labels from source Kubernetes resources to their peered
WorkloadEntrycounterparts.- The pilot-specific
ENABLE_PEERING_LABEL_PROPAGATIONenvironment variable value accepts:- A comma-delimited string of label keys that should be propagated if they exist.
- The
allkeyword to propagate all labels.
GlobalServiceresources’ labels can be propagated.- In a flat-networking scenario,
Podresources’ labels can be propagated.
- The pilot-specific
Added a
--revision(-r) flag toistioctl bootstrap, allowing users to target a specific control plane revision. When set, the command looks upistiod-{revision}instead of the defaultistiodservice.Added support for loading license keys from mounted volumes. The path where the volume is mounted should be provided as the
license.volumeHelm value.Added the
PILOT_PEERING_WE_EXCLUSION_LABELSenvironment variable to prevent peering-generatedServiceEntryresources from selectingWorkloadEntryresources that carry specified label keys.Accepts a comma-separated list of label keys. Any
WorkloadEntrycarrying at least one of these keys will not be selected by a peering-generatedServiceEntry. Non-peeringServiceEntryresources are unaffected. Defaults togloo.solo.io/parent_name, which excludes GMEVirtualDestination-generatedWorkloadEntryresources from peeringServiceEntryselection.Added a
gloo.solo.io/NodePortConfiguredstatus condition onistio-eastwestgateways configured for NodePort peering. When the gateway’s managedServicehas no port withhbonein its name, the condition is set toFalsewith reasonMissingHbonePortand a descriptive message. When a validhboneport is present, the condition isTruewith reasonProgrammed.Added support for authoring
AuthorizationPolicyrules that match on per-workload claims carried by the source workload’s identity. Enable by settingENABLE_WORKLOAD_CLAIMS=trueon ztunnel, or via the ztunnel Helm chart with--set workloadClaims.enabled=true.Added
hostnamesto theSegmentcustom resource, allowing customization of additional hostnames for every peered service.Added the
eastwest.peerCaCrl.enabledHelm value to the peering Helm chart to mirror the ztunnel chart for auto-configuring the necessary CRL environment variable and volume/volumeMount sections for CRL enforcement by the east-west gateway.Added a JWKS debug endpoint to istiod that publishes the CA’s signing certificate in JSON Web Key Set format, along with a new
istioctl experimental jwkscommand to retrieve it.Added a
CONN IDcolumn toistioctl ztunnel-config connectionsoutput, which displays the connection ID for each inbound and outbound ztunnel connection to aid in debugging.Added the
solo.io/sidecar-skip-waypointServiceEntryannotation.When set to
"true", sidecars ignore theServiceEntry’sistio.io/use-waypointbinding and dial theServiceEntryendpoints directly. Ambient proxies and waypoint config generation continue to honor the binding.Added the
solo-ztunnel-egressGatewayClass, which lets the ztunnelDaemonSetserve as the egress data plane for ambient workloads. This is an enterprise feature.Deprecated the Helm value
platforms.ecsin favor ofplatforms.aws. The previousplatforms.ecs.accountspath is still supported, but users should migrate to the new configuration as it will be removed in a future release.Fixed the peering controller creating
ServiceEntryresources for services outside the mesh.Serviceresources with global scope labels in namespaces not enrolled in the mesh (no ambient or sidecar injection) are now correctly excluded from peering.Fixed
prefer-otherServiceEntryresolution issues:- Traffic could be non-deterministically routed through a
prefer-otherServiceEntryinstead of a non-prefer-otherServiceEntrywith the same hostname. This could occur when aVirtualServicereferenced a hostname served by both types ofServiceEntry, and there was an explicitSidecarscope that limited the visibility of the non-prefer-otherServiceEntry. - DNS responses for a hostname served by both a
prefer-otherServiceEntryand a non-prefer-otherServiceEntrycould include addresses from both, causing DNS flip-flopping.
- Traffic could be non-deterministically routed through a
Fixed multiple issues where adding annotations to gateways caused unnecessary restarts:
- Adding the draining annotation to the east-west
Gateway. - Adding the traffic distribution annotation to a
Gateway(waypoint). - Adding a service-type annotation to the east-west
Gateway.
- Adding the draining annotation to the east-west
Fixed
Serviceresources that have takeover enabled (either viasolo.io/service-takeover=trueorsolo.io/service-scope=global-only) to now have their traffic distribution default toPreferNetworkunless another traffic distribution is set. This makes the takeoverServicetraffic distribution consistent with the federatedServicetraffic distribution, which defaults toPreferNetworkor inherits the baseServicedistribution setting.Fixed an issue in flat-network peering where services with a named
targetPortcaused remote endpoints to be silently dropped.Fixed several ECS discovery issues:
- Services with long cluster or service names could not join the mesh due to the
ecs.solo.io/hostnamelabel value exceeding the 63-character Kubernetes limit. - Workloads failed to register as
WorkloadEntryresources when no domain was specified for an AWS account. A default domain is now used so workloads are always reachable within the mesh. - The ECS controller did not respect custom system namespace configurations. Now, it properly uses the configured namespace instead of defaulting to
istio-system. - AWS resource tags passed through as Kubernetes labels are now filtered. Only tags with
*.istio.io/,*.solo.io/, or*.kubernetes.io/domain prefixes are passed through to generated Kubernetes objects.
- Services with long cluster or service names could not join the mesh due to the
Fixed an issue where the global waypoint label value could exceed the Kubernetes 63-byte limit when the waypoint name, namespace, and domain were long, causing the label to be rejected.
Fixed traffic routing failures for global services that use named
targetPortvalues. Requests could be sent to the wrong port when routing across clusters or to local services exposed via named ports.Fixed sidecar generation with service takeover enabled and no local
Service.Fixed an issue where outbound clusters could be served with stale metadata-exchange configuration when the set of service endpoints supporting HBONE changed.
Fixed an issue where updating a remote cluster’s
Segmentcustom resourcedomainoraliasesfields would not regenerate peeredServiceEntryhostnames.Fixed an issue where cross-cluster traffic from a sidecar to a non-HBONE sidecar in a flat-network peering topology was sent as plaintext instead of Istio mTLS.
FIPS Flavor Changes
No changes in this section.