【问题标题】:'No healthy upstream' error when Envoy proxy is set up manually手动设置 Envoy 代理时出现“没有健康的上游”错误
【发布时间】:2021-10-13 06:47:47
【问题描述】:

我有一个非常简单的环境,有一个客户端、一个服务器和一个 envoy 代理,每个都运行在一个单独的 docker 上,通过 http 进行通信。 当我使用 docker-compose 设置它时,它可以工作。 但是,当我手动设置泊坞窗和网络时(使用docker network create、设置别名等),当客户端尝试向服务器发送请求时,我收到“503 - 上游没有健康”消息。 curl 到网络别名的工作来自特使容器。知道使用 docker-compose 和手动设置网络和容器有什么区别吗?

envoy.yaml:

static_resources:
  listeners:
    - address:
        socket_address:
          address: 0.0.0.0
          port_value: 10000
      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: backend
                      domains: ["*"]
                      routes:
                        - match: { prefix: "/" }
                          route: { cluster: service }
                http_filters:
                  - name: envoy.filters.http.router
                    typed_config: {}
  clusters:
    - name: service
      connect_timeout: 0.25s
      type: STRICT_DNS
      lb_policy: round_robin
      load_assignment:
        cluster_name: service
        endpoints:
        - lb_endpoints:
          - endpoint:
              address:
                socket_address:
                  address: server-stub
                  port_value: 5000
admin:
  access_log_path: "/tmp/envoy.log"
  address:
    socket_address:
      address: 0.0.0.0
      port_value: 9901

有效的 docker-compose 文件(但我不想使用 docker-compose,我正在使用单独设置每个 docker 的脚本):

version: "3.8"
services:
  envoy:
    image: envoyproxy/envoy:v1.16-latest
    ports:
      - "10000:10000"
      - "9901:9901"
    volumes:
      - ./envoy.yaml:/etc/envoy/envoy.yaml

  server-stub:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
    - "5000:5000"

【问题讨论】:

  • 你能分享你的撰写文件吗?
  • 我已经用 docker compose 更新了问题,虽然我不想使用它,但我有脚本来设置具有许多其他配置的 docker,我需要使用这些脚本来设置每个docker 分开,然后将它们连接到网络上。

标签: docker-compose envoyproxy


【解决方案1】:

我无法重现此内容。它适用于您的 docker-compose 文件,并且可以手动运行。以下是我采取的手动步骤:

$ docker network create test-net
$ docker container run --network test-net --name envoy -p 10000:10000 -p 9901:9901 --mount type=bind,src=/home/john/projects/tester/envoy.yaml,dst=/etc/envoy/envoy.yaml envoyproxy/envoy:v1.16-latest
$ docker run --network test-net --name server-stub johnharris85/simple-hostname-reporter:3 

我的示例应用程序也在端口 5000 上侦听。我使用了您的确切 envoy 配置。如果相关,请使用 Docker 20.10.8。

【讨论】:

  • 谢谢!它确实有帮助。你所做的和我所做的不同之处在于,我首先创建了 envoy 容器,然后将其连接到网络。因此,按照您的示例,我直接使用--network 参数运行它,它现在可以工作了!
猜你喜欢
  • 2019-08-09
  • 2019-05-27
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2023-01-28
相关资源
最近更新 更多