📋 Recommended Actions
✅ No Immediate Action Required
No immediate action required. Review updates to better support your users, especially if you’re leveraging Kubernetes Gateway API oristioctl proxy-status.
📝 Summary
Istio 1.27.1 delivers crucial bug fixes and valuable enhancements, bolstering operational stability and testing capabilities. This release notably improves Kubernetes Gateway API adoption by fixing a tag watcher issue that caused programming failures with revisioned installs. Users of istioctl proxy-status will find a more robust experience as its behavior when no proxies are found has been fixed to prevent breaking external tooling. We’ve also added comprehensive mTLS support to the Echo server, allowing for more detailed and accurate security testing. Core component reliability sees significant boosts with fixes for traffic policy validation (especially retry_budget) and improved istio-iptables logic that correctly handles IPv4/IPv6 states. Dependency updates ensure compatibility and security. These changes collectively enhance Istio’s stability and flexibility, making it even more dependable for your cloud-native deployments.
✨ Enhanced Kubernetes Gateway API Stability with Revisioned Installs
Operating Kubernetes Gateway API with Istio just got a significant boost in reliability, especially for environments leveraging multiple revisions. This release resolves a critical issue where Kubernetes Gateways were not being programmed correctly due to a bug in the tag watcher logic. By ensuring that Istiod accurately identifies the cluster’s default revision, you can now expect smoother and more predictable deployments of Gateway API resources, reducing configuration headaches and improving overall control plane consistency.
The core of this fix lies within the tagWatcher component, which now consults the ValidatingWebhookConfiguration (specifically istiod-default-validator) to determine the active default revision across the cluster. Previously, this logic could misinterpret the default state, leading to Gateways failing to receive their intended configuration. The updated mechanism ensures a unified understanding of the default revision, allowing Gateway API resources to be correctly associated and programmed.
This improvement has been validated with new integration tests, demonstrating stable deployments of Gateway API resources with a configured default revision:
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: sample
namespace: default
spec:
gatewayClassName: istio
listeners:
- name: http
protocol: HTTP
port: 80
Source:
pkg/revisions/tag_watcher.go(104-146)releasenotes/notes/56767.yaml(1-8)tests/integration/helm/install_test.go(44-67)
🛠️ istioctl proxy-status Behavior Fix for External Tooling
For operations engineers and CI/CD pipelines relying on istioctl proxy-status for automated checks, this release brings a crucial behavior fix. Previously, when no proxies were found in a queried scope, the command would exit with an error, potentially disrupting automated scripts. The tool now gracefully returns an empty table output instead of an error, ensuring that your external monitoring and automation tools can continue to parse results without unexpected failures, making your workflows more resilient.
The istioctl proxy-status command’s setupStatusPrint function previously included a check that would return an error if len(fullStatus) was zero, meaning no proxies were detected. This logic has been removed. Instead of a hard error, the command now proceeds to print the header with no rows when no proxies are present. This aligns the behavior with expectations for programmatic consumption, where an empty structured output is often preferred over an error for ’no results found’ scenarios.
--- a/istioctl/pkg/writer/pilot/status.go
+++ b/istioctl/pkg/writer/pilot/status.go
@@ -189,10 +189,6 @@ func (s *XdsStatusWriter) setupStatusPrint(drs map[string]*discovery.DiscoveryRe
}
}
- if len(fullStatus) == 0 {
- return nil, nil, nil, fmt.Errorf("no proxies found (checked %d istiods)", len(drs))
- }
-
// Sort types for consistent output, preserving legacy order for core types
coreOrder := []string{
xdsresource.ClusterType, // CDS
Source:
istioctl/pkg/proxystatus/proxystatus_test.go(66-70)istioctl/pkg/writer/pilot/status.go(189-199)releasenotes/notes/57340.yaml(1-8)
🔒 Robust mTLS Testing with Echo Server Enhancements
To support more comprehensive and secure integration testing, the Echo server has been significantly enhanced with explicit mTLS capabilities. This new feature allows you to configure Echo to require and verify client certificates for incoming connections, making it an ideal target for testing Istio’s mTLS origination and policy enforcement. Developers can now simulate real-world mTLS scenarios more accurately, gaining deeper insights into their service mesh’s security posture.
The Echo server now accepts a new --mtls flag to designate ports requiring client certificates. When enabled, the HTTP server endpoint configures TLS to RequireAndVerifyClientCert and uses a provided CA certificate to validate clients. Additionally, Echo responses will now include the ClientCertSubject and ClientCertSerialNumber fields when a valid client certificate is presented, providing crucial debugging information.
Here’s how you might configure an mTLS port for the Echo server and what a response would look like:
// Server configuration
ports := make(common.PortList, 1)
ports[0] = &common.Port{
Name: "https-mtls",
Protocol: protocol.HTTPS,
Port: 8443,
TLS: true,
RequireClientCert: true,
}
serverConfig := &server.Config{
// ... other config
TLSCert: "/cert.crt",
TLSKey: "/cert.key",
TLSCACert: "/ca.crt",
}
Example Echo server response with mTLS details:
Hostname=mtls-echo-v1-xxxxxxxxxx-xxxxx
ClientCertSubject=CN=client.default.svc.cluster.local
ClientCertSerialNumber=1234567890ABCDEF
... # Other fields
A new mtls-echo sample deployment is also available to demonstrate this functionality.
Source:
pkg/test/echo/cmd/server/main.go(38-164)pkg/test/echo/server/endpoint/http.go(110-134)pkg/test/echo/fields.go(57-79)pkg/test/echo/parse.go(23-53)samples/mtls-echo/mtls-echo.yaml(1-101)tests/integration/security/egress_gateway_origination_test.go(389-392)
🐛 Core Component Fixes: Traffic Policy & IPTables Logic
This release brings critical bug fixes to Istio’s traffic policy validation and istio-iptables configuration logic, directly enhancing the reliability and flexibility of your service mesh’s networking. These improvements mean more robust traffic management configurations and a more accurate and stable proxy injection process, preventing unexpected network behavior and ensuring your applications run smoothly.
Two key areas have been addressed:
Traffic Policy Validation: Previously, a
TrafficPolicyconfigured solely withretry_budgetwould be incorrectly rejected. The validation logic invalidateTrafficPolicyhas been updated to correctly recognizeRetryBudgetas a valid standalone configuration field, allowing for more granular and focused traffic policies.--- a/pkg/config/validation/validation.go +++ b/pkg/config/validation/validation.go @@ -1051,7 +1051,8 @@ func validateTrafficPolicy(configNamespace string, policy *networking.TrafficPol return Validation{} } if policy.OutlierDetection == nil && policy.ConnectionPool == nil && - policy.LoadBalancer == nil && policy.Tls == nil && policy.PortLevelSettings == nil && policy.Tunnel == nil && policy.ProxyProtocol == nil { + policy.LoadBalancer == nil && policy.Tls == nil && policy.PortLevelSettings == nil && policy.Tunnel == nil && policy.ProxyProtocol == nil && + policy.RetryBudget == nil { return WrapError(fmt.Errorf("traffic policy must have at least one field")) }istio-iptablesRobustness: TheVerifyIptablesStatefunction, crucial for checking existing iptables configurations, has been refactored. It now independently evaluates the state for both IPv4 and IPv6 rules, ensuring that issues in one IP family do not mask or override detection results in the other. This prevents scenarios whereistio-iptablesmight incorrectly decide to skip reconciliation due to a flawed state check. Additionally,istio-iptablesdetection logic is improved to fallback toiptables-nftwhen theiptable_natmodule is missing, increasing compatibility across various Linux environments.
Source:
pkg/config/validation/validation.go(1051-1055)releasenotes/notes/retry-budget-validation.yaml(1-6)tools/istio-iptables/pkg/capture/helper.go(76-200)tools/istio-iptables/pkg/capture/run_linux_test.go(202-387)releasenotes/notes/56626.yaml(1-8)releasenotes/notes/57385.yaml(1-8)
Minor Updates & Housekeeping
This release includes critical compatibility updates for Helm, ensuring Gateway chart installations remain smooth with Helm v3.18.5’s stricter JSON schema validation. A bug preventing the PreserveHeaderCase option from overriding other HTTP/1.x protocol settings has been fixed. Additionally, general dependency bumps (including Kubernetes client libraries to v0.33.3) enhance overall stability, and new integration tests verify secure metrics exposure for Ambient Mesh’s ztunnel component.