Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save nerdalert/896716f4776fd5d49b6a8455c67ea20e to your computer and use it in GitHub Desktop.

Select an option

Save nerdalert/896716f4776fd5d49b6a8455c67ea20e to your computer and use it in GitHub Desktop.
$ ./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
==========================================
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment