From 7d9dd36a2080b0139d0058adba5d9e2a004189c9 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Tue, 1 Jul 2025 18:19:40 +0200 Subject: [PATCH 01/13] test-report: istio 1.27-alpha v0.4.0 report 9/9 --- .../reports/v0.4.0/gateway/istio/README.md | 81 +++++++++++++++++++ .../istio/istio-1.27-alpha-dev-report.yaml | 22 +++++ 2 files changed, 103 insertions(+) create mode 100644 conformance/reports/v0.4.0/gateway/istio/README.md create mode 100644 conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md new file mode 100644 index 000000000..cfaed26f8 --- /dev/null +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -0,0 +1,81 @@ +# Istio (Gateway Profile Conformance) + + +## Table of Contents + +| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | +|--------------------------|----------------|------------------------|---------|----------------------------------------------------------------------------| +| v0.4.0 | Gateway | 1.27-alpha... | default | [v1.27-alpha Dev report](./istio-1.27-alpha-dev-report.yaml) | +| ... | ... | ... | ... | ... | + +## Reproduce + +``` +# minikube + +minikube start +minikube addons enable metallb + +cat << EOF | kubectl apply -f - +apiVersion: v1 +kind: ConfigMap +data: + config: | + address-pools: + - name: default + protocol: layer2 + addresses: + - 192.168.49.100-192.168.49.200 +metadata: + name: config + namespace: metallb-system +EOF + +# istio + +istioctl install --set profile=minimal --set values.global.hub=gcr.io/istio-testing --set values.global.tag=1.27-alpha.5bcfdaceaca13cfbbd876d142ab069bb14731700 + +# CRDs + +kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml +kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/heads/main/config/crd/bases/inference.networking.x-k8s.io_inferencepools.yaml +kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/heads/main/config/crd/bases/inference.networking.x-k8s.io_inferencemodels.yaml + + +# Enforce TLS for EPP + +kubectrl create namespace gateway-conformance-app-backend + +cat << EOF | kubectl apply -f - +apiVersion: networking.istio.io/v2 +kind: DestinationRule +metadata: + name: primary-endpoint-picker-tls + namespace: gateway-conformance-app-backend +spec: + host: primary-endpoint-picker-svc + trafficPolicy: + tls: + mode: SIMPLE + insecureSkipVerify: true +--- +apiVersion: networking.istio.io/v1 +kind: DestinationRule +metadata: + name: secondary-endpoint-picker-tls + namespace: gateway-conformance-app-backend +spec: + host: secondary-endpoint-picker-svc + trafficPolicy: + tls: + mode: SIMPLE + insecureSkipVerify: true +EOF + +# gie conformance test suite + +git clone git@github.com:kubernetes-sigs/gateway-api-inference-extension.git; cd gateway-api-inference-extension + +#go test... + +``` \ No newline at end of file diff --git a/conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml b/conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml new file mode 100644 index 000000000..f65a3d979 --- /dev/null +++ b/conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml @@ -0,0 +1,22 @@ +apiVersion: gateway.networking.k8s.io/v1 +date: "2025-07-01T17:59:24+02:00" +gatewayAPIChannel: standard +gatewayAPIVersion: v1.3.0 +implementation: + contact: + - '@istio/maintainers' + organization: istio + project: istio + url: https://istio.io + version: 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 +kind: ConformanceReport +mode: default +profiles: +- core: + result: success + statistics: + Failed: 0 + Passed: 9 + Skipped: 0 + name: Gateway + summary: Core tests succeeded. From 7ce74079f3aa66491ab134de2751a7c369a198d6 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Tue, 1 Jul 2025 19:03:01 +0200 Subject: [PATCH 02/13] Update conformance/reports/v0.4.0/gateway/istio/README.md Co-authored-by: Nir Rozenbaum --- conformance/reports/v0.4.0/gateway/istio/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index cfaed26f8..8404663ef 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -44,7 +44,7 @@ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-i # Enforce TLS for EPP -kubectrl create namespace gateway-conformance-app-backend +kubectl create namespace gateway-conformance-app-backend cat << EOF | kubectl apply -f - apiVersion: networking.istio.io/v2 From 515461189a6ed735d78c56e6cc70c35b904177cb Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Tue, 1 Jul 2025 21:35:05 +0200 Subject: [PATCH 03/13] Fix DestinationRule v --- conformance/reports/v0.4.0/gateway/istio/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index 8404663ef..f1bc3b204 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -47,7 +47,7 @@ kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-i kubectl create namespace gateway-conformance-app-backend cat << EOF | kubectl apply -f - -apiVersion: networking.istio.io/v2 +apiVersion: networking.istio.io/v1 kind: DestinationRule metadata: name: primary-endpoint-picker-tls @@ -78,4 +78,4 @@ git clone git@github.com:kubernetes-sigs/gateway-api-inference-extension.git; cd #go test... -``` \ No newline at end of file +``` From 1496b63a8628c0e84da95e28e5ca405fafea62b7 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Fri, 4 Jul 2025 16:23:08 +0200 Subject: [PATCH 04/13] feat: Add makefile to setup and run tests --- .../reports/v0.4.0/gateway/istio/Makefile | 384 ++++++++++++++++++ .../reports/v0.4.0/gateway/istio/README.md | 179 +++++--- .../istio/istio-1.27-alpha-dev-report.yaml | 22 - 3 files changed, 496 insertions(+), 89 deletions(-) create mode 100644 conformance/reports/v0.4.0/gateway/istio/Makefile delete mode 100644 conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile new file mode 100644 index 000000000..169f1bbf7 --- /dev/null +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -0,0 +1,384 @@ +# Version variables - can be overridden via environment or command line +# Example: make all ISTIO_VERSION=1.28.0 +GATEWAY_API_VERSION ?= v1.3.0 +INFERENCE_EXTENSION_VERSION ?= v0.4.0 +ISTIO_VERSION ?= 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 +ISTIO_HUB ?= +ISTIO_PROFILE ?= minimal + +# Conformance test variables +IMPLEMENTATION_VERSION ?= $(ISTIO_VERSION) +MODE ?= default +PROFILE ?= gateway +ORGANIZATION ?= istio +PROJECT ?= istio +URL ?= https://istio.io +CONTACT ?= @istio/maintainers +RUN_TEST ?= + +# Directory variables +TEST_BASE_DIR ?= ../../../../.. +REPORT_BASE_DIR ?= . + +# Istioctl binary variables +ISTIOCTL_DIR ?= /tmp +ISTIOCTL_BIN ?= $(ISTIOCTL_DIR)/istioctl-$(ISTIO_VERSION) + +# YAML content for readability +define METALLB_CONFIG +apiVersion: v1 +kind: ConfigMap +data: + config: | + address-pools: + - name: default + protocol: layer2 + addresses: + - NETWORK_PREFIX.100-NETWORK_PREFIX.200 +metadata: + name: config + namespace: metallb-system +endef + +define TLS_DESTINATION_RULES +apiVersion: networking.istio.io/v1 +kind: DestinationRule +metadata: + name: primary-endpoint-picker-tls + namespace: gateway-conformance-app-backend +spec: + host: primary-endpoint-picker-svc + trafficPolicy: + tls: + mode: SIMPLE + insecureSkipVerify: true +--- +apiVersion: networking.istio.io/v1 +kind: DestinationRule +metadata: + name: secondary-endpoint-picker-tls + namespace: gateway-conformance-app-backend +spec: + host: secondary-endpoint-picker-svc + trafficPolicy: + tls: + mode: SIMPLE + insecureSkipVerify: true +endef + +.PHONY: setup-env-minikube setup-env-openshift setup-minikube setup-openshift setup-istio setup-istio-minikube setup-istio-openshift setup-gateway-api-crds setup-inference-extension-crds setup-crds setup-tls run-tests update-readme clean clean-reports help + +# Setup complete environment with minikube +setup-env-minikube: setup-minikube setup-istio-minikube setup-gateway-api-crds setup-inference-extension-crds setup-tls + +# Setup complete environment with OpenShift +setup-env-openshift: setup-openshift setup-istio-openshift setup-gateway-api-crds setup-inference-extension-crds setup-tls + +# Show help information +help: + @echo "Gateway API Inference Extension Conformance Test Setup" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "📋 QUICK SETUP - All-in-one targets" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " setup-env-minikube - Setup complete environment with minikube" + @echo " setup-env-openshift - Setup complete environment with OpenShift" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "🚀 MINIKUBE ENVIRONMENT - For local development" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " setup-minikube - Setup minikube with metallb" + @echo " setup-istio-minikube - Install Istio for minikube environment" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "🏢 OPENSHIFT ENVIRONMENT - For enterprise deployments" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " setup-openshift - Setup OpenShift environment" + @echo " setup-istio-openshift - Install Istio for OpenShift environment" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "⚙️ COMMON SETUP - Environment-agnostic targets" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " setup-istio - Install Istio (auto-downloads istioctl)" + @echo " setup-gateway-api-crds - Install Gateway API CRDs" + @echo " setup-inference-extension-crds - Install Inference Extension CRDs" + @echo " setup-crds - Install all CRDs" + @echo " setup-tls - Setup TLS for EPP" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "🧪 TESTING & REPORTING - Test execution and documentation" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " run-tests - Run conformance tests" + @echo " update-readme - Update README table with all available reports" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "🧹 CLEANUP - Resource cleanup" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " clean - Clean up resources" + @echo " clean-reports - Clean up generated reports and README table" + @echo "" + @echo "Version variables (can be overridden):" + @echo " GATEWAY_API_VERSION - Gateway API version (current: $(GATEWAY_API_VERSION))" + @echo " INFERENCE_EXTENSION_VERSION - Inference Extension version (current: $(INFERENCE_EXTENSION_VERSION))" + @echo " ISTIO_VERSION - Istio version (current: $(ISTIO_VERSION))" + @echo " ISTIO_HUB - Istio container registry hub (current: $(ISTIO_HUB), auto-detected if empty)" + @echo " ISTIO_PROFILE - Istio profile (current: $(ISTIO_PROFILE))" + @echo "" + @echo "Conformance test variables (can be overridden):" + @echo " IMPLEMENTATION_VERSION - Implementation version for report (current: $(IMPLEMENTATION_VERSION))" + @echo " MODE - Test mode (current: $(MODE))" + @echo " PROFILE - Conformance profile (current: $(PROFILE))" + @echo " ORGANIZATION - Organization name (current: $(ORGANIZATION))" + @echo " PROJECT - Project name (current: $(PROJECT))" + @echo " URL - Project URL (current: $(URL))" + @echo " CONTACT - Contact information (current: $(CONTACT))" + @echo " RUN_TEST - Run specific test (current: $(RUN_TEST))" + @echo "" + @echo "Directory variables (can be overridden):" + @echo " TEST_BASE_DIR - Test suite base directory (current: $(TEST_BASE_DIR))" + @echo " REPORT_BASE_DIR - Report output directory (current: $(REPORT_BASE_DIR))" + @echo " ISTIOCTL_DIR - Directory for istioctl binaries (current: $(ISTIOCTL_DIR))" + @echo " ISTIOCTL_BIN - Path to versioned istioctl binary (current: $(ISTIOCTL_BIN))" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "💡 USAGE EXAMPLES" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "" + @echo "📋 Quick Setup Examples:" + @echo " make setup-env-minikube - Use default versions with minikube" + @echo " make setup-env-openshift - Use default versions with OpenShift" + @echo " make setup-env-minikube ISTIO_VERSION=1.28.0 - Override Istio version" + @echo "" + @echo "🚀 Minikube Examples:" + @echo " make setup-minikube - Setup minikube cluster with metallb" + @echo " make setup-istio-minikube - Install Istio for minikube environment" + @echo "" + @echo "🏢 OpenShift Examples:" + @echo " make setup-openshift - Setup OpenShift environment" + @echo " make setup-istio-openshift - Install Istio for OpenShift environment" + @echo "" + @echo "⚙️ Common Setup Examples:" + @echo " make setup-istio ISTIO_PROFILE=openshift - Install Istio with specific profile" + @echo " make setup-istio ISTIO_HUB=docker.io/istio - Install Istio from custom registry" + @echo " make setup-crds - Install all CRDs" + @echo "" + @echo "🧪 Testing Examples:" + @echo " make run-tests - Run conformance tests with default settings" + @echo " make run-tests MODE=experimental - Run tests with experimental mode" + @echo " make run-tests IMPLEMENTATION_VERSION=v1.28.0 - Run tests with custom version" + @echo " make run-tests TEST_BASE_DIR=../../../../../ - Run tests from custom directory" + @echo " make run-tests RUN_TEST=TestName - Run specific test only" + @echo " make update-readme - Update README table with all available reports" + +# Setup minikube with metallb +setup-minikube: + @echo "Setting up minikube with metallb..." + minikube start + minikube addons enable metallb + @echo "Configuring metallb address pool..." + $(file >/tmp/metallb-config.yaml,$(METALLB_CONFIG)) + @MINIKUBE_IP=$$(minikube ip); \ + NETWORK_PREFIX=$${MINIKUBE_IP%.*}; \ + echo "Using IP range: $${NETWORK_PREFIX}.100-$${NETWORK_PREFIX}.200"; \ + sed -i "s/NETWORK_PREFIX/$${NETWORK_PREFIX}/g" /tmp/metallb-config.yaml + kubectl apply -f /tmp/metallb-config.yaml + @rm -f /tmp/metallb-config.yaml + +# Setup OpenShift (alternative to minikube) +setup-openshift: + @echo "Setting up OpenShift environment..." + @echo "Assuming OpenShift cluster is already running and kubectl/oc is configured" + @echo "Verifying cluster connection..." + kubectl cluster-info + @echo "OpenShift environment ready" + +# Download istioctl binary for the specific version (file target) +$(ISTIOCTL_BIN): + @echo "Downloading istioctl version $(ISTIO_VERSION)..." + @mkdir -p $(ISTIOCTL_DIR) + @OS=$$(uname -s | tr '[:upper:]' '[:lower:]'); \ + ARCH=$$(uname -m); \ + case "$$ARCH" in \ + x86_64) ARCH=amd64 ;; \ + aarch64) ARCH=arm64 ;; \ + armv7l) ARCH=armv7 ;; \ + esac; \ + echo "Detecting OS: $$OS, Architecture: $$ARCH"; \ + SUCCESS=false; \ + echo "Trying GitHub releases..."; \ + if curl -fsSL "https://github.com/istio/istio/releases/download/$(ISTIO_VERSION)/istioctl-$(ISTIO_VERSION)-$$OS-$$ARCH.tar.gz" -o /tmp/istioctl.tar.gz 2>/dev/null; then \ + echo "Download successful, extracting..."; \ + if tar -xzf /tmp/istioctl.tar.gz -C /tmp 2>/dev/null; then \ + mv /tmp/istioctl $(ISTIOCTL_BIN); \ + rm -f /tmp/istioctl.tar.gz; \ + chmod +x $(ISTIOCTL_BIN); \ + echo "istioctl $(ISTIO_VERSION) downloaded to $(ISTIOCTL_BIN)"; \ + echo "github" > $(ISTIOCTL_BIN).source; \ + SUCCESS=true; \ + else \ + echo "ERROR: Failed to extract istioctl archive"; \ + rm -f /tmp/istioctl.tar.gz; \ + fi; \ + fi; \ + if [ "$$SUCCESS" = "false" ]; then \ + echo "Binary download failed, trying container-based extraction..."; \ + CONTAINER_IMAGE="gcr.io/istio-testing/istioctl:$(ISTIO_VERSION)"; \ + echo "Pulling container image: $$CONTAINER_IMAGE"; \ + if docker pull "$$CONTAINER_IMAGE" 2>/dev/null; then \ + echo "Extracting istioctl binary from container..."; \ + TEMP_CONTAINER=$$(docker create "$$CONTAINER_IMAGE"); \ + if docker cp "$$TEMP_CONTAINER:/usr/local/bin/istioctl" "$(ISTIOCTL_BIN)" 2>/dev/null; then \ + docker rm "$$TEMP_CONTAINER" 2>/dev/null || true; \ + chmod +x "$(ISTIOCTL_BIN)"; \ + echo "istioctl $(ISTIO_VERSION) extracted from container to $(ISTIOCTL_BIN)"; \ + echo "container" > $(ISTIOCTL_BIN).source; \ + SUCCESS=true; \ + else \ + echo "ERROR: Failed to extract istioctl binary from container"; \ + docker rm "$$TEMP_CONTAINER" 2>/dev/null || true; \ + fi; \ + else \ + echo "ERROR: Failed to pull container image $$CONTAINER_IMAGE"; \ + fi; \ + fi; \ + if [ "$$SUCCESS" = "false" ]; then \ + echo "ERROR: All download methods failed for istioctl $(ISTIO_VERSION)"; \ + echo "Tried: 1) GitHub releases, 2) Container extraction"; \ + echo "Please check if the version exists or install istioctl manually"; \ + exit 1; \ + fi + @$(ISTIOCTL_BIN) version --remote=false + + +# Install Istio (generic target using ISTIO_PROFILE variable) +setup-istio: $(ISTIOCTL_BIN) + @echo "Installing Istio version $(ISTIO_VERSION) with profile $(ISTIO_PROFILE)..." + @if [ -n "$(ISTIO_HUB)" ]; then \ + HUB="$(ISTIO_HUB)"; \ + echo "Using specified hub: $$HUB"; \ + elif [ -f "$(ISTIOCTL_BIN).source" ]; then \ + SOURCE=$$(cat $(ISTIOCTL_BIN).source); \ + if [ "$$SOURCE" = "github" ]; then \ + HUB="gcr.io/istio-release"; \ + echo "Using hub for GitHub release: $$HUB"; \ + elif [ "$$SOURCE" = "container" ]; then \ + HUB="gcr.io/istio-testing"; \ + echo "Using hub for container image: $$HUB"; \ + else \ + HUB="gcr.io/istio-testing"; \ + echo "Unknown source, defaulting to testing hub: $$HUB"; \ + fi; \ + else \ + HUB="gcr.io/istio-release"; \ + echo "WARNING: Could not detect istioctl source, defaulting to release hub: $$HUB"; \ + echo "If this is incorrect, specify ISTIO_HUB manually"; \ + fi; \ + echo "Installing Istio from $$HUB..."; \ + $(ISTIOCTL_BIN) install -y --set profile=$(ISTIO_PROFILE) --set values.global.hub=$$HUB --set values.global.tag=$(ISTIO_VERSION) + +# Install Istio for minikube environment +setup-istio-minikube: + $(MAKE) setup-istio ISTIO_PROFILE=minimal + +# Install Istio for OpenShift environment +setup-istio-openshift: + $(MAKE) setup-istio ISTIO_PROFILE=openshift + +# Apply Gateway API CRDs +setup-gateway-api-crds: + @echo "Applying Gateway API CRDs version $(GATEWAY_API_VERSION)..." + kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/$(GATEWAY_API_VERSION)/standard-install.yaml + +# Apply Inference Extension CRDs +setup-inference-extension-crds: + @echo "Applying Inference Extension CRDs version $(INFERENCE_EXTENSION_VERSION)..." + kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/tags/$(INFERENCE_EXTENSION_VERSION)/config/crd/bases/inference.networking.x-k8s.io_inferencepools.yaml + kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/tags/$(INFERENCE_EXTENSION_VERSION)/config/crd/bases/inference.networking.x-k8s.io_inferencemodels.yaml + +# Apply all CRDs (convenience target) +setup-crds: setup-gateway-api-crds setup-inference-extension-crds + +# Setup TLS for EPP +setup-tls: + @echo "Setting up TLS for EPP..." + kubectl create namespace gateway-conformance-app-backend + $(file >/tmp/tls-destination-rules.yaml,$(TLS_DESTINATION_RULES)) + kubectl apply -f /tmp/tls-destination-rules.yaml + @rm -f /tmp/tls-destination-rules.yaml + +# Run conformance tests +run-tests: + @echo "Running conformance tests..." + @echo "Test base directory: $(TEST_BASE_DIR)" + @echo "Report will be saved as: $(REPORT_BASE_DIR)/$(IMPLEMENTATION_VERSION)-$(MODE)-$(PROFILE)-report.yaml" + @if [ -n "$(RUN_TEST)" ]; then \ + echo "Running specific test: $(RUN_TEST)"; \ + else \ + echo "Running all conformance tests"; \ + fi + cd $(TEST_BASE_DIR) && go test ./conformance -args -gateway-class istio \ + -cleanup-base-resources=false \ + -report-output=$(shell pwd)/$(IMPLEMENTATION_VERSION)-$(MODE)-$(PROFILE)-report.yaml \ + -organization="$(ORGANIZATION)" \ + -project="$(PROJECT)" \ + -url="$(URL)" \ + -contact="$(CONTACT)" \ + -version="$(IMPLEMENTATION_VERSION)" \ + -mode="$(MODE)" \ + -run-test="$(RUN_TEST)" + @echo "" + @echo "Test completed! To update the README table, run:" + @echo " make update-readme" + +# Update README table with all available reports +update-readme: + @echo "Updating README table with all available reports..." + @echo "Scanning for conformance reports..." + @REPORTS=$$(ls *-*-*-report.yaml 2>/dev/null || echo ""); \ + if [ -z "$$REPORTS" ]; then \ + echo "No conformance reports found. Run 'make run-tests' to generate reports first."; \ + exit 1; \ + fi; \ + echo "Found reports: $$REPORTS"; \ + echo "Building table entries..."; \ + TABLE_ENTRIES=""; \ + for report in $$REPORTS; do \ + echo "Processing $$report..."; \ + IMPL_VERSION=$$(echo "$$report" | sed 's/-[^-]*-[^-]*-report\.yaml$$//'); \ + MODE=$$(echo "$$report" | sed 's/.*-\([^-]*\)-[^-]*-report\.yaml$$/\1/'); \ + PROFILE_LOWER=$$(echo "$$report" | sed 's/.*-\([^-]*\)-report\.yaml$$/\1/'); \ + PROFILE_UPPER=$$(echo "$$PROFILE_LOWER" | sed 's/^./\U&/'); \ + EXTENSION_VERSION="$(INFERENCE_EXTENSION_VERSION)"; \ + TABLE_ENTRY="| $$EXTENSION_VERSION | $$PROFILE_UPPER | $$IMPL_VERSION | $$MODE | [$$report](./$$report) |"; \ + if [ -z "$$TABLE_ENTRIES" ]; then \ + TABLE_ENTRIES="$$TABLE_ENTRY"; \ + else \ + TABLE_ENTRIES="$$TABLE_ENTRIES\n$$TABLE_ENTRY"; \ + fi; \ + done; \ + echo "Updating README.md..."; \ + sed -i '/^| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report |$$/,/^| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *|$$/{//!d;}' README.md; \ + sed -i '/^| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report |$$/a\|--------------------------|----------------|------------------------|---------|----------------------------------------------------------------------------|\n'"$$TABLE_ENTRIES" README.md; \ + echo "README table updated successfully!" + +# Clean up resources +clean: + @echo "Cleaning up..." + kubectl delete namespace gateway-conformance-app-backend --ignore-not-found=true + @echo "Cleaning up downloaded istioctl binaries..." + @rm -f $(ISTIOCTL_DIR)/istioctl-* + @echo "Note: If using minikube, run 'minikube delete' to completely clean up" + @echo "Note: If using OpenShift, additional cleanup may be needed depending on your cluster setup" + @echo "Note: Run 'make clean-reports' to clean up generated reports and README table" + +# Clean up generated conformance reports +clean-reports: + @echo "Cleaning up generated conformance reports..." + rm -f *-*-*-report.yaml + @echo "Cleaning up README table entries..." + @sed -i '/^| [^E][^t].*\.yaml.*|$$/d' README.md + @echo "Conformance reports and README table cleaned up" + + + + \ No newline at end of file diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index f1bc3b204..b26398eca 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -5,77 +5,122 @@ | Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | |--------------------------|----------------|------------------------|---------|----------------------------------------------------------------------------| -| v0.4.0 | Gateway | 1.27-alpha... | default | [v1.27-alpha Dev report](./istio-1.27-alpha-dev-report.yaml) | | ... | ... | ... | ... | ... | ## Reproduce +To reproduce the test environment and run the conformance tests, choose **either** minikube **or** OpenShift as your deployment environment: + +### Option A: Minikube Environment + +```bash +# Set up the complete environment (minikube, istio, CRDs, TLS) +make setup-env-minikube + +# Run conformance tests +make run-tests + +# Clean up resources when done +make clean +``` + +### Option B: OpenShift Environment + +```bash +# Set up the complete environment (openshift, istio, CRDs, TLS) +make setup-env-openshift + +# Run conformance tests +make run-tests + +# Clean up resources when done +make clean ``` -# minikube - -minikube start -minikube addons enable metallb - -cat << EOF | kubectl apply -f - -apiVersion: v1 -kind: ConfigMap -data: - config: | - address-pools: - - name: default - protocol: layer2 - addresses: - - 192.168.49.100-192.168.49.200 -metadata: - name: config - namespace: metallb-system -EOF - -# istio - -istioctl install --set profile=minimal --set values.global.hub=gcr.io/istio-testing --set values.global.tag=1.27-alpha.5bcfdaceaca13cfbbd876d142ab069bb14731700 - -# CRDs - -kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.3.0/standard-install.yaml -kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/heads/main/config/crd/bases/inference.networking.x-k8s.io_inferencepools.yaml -kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/gateway-api-inference-extension/refs/heads/main/config/crd/bases/inference.networking.x-k8s.io_inferencemodels.yaml - - -# Enforce TLS for EPP - -kubectl create namespace gateway-conformance-app-backend - -cat << EOF | kubectl apply -f - -apiVersion: networking.istio.io/v1 -kind: DestinationRule -metadata: - name: primary-endpoint-picker-tls - namespace: gateway-conformance-app-backend -spec: - host: primary-endpoint-picker-svc - trafficPolicy: - tls: - mode: SIMPLE - insecureSkipVerify: true ---- -apiVersion: networking.istio.io/v1 -kind: DestinationRule -metadata: - name: secondary-endpoint-picker-tls - namespace: gateway-conformance-app-backend -spec: - host: secondary-endpoint-picker-svc - trafficPolicy: - tls: - mode: SIMPLE - insecureSkipVerify: true -EOF - -# gie conformance test suite - -git clone git@github.com:kubernetes-sigs/gateway-api-inference-extension.git; cd gateway-api-inference-extension - -#go test... +### Individual Setup Steps + +If you prefer to run individual setup steps: + +```bash +# Choose ONE of these deployment environments: +make setup-minikube # Option A: Set up minikube with metallb +# OR +make setup-openshift # Option B: Set up OpenShift environment + +# Then continue with common setup steps: +make setup-istio # Install Istio (uses ISTIO_PROFILE variable) +# OR use environment-specific targets: +make setup-istio-minikube # Install Istio for minikube environment +make setup-istio-openshift # Install Istio for OpenShift environment + +make setup-gateway-api-crds # Apply Gateway API CRDs +make setup-inference-extension-crds # Apply Inference Extension CRDs +# OR +make setup-crds # Apply all CRDs (convenience target) +make setup-tls # Set up TLS for EPP +``` + +### CRD Setup Options + +The CRD setup is split into two targets for flexibility: + +- `make setup-gateway-api-crds` - Install only Gateway API CRDs (if you have a base Gateway API environment) +- `make setup-inference-extension-crds` - Install only Inference Extension CRDs (if Gateway API is already installed) +- `make setup-crds` - Install both (convenience target for full setup) + +Different environments might require different combinations depending on what's already installed. + +### Version Configuration + +The Makefile uses configurable version variables that can be overridden: + +```bash +# Use default versions +make setup-env-minikube + +# Override specific versions +make setup-env-minikube ISTIO_VERSION=1.28.0 +make setup-env-openshift GATEWAY_API_VERSION=v1.4.0 INFERENCE_EXTENSION_VERSION=v0.5.0 + +# Use specific Istio profile +make setup-istio ISTIO_PROFILE=openshift + +# Use custom Istio registry +make setup-istio ISTIO_HUB=docker.io/istio + +# Run tests from custom directory +make run-tests TEST_BASE_DIR=../../../../../ + +# See all available options +make help ``` + +### Available Variables: + +**Setup Variables:** +- `GATEWAY_API_VERSION` - Gateway API version (default: v1.3.0) +- `INFERENCE_EXTENSION_VERSION` - Inference Extension version (default: v0.4.0) +- `ISTIO_VERSION` - Istio version (default: 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7) +- `ISTIO_HUB` - Istio container registry hub (default: gcr.io/istio-testing) +- `ISTIO_PROFILE` - Istio profile (default: minimal) + +**Conformance Test Variables:** +- `IMPLEMENTATION_VERSION` - Implementation version for report (default: same as ISTIO_VERSION) +- `MODE` - Test mode (default: default) +- `PROFILE` - Conformance profile (default: gateway) +- `ORGANIZATION` - Organization name (default: istio) +- `PROJECT` - Project name (default: istio) +- `URL` - Project URL (default: https://istio.io) +- `CONTACT` - Contact information (default: @istio/maintainers) + +**Directory Variables:** +- `TEST_BASE_DIR` - Test suite base directory (default: ../../../../..) +- `REPORT_BASE_DIR` - Report output directory (default: .) + +> **Note**: This Makefile expects to be run from within the `gateway-api-inference-extension` repository structure. The test suite is located at the repository root, while conformance reports are generated in the current directory. + +### Conformance Testing + +For detailed information about conformance testing, report generation, and requirements, see the [conformance README](../../README.md). + +For available commands and options specific to this Istio implementation, run `make help` or see the `Makefile` in this directory. diff --git a/conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml b/conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml deleted file mode 100644 index f65a3d979..000000000 --- a/conformance/reports/v0.4.0/gateway/istio/istio-1.27-alpha-dev-report.yaml +++ /dev/null @@ -1,22 +0,0 @@ -apiVersion: gateway.networking.k8s.io/v1 -date: "2025-07-01T17:59:24+02:00" -gatewayAPIChannel: standard -gatewayAPIVersion: v1.3.0 -implementation: - contact: - - '@istio/maintainers' - organization: istio - project: istio - url: https://istio.io - version: 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 -kind: ConformanceReport -mode: default -profiles: -- core: - result: success - statistics: - Failed: 0 - Passed: 9 - Skipped: 0 - name: Gateway - summary: Core tests succeeded. From 76dfcde8a0fab11680ece9a3eb1ae8b6436720a7 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Fri, 4 Jul 2025 16:33:34 +0200 Subject: [PATCH 05/13] test: run and upate test report --- conformance/reports/v0.4.0/gateway/istio/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index b26398eca..519d213a7 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -5,6 +5,7 @@ | Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | |--------------------------|----------------|------------------------|---------|----------------------------------------------------------------------------| +| v0.4.0 | Gateway | 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 | default | [1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml](./1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml) | | ... | ... | ... | ... | ... | ## Reproduce From 0df8fe80d4b4d790e63ae667a50ed7aac921a3ea Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Fri, 4 Jul 2025 16:41:28 +0200 Subject: [PATCH 06/13] feat: add notification that we attempt to auto detect istioctl --- conformance/reports/v0.4.0/gateway/istio/Makefile | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index 169f1bbf7..cd33d67dd 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -124,6 +124,13 @@ help: @echo " ISTIO_HUB - Istio container registry hub (current: $(ISTIO_HUB), auto-detected if empty)" @echo " ISTIO_PROFILE - Istio profile (current: $(ISTIO_PROFILE))" @echo "" + @echo "📥 Automatic istioctl Management:" + @echo " • istioctl binary will be automatically downloaded based on ISTIO_VERSION" + @echo " • Hub (container registry) will be auto-detected from download source:" + @echo " - GitHub release → gcr.io/istio-release" + @echo " - Container extraction → gcr.io/istio-testing" + @echo " • Override with ISTIO_HUB if needed for custom registries" + @echo "" @echo "Conformance test variables (can be overridden):" @echo " IMPLEMENTATION_VERSION - Implementation version for report (current: $(IMPLEMENTATION_VERSION))" @echo " MODE - Test mode (current: $(MODE))" From f154a8872fca97bf3738ad7f5c32926b5b3be558 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Fri, 4 Jul 2025 16:57:42 +0200 Subject: [PATCH 07/13] feat: add Status to the report overview table and parse data from report files on update --- ...7e65a8ecc499a7-default-gateway-report.yaml | 22 +++++++++++ .../reports/v0.4.0/gateway/istio/Makefile | 39 ++++++++++++++----- .../reports/v0.4.0/gateway/istio/README.md | 8 ++-- 3 files changed, 56 insertions(+), 13 deletions(-) create mode 100644 conformance/reports/v0.4.0/gateway/istio/1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml diff --git a/conformance/reports/v0.4.0/gateway/istio/1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml b/conformance/reports/v0.4.0/gateway/istio/1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml new file mode 100644 index 000000000..423a6e65c --- /dev/null +++ b/conformance/reports/v0.4.0/gateway/istio/1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml @@ -0,0 +1,22 @@ +apiVersion: gateway.networking.k8s.io/v1 +date: "2025-07-04T16:56:35+02:00" +gatewayAPIChannel: standard +gatewayAPIVersion: v1.3.0 +implementation: + contact: + - '@istio/maintainers' + organization: istio + project: istio + url: https://istio.io + version: 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 +kind: ConformanceReport +mode: default +profiles: +- core: + result: success + statistics: + Failed: 0 + Passed: 9 + Skipped: 0 + name: Gateway + summary: Core tests succeeded. diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index cd33d67dd..9eeb57f0b 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -347,16 +347,37 @@ update-readme: exit 1; \ fi; \ echo "Found reports: $$REPORTS"; \ - echo "Building table entries..."; \ + echo "Building table entries from YAML content..."; \ TABLE_ENTRIES=""; \ for report in $$REPORTS; do \ echo "Processing $$report..."; \ - IMPL_VERSION=$$(echo "$$report" | sed 's/-[^-]*-[^-]*-report\.yaml$$//'); \ - MODE=$$(echo "$$report" | sed 's/.*-\([^-]*\)-[^-]*-report\.yaml$$/\1/'); \ - PROFILE_LOWER=$$(echo "$$report" | sed 's/.*-\([^-]*\)-report\.yaml$$/\1/'); \ - PROFILE_UPPER=$$(echo "$$PROFILE_LOWER" | sed 's/^./\U&/'); \ - EXTENSION_VERSION="$(INFERENCE_EXTENSION_VERSION)"; \ - TABLE_ENTRY="| $$EXTENSION_VERSION | $$PROFILE_UPPER | $$IMPL_VERSION | $$MODE | [$$report](./$$report) |"; \ + if [ ! -f "$$report" ]; then \ + echo "Warning: Report file $$report not found, skipping"; \ + continue; \ + fi; \ + GATEWAY_API_VERSION=$$(grep '^gatewayAPIVersion:' "$$report" | sed 's/gatewayAPIVersion: *//'); \ + IMPL_VERSION=$$(grep '^ version:' "$$report" | sed 's/ version: *//'); \ + MODE=$$(grep '^mode:' "$$report" | sed 's/mode: *//'); \ + PROFILE_NAME=$$(grep '^- name:' "$$report" | sed 's/- name: *//'); \ + DATE=$$(grep '^date:' "$$report" | sed 's/date: *"//' | sed 's/".*//'); \ + PASSED=$$(grep '^ Passed:' "$$report" | sed 's/ Passed: *//'); \ + FAILED=$$(grep '^ Failed:' "$$report" | sed 's/ Failed: *//'); \ + SKIPPED=$$(grep '^ Skipped:' "$$report" | sed 's/ Skipped: *//'); \ + RESULT=$$(grep '^ result:' "$$report" | sed 's/ result: *//'); \ + if [ -z "$$GATEWAY_API_VERSION" ]; then GATEWAY_API_VERSION="$(GATEWAY_API_VERSION)"; fi; \ + if [ -z "$$IMPL_VERSION" ]; then IMPL_VERSION="unknown"; fi; \ + if [ -z "$$MODE" ]; then MODE="default"; fi; \ + if [ -z "$$PROFILE_NAME" ]; then PROFILE_NAME="Gateway"; fi; \ + if [ -z "$$DATE" ]; then DATE="unknown"; fi; \ + if [ -z "$$PASSED" ]; then PASSED="0"; fi; \ + if [ -z "$$FAILED" ]; then FAILED="0"; fi; \ + if [ -z "$$SKIPPED" ]; then SKIPPED="0"; fi; \ + if [ -z "$$RESULT" ]; then RESULT="unknown"; fi; \ + STATUS="NOT"; \ + if [ "$$RESULT" = "success" ]; then \ + STATUS="PASS"; \ + fi; \ + TABLE_ENTRY="| $$GATEWAY_API_VERSION | $$PROFILE_NAME | $$IMPL_VERSION | $$MODE | [$$report](./$$report) | $$STATUS |"; \ if [ -z "$$TABLE_ENTRIES" ]; then \ TABLE_ENTRIES="$$TABLE_ENTRY"; \ else \ @@ -364,8 +385,8 @@ update-readme: fi; \ done; \ echo "Updating README.md..."; \ - sed -i '/^| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report |$$/,/^| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *|$$/{//!d;}' README.md; \ - sed -i '/^| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report |$$/a\|--------------------------|----------------|------------------------|---------|----------------------------------------------------------------------------|\n'"$$TABLE_ENTRIES" README.md; \ + sed -i '/^| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | Status |$$/,/^| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *| \.\.\. *|$$/{//!d;}' README.md; \ + sed -i '/^| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | Status |$$/a\|--------------------------|----------------|------------------------|---------|--------|--------|\n'"$$TABLE_ENTRIES" README.md; \ echo "README table updated successfully!" # Clean up resources diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index 519d213a7..1f799d9d7 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -3,10 +3,10 @@ ## Table of Contents -| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | -|--------------------------|----------------|------------------------|---------|----------------------------------------------------------------------------| -| v0.4.0 | Gateway | 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 | default | [1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml](./1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml) | -| ... | ... | ... | ... | ... | +| Extension Version Tested | Profile Tested | Implementation Version | Mode | Report | Status | +|--------------------------|----------------|------------------------|---------|--------|--------| +| v1.3.0 | Gateway | 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7 | default | [1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml](./1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7-default-gateway-report.yaml) | PASS | +| ... | ... | ... | ... | ... | ... | ## Reproduce From 55ae520a38de35af8126acbf47cbfba3986e53e8 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Sun, 6 Jul 2025 01:05:25 +0200 Subject: [PATCH 08/13] feat: add kind env Clean up some variable usage / exposure. --- .../reports/v0.4.0/gateway/istio/Makefile | 95 +++++++++++++++++-- .../reports/v0.4.0/gateway/istio/README.md | 59 ++++++++---- 2 files changed, 128 insertions(+), 26 deletions(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index 9eeb57f0b..724cd432f 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -20,6 +20,13 @@ RUN_TEST ?= TEST_BASE_DIR ?= ../../../../.. REPORT_BASE_DIR ?= . +# Kubernetes version (shared between kind and minikube) +KUBERNETES_VERSION ?= v1.30.13 + +# Internal variables (derived from KUBERNETES_VERSION) +KIND_NODE_IMAGE ?= kindest/node:$(KUBERNETES_VERSION) +MINIKUBE_K8S_VERSION ?= $(KUBERNETES_VERSION) + # Istioctl binary variables ISTIOCTL_DIR ?= /tmp ISTIOCTL_BIN ?= $(ISTIOCTL_DIR)/istioctl-$(ISTIO_VERSION) @@ -40,6 +47,24 @@ metadata: namespace: metallb-system endef +# Multi-line YAML configuration for metallb (kind) +define METALLB_KIND_CONFIG +apiVersion: metallb.io/v1beta1 +kind: IPAddressPool +metadata: + name: example + namespace: metallb-system +spec: + addresses: + - NETWORK_PREFIX.200-NETWORK_PREFIX.250 +--- +apiVersion: metallb.io/v1beta1 +kind: L2Advertisement +metadata: + name: empty + namespace: metallb-system +endef + define TLS_DESTINATION_RULES apiVersion: networking.istio.io/v1 kind: DestinationRule @@ -66,11 +91,14 @@ spec: insecureSkipVerify: true endef -.PHONY: setup-env-minikube setup-env-openshift setup-minikube setup-openshift setup-istio setup-istio-minikube setup-istio-openshift setup-gateway-api-crds setup-inference-extension-crds setup-crds setup-tls run-tests update-readme clean clean-reports help +.PHONY: setup-env-minikube setup-env-kind setup-env-openshift setup-minikube setup-kind setup-openshift setup-istio setup-istio-minikube setup-istio-kind setup-istio-openshift setup-gateway-api-crds setup-inference-extension-crds setup-crds setup-tls run-tests update-readme clean clean-reports help # Setup complete environment with minikube setup-env-minikube: setup-minikube setup-istio-minikube setup-gateway-api-crds setup-inference-extension-crds setup-tls +# Setup complete environment with kind +setup-env-kind: setup-kind setup-istio-kind setup-gateway-api-crds setup-inference-extension-crds setup-tls + # Setup complete environment with OpenShift setup-env-openshift: setup-openshift setup-istio-openshift setup-gateway-api-crds setup-inference-extension-crds setup-tls @@ -82,15 +110,22 @@ help: @echo "📋 QUICK SETUP - All-in-one targets" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" @echo " setup-env-minikube - Setup complete environment with minikube" + @echo " setup-env-kind - Setup complete environment with kind" @echo " setup-env-openshift - Setup complete environment with OpenShift" @echo "" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" - @echo "🚀 MINIKUBE ENVIRONMENT - For local development" + @echo "🚀 MINIKUBE ENVIRONMENT - For local development with VMs" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" @echo " setup-minikube - Setup minikube with metallb" @echo " setup-istio-minikube - Install Istio for minikube environment" @echo "" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo "🐳 KIND ENVIRONMENT - For local development with containers" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" + @echo " setup-kind - Setup kind cluster with metallb" + @echo " setup-istio-kind - Install Istio for kind environment" + @echo "" + @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" @echo "🏢 OPENSHIFT ENVIRONMENT - For enterprise deployments" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" @echo " setup-openshift - Setup OpenShift environment" @@ -117,12 +152,11 @@ help: @echo " clean - Clean up resources" @echo " clean-reports - Clean up generated reports and README table" @echo "" - @echo "Version variables (can be overridden):" + @echo "Main variables (can be overridden):" @echo " GATEWAY_API_VERSION - Gateway API version (current: $(GATEWAY_API_VERSION))" @echo " INFERENCE_EXTENSION_VERSION - Inference Extension version (current: $(INFERENCE_EXTENSION_VERSION))" + @echo " KUBERNETES_VERSION - Kubernetes version for kind/minikube (current: $(KUBERNETES_VERSION))" @echo " ISTIO_VERSION - Istio version (current: $(ISTIO_VERSION))" - @echo " ISTIO_HUB - Istio container registry hub (current: $(ISTIO_HUB), auto-detected if empty)" - @echo " ISTIO_PROFILE - Istio profile (current: $(ISTIO_PROFILE))" @echo "" @echo "📥 Automatic istioctl Management:" @echo " • istioctl binary will be automatically downloaded based on ISTIO_VERSION" @@ -141,11 +175,15 @@ help: @echo " CONTACT - Contact information (current: $(CONTACT))" @echo " RUN_TEST - Run specific test (current: $(RUN_TEST))" @echo "" - @echo "Directory variables (can be overridden):" + @echo "Internal variables (advanced users only):" + @echo " ISTIO_HUB - Istio container registry hub (current: $(ISTIO_HUB), auto-detected if empty)" + @echo " ISTIO_PROFILE - Istio profile (current: $(ISTIO_PROFILE))" @echo " TEST_BASE_DIR - Test suite base directory (current: $(TEST_BASE_DIR))" @echo " REPORT_BASE_DIR - Report output directory (current: $(REPORT_BASE_DIR))" @echo " ISTIOCTL_DIR - Directory for istioctl binaries (current: $(ISTIOCTL_DIR))" @echo " ISTIOCTL_BIN - Path to versioned istioctl binary (current: $(ISTIOCTL_BIN))" + @echo " KIND_NODE_IMAGE - Kind node image (current: $(KIND_NODE_IMAGE))" + @echo " MINIKUBE_K8S_VERSION - Minikube K8s version (current: $(MINIKUBE_K8S_VERSION))" @echo "" @echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" @echo "💡 USAGE EXAMPLES" @@ -153,12 +191,20 @@ help: @echo "" @echo "📋 Quick Setup Examples:" @echo " make setup-env-minikube - Use default versions with minikube" + @echo " make setup-env-kind - Use default versions with kind" @echo " make setup-env-openshift - Use default versions with OpenShift" @echo " make setup-env-minikube ISTIO_VERSION=1.28.0 - Override Istio version" + @echo " make setup-env-minikube KUBERNETES_VERSION=v1.31.9 - Override Kubernetes version" @echo "" @echo "🚀 Minikube Examples:" @echo " make setup-minikube - Setup minikube cluster with metallb" @echo " make setup-istio-minikube - Install Istio for minikube environment" + @echo " make setup-minikube KUBERNETES_VERSION=v1.31.9 - Use Kubernetes 1.31.9" + @echo "" + @echo "🐳 Kind Examples:" + @echo " make setup-kind - Setup kind cluster with metallb" + @echo " make setup-istio-kind - Install Istio for kind environment" + @echo " make setup-kind KUBERNETES_VERSION=v1.31.9 - Use Kubernetes 1.31.9" @echo "" @echo "🏢 OpenShift Examples:" @echo " make setup-openshift - Setup OpenShift environment" @@ -171,16 +217,16 @@ help: @echo "" @echo "🧪 Testing Examples:" @echo " make run-tests - Run conformance tests with default settings" - @echo " make run-tests MODE=experimental - Run tests with experimental mode" - @echo " make run-tests IMPLEMENTATION_VERSION=v1.28.0 - Run tests with custom version" @echo " make run-tests TEST_BASE_DIR=../../../../../ - Run tests from custom directory" - @echo " make run-tests RUN_TEST=TestName - Run specific test only" + @echo " make run-tests RUN_TEST=InferencePoolAccepted - Run specific test only" @echo " make update-readme - Update README table with all available reports" + @echo "" # Setup minikube with metallb setup-minikube: @echo "Setting up minikube with metallb..." - minikube start + @echo "Starting minikube with Kubernetes $(KUBERNETES_VERSION)..." + minikube start --kubernetes-version=$(MINIKUBE_K8S_VERSION) minikube addons enable metallb @echo "Configuring metallb address pool..." $(file >/tmp/metallb-config.yaml,$(METALLB_CONFIG)) @@ -191,6 +237,30 @@ setup-minikube: kubectl apply -f /tmp/metallb-config.yaml @rm -f /tmp/metallb-config.yaml +# Setup kind with metallb +setup-kind: + @echo "Setting up kind with metallb..." + @if ! kind get clusters | grep -q "^kind$$"; then \ + echo "Creating kind cluster with Kubernetes $(KUBERNETES_VERSION)..."; \ + kind create cluster --image $(KIND_NODE_IMAGE); \ + else \ + echo "Kind cluster already exists"; \ + fi + @echo "Installing metallb..." + kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.7/config/manifests/metallb-native.yaml + @echo "Waiting for metallb to be ready..." + kubectl wait --namespace metallb-system --for=condition=available deployment/controller --timeout=90s + kubectl wait --namespace metallb-system --for=condition=ready pod --selector=component=controller --timeout=90s + kubectl wait --namespace metallb-system --for=condition=ready pod --selector=component=speaker --timeout=90s + @echo "Configuring metallb address pool..." + $(file >/tmp/metallb-kind-config.yaml,$(METALLB_KIND_CONFIG)) + @DOCKER_NETWORK=$$(docker network inspect -f '{{range .IPAM.Config}}{{.Gateway}}{{end}}' kind); \ + NETWORK_PREFIX=$${DOCKER_NETWORK%.*}; \ + echo "Using IP range: $${NETWORK_PREFIX}.200-$${NETWORK_PREFIX}.250"; \ + sed -i "s/NETWORK_PREFIX/$${NETWORK_PREFIX}/g" /tmp/metallb-kind-config.yaml + kubectl apply -f /tmp/metallb-kind-config.yaml + @rm -f /tmp/metallb-kind-config.yaml + # Setup OpenShift (alternative to minikube) setup-openshift: @echo "Setting up OpenShift environment..." @@ -287,6 +357,10 @@ setup-istio: $(ISTIOCTL_BIN) setup-istio-minikube: $(MAKE) setup-istio ISTIO_PROFILE=minimal +# Install Istio for kind environment +setup-istio-kind: + $(MAKE) setup-istio ISTIO_PROFILE=minimal + # Install Istio for OpenShift environment setup-istio-openshift: $(MAKE) setup-istio ISTIO_PROFILE=openshift @@ -396,6 +470,7 @@ clean: @echo "Cleaning up downloaded istioctl binaries..." @rm -f $(ISTIOCTL_DIR)/istioctl-* @echo "Note: If using minikube, run 'minikube delete' to completely clean up" + @echo "Note: If using kind, run 'kind delete cluster' to completely clean up" @echo "Note: If using OpenShift, additional cleanup may be needed depending on your cluster setup" @echo "Note: Run 'make clean-reports' to clean up generated reports and README table" diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index 1f799d9d7..9c1fc1242 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -10,7 +10,7 @@ ## Reproduce -To reproduce the test environment and run the conformance tests, choose **either** minikube **or** OpenShift as your deployment environment: +To reproduce the test environment and run the conformance tests, choose **one** of these deployment environments: ### Option A: Minikube Environment @@ -25,7 +25,20 @@ make run-tests make clean ``` -### Option B: OpenShift Environment +### Option B: Kind Environment + +```bash +# Set up the complete environment (kind, istio, CRDs, TLS) +make setup-env-kind + +# Run conformance tests +make run-tests + +# Clean up resources when done +make clean +``` + +### Option C: OpenShift Environment ```bash # Set up the complete environment (openshift, istio, CRDs, TLS) @@ -46,12 +59,19 @@ If you prefer to run individual setup steps: # Choose ONE of these deployment environments: make setup-minikube # Option A: Set up minikube with metallb # OR -make setup-openshift # Option B: Set up OpenShift environment +make setup-kind # Option B: Set up kind cluster with metallb +# OR +make setup-openshift # Option C: Set up OpenShift environment + +# Use specific Kubernetes version (works for both kind and minikube): +make setup-minikube KUBERNETES_VERSION=v1.31.9 +make setup-kind KUBERNETES_VERSION=v1.31.9 # Then continue with common setup steps: -make setup-istio # Install Istio (uses ISTIO_PROFILE variable) +make setup-istio # Install Istio (automatically detects hub) # OR use environment-specific targets: make setup-istio-minikube # Install Istio for minikube environment +make setup-istio-kind # Install Istio for kind environment make setup-istio-openshift # Install Istio for OpenShift environment make setup-gateway-api-crds # Apply Gateway API CRDs @@ -81,16 +101,24 @@ make setup-env-minikube # Override specific versions make setup-env-minikube ISTIO_VERSION=1.28.0 +make setup-env-kind GATEWAY_API_VERSION=v1.4.0 INFERENCE_EXTENSION_VERSION=v0.5.0 make setup-env-openshift GATEWAY_API_VERSION=v1.4.0 INFERENCE_EXTENSION_VERSION=v0.5.0 -# Use specific Istio profile -make setup-istio ISTIO_PROFILE=openshift +# Use specific Kubernetes version (works for both kind and minikube) +make setup-env-minikube KUBERNETES_VERSION=v1.31.9 +make setup-env-kind KUBERNETES_VERSION=v1.31.9 + +# Combine version overrides +make setup-env-minikube KUBERNETES_VERSION=v1.31.9 ISTIO_VERSION=1.28.0 -# Use custom Istio registry -make setup-istio ISTIO_HUB=docker.io/istio +# Use environment-specific Istio installation +make setup-istio-minikube # Install Istio for minikube environment +make setup-istio-kind # Install Istio for kind environment +make setup-istio-openshift # Install Istio for OpenShift environment -# Run tests from custom directory -make run-tests TEST_BASE_DIR=../../../../../ +# Run conformance tests +make run-tests # Run all conformance tests +make run-tests RUN_TEST=InferencePoolAccepted # Run specific test only # See all available options make help @@ -98,12 +126,11 @@ make help ### Available Variables: -**Setup Variables:** +**Main Variables:** - `GATEWAY_API_VERSION` - Gateway API version (default: v1.3.0) - `INFERENCE_EXTENSION_VERSION` - Inference Extension version (default: v0.4.0) +- `KUBERNETES_VERSION` - Kubernetes version for kind/minikube (default: v1.30.13) - `ISTIO_VERSION` - Istio version (default: 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7) -- `ISTIO_HUB` - Istio container registry hub (default: gcr.io/istio-testing) -- `ISTIO_PROFILE` - Istio profile (default: minimal) **Conformance Test Variables:** - `IMPLEMENTATION_VERSION` - Implementation version for report (default: same as ISTIO_VERSION) @@ -113,10 +140,10 @@ make help - `PROJECT` - Project name (default: istio) - `URL` - Project URL (default: https://istio.io) - `CONTACT` - Contact information (default: @istio/maintainers) +- `RUN_TEST` - Run specific test (default: empty, runs all tests) -**Directory Variables:** -- `TEST_BASE_DIR` - Test suite base directory (default: ../../../../..) -- `REPORT_BASE_DIR` - Report output directory (default: .) +**Advanced Variables:** +For advanced users who need to customize internal behavior, additional variables are available including `ISTIO_HUB`, `ISTIO_PROFILE`, `TEST_BASE_DIR`, `REPORT_BASE_DIR`, and others. See `make help` for a complete list. > **Note**: This Makefile expects to be run from within the `gateway-api-inference-extension` repository structure. The test suite is located at the repository root, while conformance reports are generated in the current directory. From e72068bf9c6e18801b47a80907a5fae79550658c Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Sun, 6 Jul 2025 01:08:51 +0200 Subject: [PATCH 09/13] fix: adjust parent README link --- conformance/reports/v0.4.0/gateway/istio/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index 9c1fc1242..29cd1add1 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -149,6 +149,6 @@ For advanced users who need to customize internal behavior, additional variables ### Conformance Testing -For detailed information about conformance testing, report generation, and requirements, see the [conformance README](../../README.md). +For detailed information about conformance testing, report generation, and requirements, see the [conformance README](../../../README.md). For available commands and options specific to this Istio implementation, run `make help` or see the `Makefile` in this directory. From dafba2856d9638045e0502c99ef2684733773334 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Sun, 6 Jul 2025 01:25:26 +0200 Subject: [PATCH 10/13] fix: no need to expose IMPLEMENTATION_VERSION --- conformance/reports/v0.4.0/gateway/istio/Makefile | 2 +- conformance/reports/v0.4.0/gateway/istio/README.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index 724cd432f..1c3e12766 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -166,7 +166,6 @@ help: @echo " • Override with ISTIO_HUB if needed for custom registries" @echo "" @echo "Conformance test variables (can be overridden):" - @echo " IMPLEMENTATION_VERSION - Implementation version for report (current: $(IMPLEMENTATION_VERSION))" @echo " MODE - Test mode (current: $(MODE))" @echo " PROFILE - Conformance profile (current: $(PROFILE))" @echo " ORGANIZATION - Organization name (current: $(ORGANIZATION))" @@ -176,6 +175,7 @@ help: @echo " RUN_TEST - Run specific test (current: $(RUN_TEST))" @echo "" @echo "Internal variables (advanced users only):" + @echo " IMPLEMENTATION_VERSION - Implementation version for report (current: $(IMPLEMENTATION_VERSION), derived from ISTIO_VERSION)" @echo " ISTIO_HUB - Istio container registry hub (current: $(ISTIO_HUB), auto-detected if empty)" @echo " ISTIO_PROFILE - Istio profile (current: $(ISTIO_PROFILE))" @echo " TEST_BASE_DIR - Test suite base directory (current: $(TEST_BASE_DIR))" diff --git a/conformance/reports/v0.4.0/gateway/istio/README.md b/conformance/reports/v0.4.0/gateway/istio/README.md index 29cd1add1..c9374f0c1 100644 --- a/conformance/reports/v0.4.0/gateway/istio/README.md +++ b/conformance/reports/v0.4.0/gateway/istio/README.md @@ -133,7 +133,6 @@ make help - `ISTIO_VERSION` - Istio version (default: 1.27-alpha.0551127f00634403cddd4634567e65a8ecc499a7) **Conformance Test Variables:** -- `IMPLEMENTATION_VERSION` - Implementation version for report (default: same as ISTIO_VERSION) - `MODE` - Test mode (default: default) - `PROFILE` - Conformance profile (default: gateway) - `ORGANIZATION` - Organization name (default: istio) From 6b9355b0c7c5f58eac4229cfc6856b9669f98e2c Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Mon, 21 Jul 2025 12:56:47 +0200 Subject: [PATCH 11/13] fix: do not fail on ns existing --- conformance/reports/v0.4.0/gateway/istio/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index 1c3e12766..2e3a7df46 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -382,7 +382,7 @@ setup-crds: setup-gateway-api-crds setup-inference-extension-crds # Setup TLS for EPP setup-tls: @echo "Setting up TLS for EPP..." - kubectl create namespace gateway-conformance-app-backend + -kubectl create namespace gateway-conformance-app-backend || true $(file >/tmp/tls-destination-rules.yaml,$(TLS_DESTINATION_RULES)) kubectl apply -f /tmp/tls-destination-rules.yaml @rm -f /tmp/tls-destination-rules.yaml From d4025202bbf239280f76d76e4a655b0e4b3e00f1 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Mon, 21 Jul 2025 16:10:03 +0200 Subject: [PATCH 12/13] fix: add SUPPORT_GATEWAY_API_INFERENCE_EXTENSION pilot env variable --- conformance/reports/v0.4.0/gateway/istio/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index 2e3a7df46..a4f77c256 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -351,7 +351,7 @@ setup-istio: $(ISTIOCTL_BIN) echo "If this is incorrect, specify ISTIO_HUB manually"; \ fi; \ echo "Installing Istio from $$HUB..."; \ - $(ISTIOCTL_BIN) install -y --set profile=$(ISTIO_PROFILE) --set values.global.hub=$$HUB --set values.global.tag=$(ISTIO_VERSION) + $(ISTIOCTL_BIN) install -y --set profile=$(ISTIO_PROFILE) --set values.global.hub=$$HUB --set values.global.tag=$(ISTIO_VERSION) --set values.pilot.env.SUPPORT_GATEWAY_API_INFERENCE_EXTENSION=true # Install Istio for minikube environment setup-istio-minikube: From b75d158a85837db5b5359829f4aab29508160001 Mon Sep 17 00:00:00 2001 From: Aslak Knutsen Date: Tue, 22 Jul 2025 13:13:43 +0200 Subject: [PATCH 13/13] add support for both new and old env variable enablement --- conformance/reports/v0.4.0/gateway/istio/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conformance/reports/v0.4.0/gateway/istio/Makefile b/conformance/reports/v0.4.0/gateway/istio/Makefile index a4f77c256..158664878 100644 --- a/conformance/reports/v0.4.0/gateway/istio/Makefile +++ b/conformance/reports/v0.4.0/gateway/istio/Makefile @@ -351,7 +351,7 @@ setup-istio: $(ISTIOCTL_BIN) echo "If this is incorrect, specify ISTIO_HUB manually"; \ fi; \ echo "Installing Istio from $$HUB..."; \ - $(ISTIOCTL_BIN) install -y --set profile=$(ISTIO_PROFILE) --set values.global.hub=$$HUB --set values.global.tag=$(ISTIO_VERSION) --set values.pilot.env.SUPPORT_GATEWAY_API_INFERENCE_EXTENSION=true + $(ISTIOCTL_BIN) install -y --set profile=$(ISTIO_PROFILE) --set values.global.hub=$$HUB --set values.global.tag=$(ISTIO_VERSION) --set values.pilot.env.SUPPORT_GATEWAY_API_INFERENCE_EXTENSION=true --set values.pilot.env.ENABLE_GATEWAY_API_INFERENCE_EXTENSION=true # Install Istio for minikube environment setup-istio-minikube: