trace: POST /v2/orders host=api.acme.com x-canary:true
✔ rule #1 MATCHED — matched
result: rule #1 of prod/api-routes matches → api.prod:8080 subset v2 (80%), api.prod:8080 subset v3 (20%)
▾gateway istio-system/public-gateway — :443 HTTPS (SIMPLE TLS)4 hosts · 13 rules
▾gateway istio-system/public-gateway — :80 HTTP4 hosts · 13 rules
▾gateway istio-system/public-gateway — :8080 HTTP1 host · 2 rules
▾gateway istio-system/api-gateway — :443 HTTPS (MUTUAL TLS)1 host · 6 rules
▾gateway istio-system/grpc-gateway — :8443 GRPC (SIMPLE TLS)1 host · 2 rules
▾gateway istio-system/grpc-gateway — :9090 HTTP21 host · 1 rule
▾gateway istio-system/edge-l4-gateway — :15443 TLS (PASSTHROUGH TLS)0 hosts · 0 rules
▾gateway istio-system/edge-l4-gateway — :3306 TCP0 hosts · 0 rules
▾mesh routing (no gateway)3 hosts · 5 rules
*.tenants.acme.com
via istio-system/public-gateway:443, istio-system/public-gateway:80
| * | → | web.prod:80(stable) | |
| /app* {authority~[a-z0-9-]+\.tenants\.acme\.com} | → | web.prod:80(stable) |
acme.com
via istio-system/public-gateway:443, istio-system/public-gateway:80
| /* | → | redirect:301:https://www.acme.com/ |
api.acme.com
via istio-system/api-gateway:443
| /v1* | → | redirect:302:/v2 | |
| /v2* | → | api.prod:8080(v1) | mirror api-shadow.prod:8080=10%, rewrite / |
| /v2* {header x-canary=true, method=POST} | → | api.prod:8080(v2)=80% api.prod:8080(v3)=20% | mirror api-shadow.prod:8080, retry 3x, timeout 5s |
| /v2/cart* {header authorization, scheme=https} | → | cart.prod:8080 | |
| /v2/catalog* {?category~.+} | → | catalog.prod:8080 | |
| /v2/payments* {port=443} | → | payments.payments:8080(v2) |
grpc.acme.com
via istio-system/grpc-gateway:8443
| * | → | api.prod:9090 | |
| /acme.orders.v1.Orders/* | → | api.prod:9090 | retry 2x, timeout 10s |
internal.acme.com
via istio-system/public-gateway:443, istio-system/public-gateway:80, istio-system/public-gateway:8080
| * | → | internal-portal.prod:8080 | |
| /* {sourceLabel team=platform} | → | internal-portal.prod:8080 |
inventory
via mesh
| /read* {method~GET|HEAD} | → | inventory.internal:8080 | timeout 1s |
| /write* {method=POST} | → | inventory.internal:8080 | retry 2x |
notifications
via mesh
| * | → | notifications.internal:8080 |
orders
via mesh
| * | → | orders.internal:8080(v1) | fault |
| * {header x-experiment=orders-v2} | → | orders.internal:8080(v2) |
stream.acme.com
via istio-system/grpc-gateway:9090
| * | → | stream.prod:9090 |
www.acme.com
via istio-system/public-gateway:443, istio-system/public-gateway:80
| * {!header x-opt-out, header x-acme-channel~beta|canary} | → | web.prod:80(canary) | CORS, fault |
| * {header cookie^=acme_beta=} | → | web.prod:80(canary) | CORS, fault |
| /* | → | web.prod:80(stable) | |
| /account* {method~GET|HEAD} | → | web.prod:80(stable) | headers, rewrite regex |
| /assets* | → | static-assets.prod:80 | headers, rewrite /, timeout 3s |
| /healthz | → | direct:200 | |
| /home | → | redirect:301:/ | |
| /shop* | → | web.prod:80(stable)=90% web.prod:80(canary)=10% | retry 3x |
| ~/search/[a-z0-9-]+ {?debug, ?page=1, ?q~.+} | → | search.prod:8080 | mirror recommendations.prod:8080=25% |