2756 lines
111 KiB
YAML
2756 lines
111 KiB
YAML
---
|
|
apiVersion: v1
|
|
kind: ConfigMap
|
|
metadata:
|
|
name: gateway-config
|
|
namespace: lux-gateway
|
|
data:
|
|
gateway.json: |
|
|
{
|
|
"version": 3,
|
|
"name": "Lux API Gateway",
|
|
"port": 8080,
|
|
"timeout": "60s",
|
|
"cache_ttl": "0s",
|
|
"output_encoding": "no-op",
|
|
"extra_config": {
|
|
"router": {
|
|
"return_error_msg": false
|
|
},
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 10000,
|
|
"client_max_rate": 500,
|
|
"strategy": "ip"
|
|
},
|
|
"qos/ratelimit/service": {
|
|
"max_rate": 10000,
|
|
"capacity": 10000
|
|
},
|
|
"security/cors": {
|
|
"allow_origins": [
|
|
"https://*.lux.network",
|
|
"https://*.lux.exchange",
|
|
"https://lux.network",
|
|
"https://lux.exchange",
|
|
"https://lux.market"
|
|
],
|
|
"allow_methods": [
|
|
"GET",
|
|
"POST",
|
|
"OPTIONS"
|
|
],
|
|
"allow_headers": [
|
|
"Content-Type",
|
|
"Authorization"
|
|
],
|
|
"expose_headers": [
|
|
"Content-Length"
|
|
],
|
|
"max_age": "12h"
|
|
},
|
|
"security/http": {
|
|
"allowed_hosts": [],
|
|
"browser_xss_filter": true,
|
|
"content_type_nosniff": true,
|
|
"custom_frame_options_value": "DENY",
|
|
"force_sts_header": true,
|
|
"sts_include_subdomains": true,
|
|
"sts_seconds": 31536000
|
|
},
|
|
"modifier/response-headers-blacklist": {
|
|
"blacklist": [
|
|
"X-Gateway-Completed",
|
|
"node-id",
|
|
"Node-Id",
|
|
"Server"
|
|
]
|
|
}
|
|
},
|
|
"endpoints": [
|
|
{
|
|
"endpoint": "/v1/chain/C/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/C/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/ws",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/P",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/P",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/X",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/exchange",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/D/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/chain/D/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/ws",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/info",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/info",
|
|
"host": [
|
|
"http://info-filter.lux-mainnet.svc.cluster.local:8080"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"validation/cel": [
|
|
{
|
|
"check_expr": "req_body.matches('.*\"info\\\\.getNetworkID\".*') || req_body.matches('.*\"info\\\\.getNetworkName\".*') || req_body.matches('.*\"info\\\\.getBlockchainID\".*') || req_body.matches('.*\"info\\\\.isBootstrapped\".*')",
|
|
"message": "Method not allowed: only info.getNetworkID, info.getNetworkName, info.getBlockchainID, and info.isBootstrapped are permitted"
|
|
}
|
|
],
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 50,
|
|
"client_max_rate": 10,
|
|
"strategy": "ip"
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/v1/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/health",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/C/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/C/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/ws",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/P",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/P",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/X",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/exchange",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/D/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/D/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/ws",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/dex/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/info",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/info",
|
|
"host": [
|
|
"http://info-filter.lux-mainnet.svc.cluster.local:8080"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"validation/cel": [
|
|
{
|
|
"check_expr": "req_body.matches('.*\"info\\\\.getNetworkID\".*') || req_body.matches('.*\"info\\\\.getNetworkName\".*') || req_body.matches('.*\"info\\\\.getBlockchainID\".*') || req_body.matches('.*\"info\\\\.isBootstrapped\".*')",
|
|
"message": "Method not allowed: only info.getNetworkID, info.getNetworkName, info.getBlockchainID, and info.isBootstrapped are permitted"
|
|
}
|
|
],
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 50,
|
|
"client_max_rate": 10,
|
|
"strategy": "ip"
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/health",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/C/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/C/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/ws",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/P",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/P",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/X",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/exchange",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/D/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/D/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/ws",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/dex/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/health",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/C/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/C/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/C/ws",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/P",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/P",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/X",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/exchange",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/X",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/D/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/D/ws",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/ws",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/dex/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/D/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/health",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/health",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/info",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/info",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"validation/cel": [
|
|
{
|
|
"check_expr": "req_body.matches('.*\"info\\\\.getNetworkID\".*') || req_body.matches('.*\"info\\\\.getNetworkName\".*') || req_body.matches('.*\"info\\\\.getBlockchainID\".*') || req_body.matches('.*\"info\\\\.isBootstrapped\".*')",
|
|
"message": "Method not allowed: only info.getNetworkID, info.getNetworkName, info.getBlockchainID, and info.isBootstrapped are permitted"
|
|
}
|
|
],
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 50,
|
|
"client_max_rate": 10,
|
|
"strategy": "ip"
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/info",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/info",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"validation/cel": [
|
|
{
|
|
"check_expr": "req_body.matches('.*\"info\\\\.getNetworkID\".*') || req_body.matches('.*\"info\\\\.getNetworkName\".*') || req_body.matches('.*\"info\\\\.getBlockchainID\".*') || req_body.matches('.*\"info\\\\.isBootstrapped\".*')",
|
|
"message": "Method not allowed: only info.getNetworkID, info.getNetworkName, info.getBlockchainID, and info.isBootstrapped are permitted"
|
|
}
|
|
],
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 50,
|
|
"client_max_rate": 10,
|
|
"strategy": "ip"
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/2Y625Kvdd4wZ5LKx9kLSf1jGALyARmXVN1YsTb4F3Hzv4bPDbp/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2Y625Kvdd4wZ5LKx9kLSf1jGALyARmXVN1YsTb4F3Hzv4bPDbp/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/zoo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2Y625Kvdd4wZ5LKx9kLSf1jGALyARmXVN1YsTb4F3Hzv4bPDbp/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/2GiQb73CeJESjc4omFv2YtQHZrRgJf25NXPzAr5J6UNHRcDV2F/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2GiQb73CeJESjc4omFv2YtQHZrRgJf25NXPzAr5J6UNHRcDV2F/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/hanzo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2GiQb73CeJESjc4omFv2YtQHZrRgJf25NXPzAr5J6UNHRcDV2F/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/rtjwvtE1tEvrokmpeYdTq7b2zqZgmybKwR5MLjKMGAR1W78dQ/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/rtjwvtE1tEvrokmpeYdTq7b2zqZgmybKwR5MLjKMGAR1W78dQ/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/spc/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/rtjwvtE1tEvrokmpeYdTq7b2zqZgmybKwR5MLjKMGAR1W78dQ/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/2pUskxqaL5Bpx7uRUGG1fDjPckjxQ4UKX4sLKeaS1NdSVBJd3F/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2pUskxqaL5Bpx7uRUGG1fDjPckjxQ4UKX4sLKeaS1NdSVBJd3F/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/mainnet/v1/chain/pars/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2pUskxqaL5Bpx7uRUGG1fDjPckjxQ4UKX4sLKeaS1NdSVBJd3F/rpc",
|
|
"host": [
|
|
"http://luxd-headless.lux-mainnet.svc.cluster.local:9630"
|
|
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/2BSjBuuRHUMGdhw9HzcmiRMtWEBsVcS98tjeF3x5F99T1BfbQo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2BSjBuuRHUMGdhw9HzcmiRMtWEBsVcS98tjeF3x5F99T1BfbQo/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/zoo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2BSjBuuRHUMGdhw9HzcmiRMtWEBsVcS98tjeF3x5F99T1BfbQo/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/2ZUpGYPyaDsmuwnMUrhkcP3C24RYHvGWTZZYPaNr4oPPdUmnh3/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2ZUpGYPyaDsmuwnMUrhkcP3C24RYHvGWTZZYPaNr4oPPdUmnh3/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/hanzo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2ZUpGYPyaDsmuwnMUrhkcP3C24RYHvGWTZZYPaNr4oPPdUmnh3/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/Sd9bKzGu5Mzh6nafNecxicWJLdDmc9DB2aQPN6EUb1KfknReh/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/Sd9bKzGu5Mzh6nafNecxicWJLdDmc9DB2aQPN6EUb1KfknReh/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/spc/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/Sd9bKzGu5Mzh6nafNecxicWJLdDmc9DB2aQPN6EUb1KfknReh/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/26a3qkQ5VzTwFDBerz2a9kte8GPqS1wJpguc9x4BHz26YXrtL9/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/26a3qkQ5VzTwFDBerz2a9kte8GPqS1wJpguc9x4BHz26YXrtL9/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/testnet/v1/chain/pars/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/26a3qkQ5VzTwFDBerz2a9kte8GPqS1wJpguc9x4BHz26YXrtL9/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-1.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-2.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-3.luxd-headless.lux-testnet.svc.cluster.local:9640",
|
|
"http://luxd-4.luxd-headless.lux-testnet.svc.cluster.local:9640"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/2caKCdNop9C4oAPR1kYihN53HeSRDXD3JyMKS7ntfcpQYucmii/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2caKCdNop9C4oAPR1kYihN53HeSRDXD3JyMKS7ntfcpQYucmii/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/zoo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/2caKCdNop9C4oAPR1kYihN53HeSRDXD3JyMKS7ntfcpQYucmii/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/tecXMucYDxwN65mebPE6cvQ9GynG6Y5WEvwGFsY3xVDWHxiqT/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/tecXMucYDxwN65mebPE6cvQ9GynG6Y5WEvwGFsY3xVDWHxiqT/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/hanzo/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/tecXMucYDxwN65mebPE6cvQ9GynG6Y5WEvwGFsY3xVDWHxiqT/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/213ZsFLRCBSmrii4huQqa6S3SxYPP8ec6dPEn6ad4CtLk3RdXp/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/213ZsFLRCBSmrii4huQqa6S3SxYPP8ec6dPEn6ad4CtLk3RdXp/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/spc/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/213ZsFLRCBSmrii4huQqa6S3SxYPP8ec6dPEn6ad4CtLk3RdXp/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/MEGAgimfcodi7QaqCruFpTkNM6fqu7ZduLmWJJjGQwUg8uDPJ/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/MEGAgimfcodi7QaqCruFpTkNM6fqu7ZduLmWJJjGQwUg8uDPJ/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op",
|
|
"extra_config": {
|
|
"qos/http-cache": {},
|
|
"qos/circuit-breaker": {
|
|
"interval": 60,
|
|
"timeout": 10,
|
|
"max_errors": 3,
|
|
"log_status_change": true
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
},
|
|
"proxy": {
|
|
"sequential": false
|
|
},
|
|
"qos/retry": {
|
|
"max_retries": 2,
|
|
"backoff_strategy": "exponential"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"endpoint": "/devnet/v1/chain/pars/rpc",
|
|
"method": "POST",
|
|
"output_encoding": "no-op",
|
|
"backend": [
|
|
{
|
|
"url_pattern": "/v1/chain/MEGAgimfcodi7QaqCruFpTkNM6fqu7ZduLmWJJjGQwUg8uDPJ/rpc",
|
|
"host": [
|
|
"http://luxd-0.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-1.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-2.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-3.luxd-headless.lux-devnet.svc.cluster.local:9650",
|
|
"http://luxd-4.luxd-headless.lux-devnet.svc.cluster.local:9650"
|
|
],
|
|
"encoding": "no-op"
|
|
}
|
|
],
|
|
"extra_config": {
|
|
"qos/ratelimit/router": {
|
|
"max_rate": 100,
|
|
"client_max_rate": 20,
|
|
"strategy": "ip",
|
|
"capacity": 200
|
|
}
|
|
}
|
|
}
|
|
]
|
|
}
|
|
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: gateway
|
|
namespace: lux-gateway
|
|
labels:
|
|
app: gateway
|
|
spec:
|
|
replicas: 2
|
|
selector:
|
|
matchLabels:
|
|
app: gateway
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: gateway
|
|
spec:
|
|
containers:
|
|
- name: gateway
|
|
image: ghcr.io/hanzoai/gateway:0.1.0
|
|
ports:
|
|
- containerPort: 8080
|
|
volumeMounts:
|
|
- name: config
|
|
mountPath: /etc/gateway
|
|
livenessProbe:
|
|
httpGet:
|
|
path: /__health
|
|
port: 8080
|
|
initialDelaySeconds: 5
|
|
periodSeconds: 15
|
|
readinessProbe:
|
|
httpGet:
|
|
path: /__health
|
|
port: 8080
|
|
initialDelaySeconds: 3
|
|
periodSeconds: 5
|
|
resources:
|
|
requests:
|
|
cpu: 100m
|
|
memory: 128Mi
|
|
limits:
|
|
cpu: 500m
|
|
memory: 256Mi
|
|
volumes:
|
|
- name: config
|
|
configMap:
|
|
name: gateway-config
|
|
---
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: gateway
|
|
namespace: lux-gateway
|
|
labels:
|
|
app: gateway
|
|
spec:
|
|
type: ClusterIP
|
|
ports:
|
|
- port: 8080
|
|
targetPort: 8080
|
|
protocol: TCP
|
|
selector:
|
|
app: gateway
|
|
---
|
|
###############################################################################
|
|
# CORS Middleware: restrict to known Lux origins only.
|
|
# Replaces the old cors-allow-all wildcard from lux-system namespace.
|
|
# See: security audit 2026-03-24 — CORS wildcard on API gateway
|
|
###############################################################################
|
|
apiVersion: hanzo.ai/v1alpha1
|
|
kind: Middleware
|
|
metadata:
|
|
name: gateway-cors
|
|
namespace: lux-gateway
|
|
labels:
|
|
app: gateway
|
|
spec:
|
|
headers:
|
|
accessControlAllowMethods:
|
|
- GET
|
|
- POST
|
|
- OPTIONS
|
|
accessControlAllowHeaders:
|
|
- Content-Type
|
|
- Authorization
|
|
accessControlAllowOriginListRegex:
|
|
- "^https://([a-z0-9-]+\\.)?lux\\.network$"
|
|
- "^https://([a-z0-9-]+\\.)?lux\\.exchange$"
|
|
- "^https://lux\\.market$"
|
|
accessControlMaxAge: 43200
|
|
addVaryHeader: true
|
|
---
|
|
apiVersion: hanzo.ai/v1alpha1
|
|
kind: IngressRoute
|
|
metadata:
|
|
name: gateway
|
|
namespace: lux-gateway
|
|
spec:
|
|
entryPoints:
|
|
- websecure
|
|
routes:
|
|
- match: Host(`api.lux.network`)
|
|
kind: Rule
|
|
middlewares:
|
|
- name: gateway-cors
|
|
services:
|
|
- name: gateway
|
|
port: 8080
|
|
passHostHeader: false
|
|
- match: Host(`api.testnet.lux.network`)
|
|
kind: Rule
|
|
middlewares:
|
|
- name: gateway-cors
|
|
services:
|
|
- name: gateway
|
|
port: 8080
|
|
passHostHeader: false
|
|
- match: Host(`api.devnet.lux.network`)
|
|
kind: Rule
|
|
middlewares:
|
|
- name: gateway-cors
|
|
services:
|
|
- name: gateway
|
|
port: 8080
|
|
passHostHeader: false
|
|
tls:
|
|
certResolver: letsencrypt
|