$ kubectl apply -f manifest.yaml pod/client created deployment.apps/weight-echo-v1 created deployment.apps/weight-echo-v2 created service/weight-echo created destinationrule.networking.istio.io/weight-echo-dr created virtualservice.networking.istio.io/weight-echo-vs created $ kubectl -n istio-vt-t69 wait --for=condition=Ready pod/client --timeout=90s pod/client condition met $ kubectl -n istio-vt-t69 wait --for=condition=available deploy/weight-echo-v1 deploy/weight-echo-v2 --timeout=60s deployment.apps/weight-echo-v1 condition met deployment.apps/weight-echo-v2 condition met $ sleep 5 (slept 5s) $ istioctl proxy-config route client.istio-vt-t69 -o json | jq '[.[] | select(.virtualHosts[]?.domains[]? == "weight-echo.istio-vt-t69.svc.homelab.local")][0].virtualHosts[0].routes[0].route.weightedClusters.clusters' null --- DIAGNOSTIC: spec jq query returned null because it grabs virtualHosts[0] (the FIRST vhost in the matching routeConfig), but the routeConfig named "80" actually contains TWO virtualHosts on the same route table: one auto-generated for the k8s Service FQDN (weight-echo.istio-vt-t69.svc.cluster.local, no VS applied) and one for the VirtualService-declared host (weight-echo.istio-vt-t69.svc.homelab.local, VS applied). The naive select() matches the routeConfig by domain but then indexes virtualHosts[0] which happens to be the cluster.local vhost, not the homelab.local one. Corrected query selecting the actual matching virtualHost: $ istioctl proxy-config route client.istio-vt-t69 -o json | jq '[.[].virtualHosts[]? | select(.domains[]? == "weight-echo.istio-vt-t69.svc.homelab.local")][0].routes[0].route.weightedClusters.clusters' [ { "name": "outbound|80|v1|weight-echo.istio-vt-t69.svc.homelab.local", "weight": 80 }, { "name": "outbound|80|v2|weight-echo.istio-vt-t69.svc.homelab.local", "weight": 20 } ] --- Optional sanity: actual traffic split observed over 20 requests $ for i in $(seq 1 20); do kubectl -n istio-vt-t69 exec client -c curl -- curl -s http://weight-echo.istio-vt-t69.svc.homelab.local; echo; done | sort | uniq -c 20