postgrpc 0.1.2

A JSON-transcoding-ready gRPC server for querying Postgres databases
Documentation
static_resources:
  listeners:
    - name: listener_0
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 8080
      filter_chains:
      - filters:
        - name: envoy.filters.network.http_connection_manager
          typed_config:
            "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
            codec_type: auto
            stat_prefix: ingress_http
            route_config:
              name: local_route
              virtual_hosts:
              - name: local_service
                domains: ["*"]
                routes:
                  - match:
                      prefix: "/"
                    route:
                      cluster: postgrpc
                      timeout: 0s
                      rate_limits:
                        - actions:
                          - request_headers:
                              header_name: "x-postgres-role"
                              descriptor_key: role
                      max_stream_duration:
                        grpc_timeout_header_max: 0s
            http_filters:
              - name: envoy.filters.http.ratelimit
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.http.ratelimit.v3.RateLimit
                  domain: postgrpc
                  rate_limited_as_resource_exhausted: true
                  rate_limit_service:
                    grpc_service:
                      envoy_grpc:
                        cluster_name: ratelimit
                    transport_api_version: v3
              - name: envoy.filters.http.grpc_json_transcoder
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder
                  proto_descriptor: "/proto/postgrpc.pb"
                  services: 
                    - "postgres.v1.Postgres"
                  convert_grpc_status: true
                  auto_mapping: false
                  print_options:
                    add_whitespace: true
                    always_print_primitive_fields: true
                    always_print_enums_as_ints: false
                    preserve_proto_field_names: false
              - name: envoy.filters.http.router
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
    - name: listener_1
      address:
        socket_address:
          address: 0.0.0.0
          port_value: 8081
      filter_chains:
      - filters:
        - name: envoy.filters.network.http_connection_manager
          typed_config:
            "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
            codec_type: auto
            stat_prefix: ingress_http
            route_config:
              name: local_route
              virtual_hosts:
              - name: local_service
                domains: ["*"]
                routes:
                  - match:
                      prefix: "/"
                    route:
                      cluster: postgrpc-admin
                      timeout: 0s
                      max_stream_duration:
                        grpc_timeout_header_max: 0s
            http_filters:
              - name: envoy.filters.http.grpc_json_transcoder
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder
                  proto_descriptor: "/proto/postgrpc.pb"
                  services: 
                    - "postgres.v1.Postgres"
                  convert_grpc_status: true
                  auto_mapping: false
                  print_options:
                    add_whitespace: true
                    always_print_primitive_fields: true
                    always_print_enums_as_ints: false
                    preserve_proto_field_names: false
              - name: envoy.filters.http.router
                typed_config:
                  "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
  clusters:
    - name: postgrpc
      connect_timeout: 0.25s
      type: logical_dns
      dns_lookup_family: v4_only
      typed_extension_protocol_options:
        envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
          "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
          explicit_http_config:
            http2_protocol_options: {}
      lb_policy: round_robin
      load_assignment:
        cluster_name: postgrpc
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: postgrpc
                  port_value: 50051
    - name: postgrpc-admin
      connect_timeout: 0.25s
      type: logical_dns
      dns_lookup_family: v4_only
      typed_extension_protocol_options:
        envoy.extensions.upstreams.http.v3.HttpProtocolOptions:
          "@type": type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions
          explicit_http_config:
            http2_protocol_options: {}
      lb_policy: round_robin
      load_assignment:
        cluster_name: postgrpc-admin
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: postgrpc-admin
                  port_value: 50052
    - name: ratelimit
      type: strict_dns
      connect_timeout: 1s
      lb_policy: round_robin
      protocol_selection: use_configured_protocol
      http2_protocol_options: {}
      load_assignment:
        cluster_name: ratelimit
        endpoints:
        - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    address: ratelimit
                    port_value: 8081