$ ./scripts/validate.sh all
Discovering gateway address...
Found LoadBalancer hostname: http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com
==========================================
Iteration 1: httpbin.org (no auth)
==========================================
Resources:
NAME HOSTS LOCATION RESOLUTION AGE
serviceentry.networking.istio.io/httpbin-external ["httpbin.org"] MESH_EXTERNAL DNS 17m
NAME HOST AGE
destinationrule.networking.istio.io/httpbin-tls httpbin.org 17m
NAME HOSTNAMES AGE
httproute.gateway.networking.k8s.io/httpbin-route 17m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/httpbin-external ExternalName <none> httpbin.org 443/TCP 17m
--- GET /get ---
curl -s http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com/get -H 'Host: ai-gateway.example.com'
{
"args": {},
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/8.5.0",
"X-Amzn-Trace-Id": "Root=1-69aced55-15641dd75a7ade5f0571f129",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-Decorator-Operation": "httpbin.org:443/*",
"X-Envoy-External-Address": "100.64.0.2",
"X-Envoy-Original-Host": "ai-gateway.example.com",
"X-Envoy-Peer-Metadata": "ChoKCkNMVVNURVJfSUQSDBoKS3ViZXJuZXRlcwqAAQoGTEFCRUxTEnYqdApBCh9zZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1uYW1lEh4aHGV4dGVybmFsLW1vZGVsLWdhdGV3YXktaXN0aW8KLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CjcKBE5BTUUSLxotZXh0ZXJuYWwtbW9kZWwtZ2F0ZXdheS1pc3Rpby03YmNmNzVkNzg3LWN4cWxyCiIKCU5BTUVTUEFDRRIVGhNleHRlcm5hbC1tb2RlbC1kZW1vCmwKBU9XTkVSEmMaYWt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9leHRlcm5hbC1tb2RlbC1kZW1vL2RlcGxveW1lbnRzL2V4dGVybmFsLW1vZGVsLWdhdGV3YXktaXN0aW8KLwoNV09SS0xPQURfTkFNRRIeGhxleHRlcm5hbC1tb2RlbC1nYXRld2F5LWlzdGlv",
"X-Envoy-Peer-Metadata-Id": "router~10.129.0.36~external-model-gateway-istio-7bcf75d787-cxqlr.external-model-demo~external-model-demo.svc.cluster.local"
},
"origin": "100.64.0.2, 34.196.240.194",
"url": "https://httpbin.org/get"
}
--- POST /post ---
curl -s http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com/post -H 'Host: ai-gateway.example.com' -H 'Content-Type: application/json' -d '{"test": "hello from istio mesh"}'
{
"args": {},
"data": "{\"test\": \"hello from istio mesh\"}",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Content-Length": "33",
"Content-Type": "application/json",
"Host": "httpbin.org",
"User-Agent": "curl/8.5.0",
"X-Amzn-Trace-Id": "Root=1-69aced55-1e7630277e2b6a4e3e9feb27",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-Decorator-Operation": "httpbin.org:443/*",
"X-Envoy-External-Address": "100.64.0.3",
"X-Envoy-Original-Host": "ai-gateway.example.com",
"X-Envoy-Peer-Metadata": "ChoKCkNMVVNURVJfSUQSDBoKS3ViZXJuZXRlcwqAAQoGTEFCRUxTEnYqdApBCh9zZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1uYW1lEh4aHGV4dGVybmFsLW1vZGVsLWdhdGV3YXktaXN0aW8KLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CjcKBE5BTUUSLxotZXh0ZXJuYWwtbW9kZWwtZ2F0ZXdheS1pc3Rpby03YmNmNzVkNzg3LWN4cWxyCiIKCU5BTUVTUEFDRRIVGhNleHRlcm5hbC1tb2RlbC1kZW1vCmwKBU9XTkVSEmMaYWt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9leHRlcm5hbC1tb2RlbC1kZW1vL2RlcGxveW1lbnRzL2V4dGVybmFsLW1vZGVsLWdhdGV3YXktaXN0aW8KLwoNV09SS0xPQURfTkFNRRIeGhxleHRlcm5hbC1tb2RlbC1nYXRld2F5LWlzdGlv",
"X-Envoy-Peer-Metadata-Id": "router~10.129.0.36~external-model-gateway-istio-7bcf75d787-cxqlr.external-model-demo~external-model-demo.svc.cluster.local"
},
"json": {
"test": "hello from istio mesh"
},
"origin": "100.64.0.3, 34.196.240.194",
"url": "https://httpbin.org/post"
}
--- GET /headers ---
curl -s http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com/headers -H 'Host: ai-gateway.example.com'
{
"headers": {
"Accept": "*/*",
"Host": "httpbin.org",
"User-Agent": "curl/8.5.0",
"X-Amzn-Trace-Id": "Root=1-69aced56-1e0c357718fca2f40088ff90",
"X-Envoy-Attempt-Count": "1",
"X-Envoy-Decorator-Operation": "httpbin.org:443/*",
"X-Envoy-External-Address": "100.64.0.2",
"X-Envoy-Original-Host": "ai-gateway.example.com",
"X-Envoy-Peer-Metadata": "ChoKCkNMVVNURVJfSUQSDBoKS3ViZXJuZXRlcwqAAQoGTEFCRUxTEnYqdApBCh9zZXJ2aWNlLmlzdGlvLmlvL2Nhbm9uaWNhbC1uYW1lEh4aHGV4dGVybmFsLW1vZGVsLWdhdGV3YXktaXN0aW8KLwojc2VydmljZS5pc3Rpby5pby9jYW5vbmljYWwtcmV2aXNpb24SCBoGbGF0ZXN0CjcKBE5BTUUSLxotZXh0ZXJuYWwtbW9kZWwtZ2F0ZXdheS1pc3Rpby03YmNmNzVkNzg3LWN4cWxyCiIKCU5BTUVTUEFDRRIVGhNleHRlcm5hbC1tb2RlbC1kZW1vCmwKBU9XTkVSEmMaYWt1YmVybmV0ZXM6Ly9hcGlzL2FwcHMvdjEvbmFtZXNwYWNlcy9leHRlcm5hbC1tb2RlbC1kZW1vL2RlcGxveW1lbnRzL2V4dGVybmFsLW1vZGVsLWdhdGV3YXktaXN0aW8KLwoNV09SS0xPQURfTkFNRRIeGhxleHRlcm5hbC1tb2RlbC1nYXRld2F5LWlzdGlv",
"X-Envoy-Peer-Metadata-Id": "router~10.129.0.36~external-model-gateway-istio-7bcf75d787-cxqlr.external-model-demo~external-model-demo.svc.cluster.local"
}
}
--- GET /status/418 ---
curl -s -o /dev/null -w '%{http_code}' http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com/status/418 -H 'Host: ai-gateway.example.com'
HTTP Status: 418
==========================================
Iteration 2: api.openai.com (with API key)
==========================================
NOTE: The client does NOT send an Authorization header.
The gateway injects it via HTTPRoute RequestHeaderModifier.
Resources:
NAME HOSTS LOCATION RESOLUTION AGE
serviceentry.networking.istio.io/openai-api ["api.openai.com"] MESH_EXTERNAL DNS 6m32s
NAME HOST AGE
destinationrule.networking.istio.io/openai-tls api.openai.com 6m33s
NAME HOSTNAMES AGE
httproute.gateway.networking.k8s.io/openai-route 6m32s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/openai-external ExternalName <none> api.openai.com 443/TCP 6m32s
--- GET /v1/models ---
curl -s http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com/v1/models
[
{
"id": "gpt-4-0613",
"object": "model",
"created": 1686588896,
"owned_by": "openai"
},
{
"id": "gpt-4",
"object": "model",
"created": 1687882411,
"owned_by": "openai"
},
{
"id": "gpt-3.5-turbo",
"object": "model",
"created": 1677610602,
"owned_by": "openai"
}
]
--- POST /v1/chat/completions ---
curl -s http://a38603e70f1d34daa841061646a16427-402819449.us-east-1.elb.amazonaws.com/v1/chat/completions -H 'Content-Type: application/json' -d '{"model": "gpt-4o-mini", "messages": [{"role": "user", "content": "Say hello in one word."}], "max_tokens": 5, "temperature": 0}'
{
"id": "chatcmpl-DGz8YPZsD6qlBJAoDtZCqdDGUw6aH",
"object": "chat.completion",
"created": 1772940630,
"model": "gpt-4o-mini-2024-07-18",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello!",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 13,
"completion_tokens": 2,
"total_tokens": 15,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_a1ddba3226"
}
==========================================
Validation complete
==========================================
Created
March 8, 2026 03:36
-
-
Save nerdalert/896716f4776fd5d49b6a8455c67ea20e to your computer and use it in GitHub Desktop.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment