You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This PR implements the Istio profile for the E2E testing framework as requested in issue vllm-project#656.
## What Changed
### Core Implementation (Issue vllm-project#656 Requirements)
- **New Istio Profile** (`e2e/profiles/istio/`)
- Implements 5-stage deployment: Istio control plane, namespace configuration,
Semantic Router with sidecar injection, Istio Gateway/VirtualService/DestinationRule,
and environment verification
- Robust error handling with panic recovery and defer-based cleanup
- Configurable Istio version via `ISTIO_VERSION` environment variable (default: 1.28.0)
- Comprehensive service health verification with 60-second stabilization period
- **4 Istio-Specific Test Cases** (100% passing)
1. `istio-sidecar-health-check` - Verify Envoy sidecar injection and health
2. `istio-traffic-routing` - Test routing through Istio ingress gateway
3. `istio-mtls-verification` - Verify mutual TLS configuration and certificates
4. `istio-tracing-observability` - Validate distributed tracing and metrics
- **Integration & Documentation**
- Registered profile in `e2e/cmd/e2e/main.go`
- Added comprehensive documentation to `e2e/README.md`
- Integrated into CI matrix (`.github/workflows/integration-test-k8s.yml`)
- Updated Make targets help text (`tools/make/e2e.mk`)
### Out-of-Scope Changes (Justified)
#### 1. Helper Function Fix (`e2e/pkg/helpers/kubernetes.go`)
- **Change**: Added `namespace` parameter to `GetEnvoyServiceName()`
- **Why**: Function was hardcoded to `"envoy-gateway-system"`, preventing reuse for Istio (`"istio-system"`)
- **Impact**: Makes helper function generic and reusable across all profiles
- **Safety**: Updated all 4 call sites (ai-gateway, aibrix, dynamic-config, istio)
- **How AIBrix didn't need it**: AIBrix uses `envoy-gateway-system`, matching the hardcoded value
#### 2. Kubernetes 1.29 Upgrade (`e2e/pkg/cluster/kind.go`)
- **Change**: Explicitly specify Kubernetes 1.29 for Kind clusters
- **Why**: Istio 1.28+ requires Kubernetes 1.29+ ([docs](https://istio.io/latest/docs/releases/supported-releases/))
- **Impact**: Benefits ALL E2E profiles (more stable, newer K8s APIs)
- **Safety**:
- Shared code path - all profiles use same Kind cluster creation
- CI matrix tests all profiles (ai-gateway, aibrix, istio) in parallel
- K8s 1.29 maintains N-2 backward compatibility
- This is an upgrade (1.27→1.29), not a breaking change
- CI will catch issues before merge
## Test Coverage
This PR implements the **4 Istio-specific tests** required by issue vllm-project#656:
- ✅ Basic health check with Istio sidecar
- ✅ Traffic routing through Istio gateway
- ✅ mTLS verification
- ✅ Request tracing and observability
**Test Results**: 4/4 passing (100%)
**Note on Signal-Decision Engine Tests**:
Signal-decision engine tests (introduced in PR vllm-project#695) are intentionally excluded
to maintain focus on Istio integration validation. These tests validate semantic
router logic (already covered by ai-gateway, aibrix, and dynamic-config profiles)
rather than Istio mesh functionality. Following the established pattern where
PR vllm-project#695 retroactively added signal-decision tests to existing profiles, these
can be added to the Istio profile in a follow-up PR.
## Implementation Highlights
- 5-stage deployment with comprehensive error handling
- Panic recovery with defer-based cleanup
- Service health verification before tests (prevents 503 errors)
- 60-second stabilization period for mesh readiness
- Complete Istio resource cleanup in teardown
- All Kubernetes resources properly namespaced
- Configurable Istio version for testing flexibility
## Testing Done
✅ All 4 Istio test cases pass successfully
✅ Verified cluster lifecycle management (create/cleanup)
✅ Confirmed Istio sidecar injection and health
✅ Validated traffic routing through Istio gateway
✅ Verified mTLS configuration and certificates
✅ Confirmed distributed tracing headers and metrics
✅ Tested with Istio 1.28.0 and Kubernetes 1.29
## Makefile Targets
```bash
make e2e-test E2E_PROFILE=istio # Run all Istio tests
make e2e-test E2E_PROFILE=istio E2E_VERBOSE=1 # Run with verbose output
ISTIO_VERSION=1.28.0 make e2e-test E2E_PROFILE=istio # Custom Istio version
```
Resolvesvllm-project#656
Signed-off-by: Asaad Balum <[email protected]>
- Deployed via Helm with Istio sidecar injection enabled
547
+
- Namespace labeled with `istio-injection=enabled`
548
+
549
+
3.**Istio Resources**:
550
+
-`Gateway` - Configures ingress gateway on port 80
551
+
-`VirtualService` - Routes traffic to Semantic Router service
552
+
-`DestinationRule` - Enables mTLS with `ISTIO_MUTUAL` mode
553
+
554
+
**Test Cases:**
555
+
556
+
| Test Case | Description | What it Validates |
557
+
|-----------|-------------|-------------------|
558
+
|`istio-sidecar-health-check`| Verify Envoy sidecar injection | - Istio-proxy container exists<br>- Sidecar is healthy and ready<br>- Namespace has `istio-injection=enabled` label |
559
+
|`istio-traffic-routing`| Test routing through Istio gateway | - Gateway and VirtualService exist<br>- Requests route correctly to Semantic Router<br>- Istio/Envoy headers present in responses |
0 commit comments