繁体   English   中英

Envoy 代理:503 服务不可用

[英]Envoy proxy: 503 Service Unavailable

State 的服务:

客户端( nuxt )在http://localhost:3000上启动,客户端向http://localhost:8080发送请求。

服务器( django )在0.0.0.0:50051上运行。

docker也涨了

78496fef541f   5f9773709483      "/docker-entrypoint.…"   29 minutes
 ago   Up 29 minutes   0.0.0.0:8080->8080/tcp, :::8080-8080/tcp,
 10000/tcp   envoy

envoy.yaml配置:

我配置了envoy.yaml文件如下:

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: greeter_service
                            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.grpc_web
                  - name: envoy.filters.http.cors
                  - name: envoy.filters.http.router
  clusters:
    - name: greeter_service
      connect_timeout: 0.25s
      type: logical_dns
      http2_protocol_options: {}
      lb_policy: round_robin
      load_assignment:
        cluster_name: cluster_0
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: 0.0.0.0
                      port_value: 50051

错误:

但是发生了以下错误,并且看起来,请求没有到达 Django 0.0.0.0:50051服务器。

503服务不可用

grpc-message:上游连接错误或在标头之前断开/重置。 重置原因:连接失败,传输失败原因:延迟连接错误:111

铬截图

在此处查看我的长答案 我解决了这个问题。


> 简短回答:

我需要一个代理来接收来自服务器的请求。 所以我使用了特使代理 这样, nginx就收到了来自浏览器的请求,然后发送到一个端口(例如5000)。 另一方面, envoy监听 5000 端口,然后将请求发送到运行在 50051 端口上的服务器。

这就是我设计gRPC连接跟踪的方式。

gRPC 跟踪请求

我遇到了同样的错误。 这是我的条件:

  • Envoy:在 docker 上运行,监听器在端口 8080 并重定向到端口 9090
  • Next JS Web 客户端:在 8080 端口请求 envoy 代理
  • 节点 Grpc 服务器:监听 9090 端口

我从本地环境开始。

基于this example关于配置参考this issue的envoy代理,我将envoy代理上的地址更改为host.docker.internal on envoy.yaml。

如果您想尝试,请参阅本节:

clusters:
  - name: backend_service
    connect_timeout: 0.25s
    type: logical_dns
    http2_protocol_options: {}
    lb_policy: round_robin
    load_assignment:
      cluster_name: cluster_0
      endpoints:
        - lb_endpoints:
            - endpoint:
                address:
                  socket_address:
                    address: host.docker.internal // i change it, before was 0.0.0.0
                    port_value: 9090

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM