Set up Envoy Gateway as an API gateway with authentication, rate limiting, and backend resilience
How this skill is triggered — by the user, by Claude, or both
Slash command
/envoy-gateway-adopters:eg-api-gatewayThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You set up Envoy Gateway as a production API gateway -- protecting backend APIs with authentication, rate limiting, and backend resilience. This is the right setup for teams that need to expose APIs to external consumers or frontend clients with proper access control and traffic management.
You set up Envoy Gateway as a production API gateway -- protecting backend APIs with authentication, rate limiting, and backend resilience. This is the right setup for teams that need to expose APIs to external consumers or frontend clients with proper access control and traffic management.
Ask these questions before generating configuration. Skip any that the user or the orchestrator has already answered.
API hostname: What is your API base URL? (e.g., api.example.com)
API services: How many API services or versions do you need to route?
/v1/users -> user-service:8080, /v1/orders -> order-service:8080Authentication: What authentication method do you need?
https://auth.example.com/.well-known/jwks.json)Rate limiting: Do you need per-client rate limiting?
sub or client_id, source IP)Request transformation: Do you need request or response transformation?
X-Request-ID, X-Client-ID from JWT claims)/api prefix before forwarding)Server header)Traffic volume: What is your expected traffic volume?
API versioning: Do you need canary or weighted routing for API versions?
/v2/* traffic to a new backend for testingExecute these phases in order. Each phase builds on the previous one and uses specific skills to generate resources.
Skills: /eg-install, /eg-gateway, /eg-tls
Set up the foundation:
Skill: /eg-route
Create HTTPRoute resources for each API service:
/v1/users, /v1/orders)/v1/* and /v2/*Order rules from most specific to least specific. The Gateway API evaluates rules by specificity, but explicit ordering improves readability.
Skill: /eg-auth
Create SecurityPolicy resources for API authentication:
sub, scope, or client_id) into request headers so backend services can use them for authorization.X-API-Key) or a query parameter.For APIs with mixed authentication needs, attach different SecurityPolicies to different HTTPRoutes:
Skill: /eg-rate-limit
Create rate limiting configuration based on the user's requirements:
Local rate limits (no Redis required): Create a BackendTrafficPolicy with local rate limit rules. These are per-Envoy-replica, so actual limits scale with the number of replicas.
Global rate limits (requires Redis): Configure global rate limiting with a Redis backend for consistent limits across all Envoy replicas. This requires:
Rate limit by the key the user specified:
x-api-key header valuex-jwt-claim-client-id)remote_addressInclude X-RateLimit-Limit and X-RateLimit-Remaining response headers so API consumers can track their usage.
Skill: /eg-backend-policy
Create BackendTrafficPolicy resources for each critical backend:
Skills: /eg-client-policy, /eg-observability
Configure client-facing policies for API traffic:
Set up observability:
After generating all manifests, provide curl commands to verify each layer:
# Get the Gateway address
export GATEWAY_HOST=$(kubectl get gateway/eg -o jsonpath='{.status.addresses[0].value}')
export API_HOST="<api-hostname>"
# 1. Verify Gateway is programmed
kubectl get gateway eg -o wide
# 2. Verify all routes are accepted
kubectl get httproute -A
kubectl get backendtrafficpolicy -A
kubectl get securitypolicy -A
# 3. Test unauthenticated request (should be rejected)
curl -v https://$API_HOST/v1/users \
--resolve "$API_HOST:443:$GATEWAY_HOST"
# Expected: 401 Unauthorized
# 4. Test authenticated request
curl -v https://$API_HOST/v1/users \
-H "Authorization: Bearer <valid-jwt-token>" \
--resolve "$API_HOST:443:$GATEWAY_HOST"
# Expected: 200 OK with response from user-service
# 5. Test rate limiting (send requests in a loop)
for i in $(seq 1 20); do
curl -s -o /dev/null -w "%{http_code} " \
https://$API_HOST/v1/users \
-H "Authorization: Bearer <valid-jwt-token>" \
--resolve "$API_HOST:443:$GATEWAY_HOST"
done
echo
# Expected: 200s followed by 429 Too Many Requests when limit is hit
# 6. Check rate limit headers
curl -v https://$API_HOST/v1/users \
-H "Authorization: Bearer <valid-jwt-token>" \
--resolve "$API_HOST:443:$GATEWAY_HOST" 2>&1 | grep -i x-ratelimit
# Expected: X-RateLimit-Limit and X-RateLimit-Remaining headers
# 7. Verify backend health checks
kubectl get backendtrafficpolicy -A -o yaml | grep -A5 healthCheck
# 8. Check access logs
kubectl logs -n envoy-gateway-system -l gateway.envoyproxy.io/owning-gateway-name=eg -c envoy --tail=20
Replace <api-hostname> and <valid-jwt-token> with actual values in the output.
failure_mode_deny: false (fail open) if API availability is more important than strict rate enforcement, or failure_mode_deny: true (fail closed) if rate enforcement is critical.x-jwt-claim-sub) so backend services can use them without re-validating the token.npx claudepluginhub missberg/envoy-skills --plugin envoy-gateway-adoptersDeploys and configures Kong or Traefik API gateway for traffic management, authentication, rate limiting, and routing. Use when unifying multiple backend services.
Configures API gateways like Kong, Nginx, AWS API Gateway, and Traefik for routing, authentication, rate limiting, and request transformation in microservices.
Configures API gateways (Kong, AWS, Azure, Apigee) as centralized security enforcement points for authentication, rate limiting, request validation, and threat protection.