grpc / grpc-web

gRPC for Web Clients
https://grpc.io
Apache License 2.0
8.57k stars 763 forks source link

503 Service Unavailable "Http response at 400 or 500 level" #1155

Open anand-dotworld opened 2 years ago

anand-dotworld commented 2 years ago

I am trying to run a simple demo application for react and grpc implementation. I am getting this error . My client is running on port 8080 and server is running on port 9090.

This is the envoy.yaml file I am using

admin:
  access_log_path: /tmp/admin_access.log
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

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: random_service
                            timeout: 0s
                            max_stream_duration:
                              grpc_timeout_header_max: 0s
                      cors:
                        allow_origin_string_match:
                          - prefix: "*"
                        allow_methods: GET, PUT, DELETE, POST, OPTIONS
                        allow_headers: keep-alive,user-agent,cache-control,content-type,content-transfer-encoding,custom-header-1,x-accept-content-transfer-encoding,x-accept-response-streaming,x-user-agent,x-grpc-web,grpc-timeout
                        max_age: "1728000"
                        expose_headers: custom-header-1,grpc-status,grpc-message
                http_filters:
                  - name: envoy.filters.http.cors
                  - name: envoy.filters.http.grpc_web
                  - name: envoy.filters.http.router
  clusters:
    - name: random_service
      connect_timeout: 0.25s
      type: logical_dns
      http2_protocol_options: {}
      lb_policy: round_robin
      load_assignment:
        cluster_name: random_service
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: host.docker.internal
                      port_value: 9090

I am getting this error:

POST http://localhost:8080/randomPackage.Random/ChatInitiate 503 (Service Unavailable)
Uncaught {code: 14, message: "Http response at 400 or 500 level", metadata: {…}}
sampajano commented 2 years ago

Thanks for the report :)

The 503 error seems to indicate that the random_service backend is not reachable.

Maybe you could try comparing your Docker setup with our Echo App setup (and its envoy config) and see what's different?

One thing i noticed that you're using host.docker.internal which idk if is working for you. For that maybe you could refer to the HelloWorld example proxy configuration and see if that works for you.

Hope that helps :)

shanifdhanani commented 1 year ago

I had the same issue. For anyone coming here from Google, my issue was that Docker wasn't exposing the ports that I needed to my local machine. Changing the run script from:

docker build -t envoy . && docker run -d --network=host envoy

to

docker build -t envoy . && docker run -d -p 9091:9091 -p 8080:8080 envoy

worked for me

sampajano commented 1 year ago

@shanifdhanani Thanks for sharing! Yes that's right, the -p flags is required on Mac & Windows).

Some further instructions on how to run the echo demo app can be found here too. (P.S. I think the -p 8080:8080 flag would suffice since Envoy is ran on port 8080.)

TommyWU-20170416 commented 3 weeks ago

I run the echo example and that run perfect. But when I run the helloworld, I got the Unexpected error for sayHello: code = 14, message = "Http response at 400 or 500 level, http status code: 503"

Because of the docker running on the windows, I changed address: host.docker.internal I used the docker desktop, window10 Home(22H2)

version: PS C:\Users\user> docker --version Docker version 27.1.1, build 6312585 PS C:\Users\user> PS C:\Users\user> node -v v20.9.0 envoy

check the port is alive port

error page 404 or 500 level

sampajano commented 3 weeks ago

@TommyWU-20170416 good to hear the echo demo runs well!

I believe the echo demo uses this envoy config:

https://github.com/grpc/grpc-web/blob/master/net/grpc/gateway/examples/echo/envoy.yaml

If you diff it against the one you're currently using, you might be able to find out what's different.