问题标签 [envoyproxy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
209 浏览

api - 可以使用 Envoy Proxy 封装第三方 API 吗?

我正在寻找使用更主流且与语言无关的 API 代理/包装器来实现常见模式(例如,断路器、健康检查等)和跟踪 API 调用的统计信息。

然而,这个包装器将用于远程第三方 API,而不是我自己的内部 SOA/微服务 API。

这似乎与 Hystrix 或 Phystrix 类似,但作为自己的代理运行,而不依赖于语言。

我以前见过 Envoy Proxy(由 Lyft 创建),但它看起来只是用于包装内部服务。

可以用于包装第三方 API 还是有更好的代理?

谢谢

0 投票
1 回答
2929 浏览

kubernetes - Istio 如何将 Tracing spans 发送到 jaeger?

我想在 K8S 中将 istio 与现有的 jaeger 跟踪系统一起使用,我开始按照官方链接安装 jaeger 系统,并使用 cassandra 作为后端存储。然后通过helm 方式安装 istio ,但只启用了一些选定的组件:

Jaeger 和 istio 安装在同一个命名空间内istio-sytem,完成后,它里面的所有 pod 都是这样的:

然后我按照链接将 bookinfo 示例部署到另一个istio-play具有 label的名称空间中istio-injection=enabled,但是无论我如何刷新productpage页面,都没有将跟踪数据填充到 jaeger 中。

我想也许跟踪跨度是由混合器发送到 jaeger 的,就像 istio 做所有其他遥测东西的方式一样,所以我-set mixer.enabled=true,但不幸的是,只有一些服务像istio-mixeroristio-telementry被显示。最后我清理了上面所有的安装并一步一步地完成了这个任务,但是 bookinfo 应用程序的跟踪数据仍然没有。

我的问题是:istio 究竟是如何向 jaeger 发送跟踪数据的?Sidecar 代理是否像envoy 那样直接将其发送到 jaeger-collector( zipkin.istio-system:9411) ,或者数据流如下:?我如何调试 istio 网格内各种组件之间的数据流?sidecar-proxy -> mixer -> jaeger-collector

感谢您的帮助和信息:-)


更新:我再次尝试安装不带 helm 的 istio:,这次一切正常,和kubectl -n istio-system apply -f install/kubernetes/istio-demo.yaml之间一定有不同。kubectl wayhelm way

0 投票
3 回答
6032 浏览

istio - Envoy 中的“max_connections”到底是什么意思?

我的问题是关于Envoy中“cluster.CircuitBreakers.Thresholds.max_connections”的真正含义。

特使文档中的cluster.CircuitBreakers.Thresholds.max_connections解释为:

Envoy 将与上游集群建立的最大连接数。如果未指定,则默认值为 1024。

Istio使用 envoy 作为 sidecar。最近我们尝试了断路示例,但总是发现连接数比我们配置的要多。

所以我们做另一个测试,如下所示:

  1. 在 istio 中添加两个服务:

    • echo 客户端:1 个 pod,下游,将向 echo 服务器发送 HTTP 请求
    • 回声服务器:2 个 pod,上游。

服务吊舱:

  1. 为 echo server 配置的目标规则,下面显示了 envoy 中的相应信息。(最大连接数为 2)

istio 代理配置输出:

  1. 从 echo 客户端到每个服务器同时发出多个请求(每个线程 40 个请求)。

结果:

  1. 检查从 echo 客户端到 echo 服务器的 HTTP 连接

来自 netstat 的连接信息:

来自特使集群的连接信息:

我们可以看到从 echoclient 到 echoserver(10.244.2.65,10.244.2.73)有8 个连接,但不是配置的 maxConnections 2

为什么有 8 个连接而不是 2 个?是不是对 envoy 的 maxConnections 有什么误解?

0 投票
1 回答
1216 浏览

circuit-breaker - 断路器特使代理

我将设置一个特使代理,但仍然对断路器感到困惑。例如:max_connections( UInt32Value ) 是 Envoy 将与上游集群建立的最大连接数。如果未指定,则默认值为 1024。

这是否意味着它将限制max_connections集群中的每个主机或限制max_connections每个集群?

先感谢您。

0 投票
0 回答
1090 浏览

nginx - 将 istio-proxy 与 nginx pod 一起使用,在 kubernetes 上出现 400 Request Header 或 Cookie Too Large 错误

我正在尝试在我的 kubernetes 集群的命名空间中使用nginxwith istio sidecar-injectionenabled。

这意味着 pod 正在使用 [istio-proxy、istio-init 和 nginx] 容器的组合运行。

<svc-name>.default.svc.cluster.local:80/version当我从网格内 pod ( pod )向 nginx 服务发送请求 (curl) 时sleep,预期的行为是点击 redirect/proxy_pass 规则以/version将其代理到上游服务,我得到status code 400以下内容内容 :

查看 nginx 日志和/或 istio-proxy 日志,我看到大量消息,似乎 nginx/envoy 正在践踏自身 -

Envoy (istio-proxy) 日志

Nginx 日志

如果有人能帮助我理解在这种情况下发生了什么,我将不胜感激。

0 投票
1 回答
4814 浏览

microservices - 如何在 Istio 中记录请求和响应正文

我想记录从传入流量到我的每个微服务的请求和响应正文。在 Istio (Envoy) 中是否可以开箱即用?我在 Mixer 的 EntryLog 中没有看到用于映射的 body 属性。也许它会在 Istio 的未来版本中添加?

当然我可以通过在微服务中实现我自己的过滤器来实现这一点,但也许有更好的解决方案来实现这一点。

0 投票
1 回答
594 浏览

envoyproxy - Envoy Sidecar 能否使用 HTTP/HTTPS 代理处理出口流量

我们在 K8S pod 中部署了一个服务和一个 Envoy sidecar。所有入口和出口流量都通过 Envoy,效果很好。但是,我们的生产环境被锁定,所有 HTTP/HTTPS 流量都必须通过标准http_proxyhttps_proxy环境变量提供的代理。

Envoy 使用过滤器路由请求http_connection_manager,引用定义在clusters.

有没有办法让 Envoy 使用代理服务器来处理其出口 http 流量?使用https_proxy环境变量或以其他方式定义出口 https 代理。

0 投票
3 回答
5251 浏览

kubernetes - istio-proxy 访问日志是什么意思?

我正在尝试通过查看 istio-proxy 访问日志(它记录每次访问)来对我的服务进行故障排除。但是,我找不到任何解释日志中每个条目含义的文档。

例如

[2018-12-20T11:09:42.302Z] "GET / HTTP/1.1" 200 - 0 614 0 0 "10.32.96.32" "curl/7.54.0" "17b8f245-af00-4379-9f8f-a4dcd2f38c01" "foo .com" "127.0.0.1:8080"

上面的日志是什么意思?

更新

我试过Vadim 的回答,但找不到日志格式数据。这是输出 json 文件。有什么我想念的吗?我正在使用 istio-1.0.0

0 投票
1 回答
1023 浏览

python - Istio egress 给出来自 python 微服务的“上游连接错误或在标头之前断开/重置”错误

当我在 dockerized 或 kubernetes 容器中运行 Python 微服务时,它工作得很好。但是对于 Istio 服务网格,它不起作用。

我为我的两个出站外部 http api 添加了 ServiceEntry。看来我可以使用服务网格内的 curl 命令访问容器内的 url 内容表单。所以,我认为服务条目很好并且可以工作。

但是当我尝试在 Python 中使用 xml.sax 解析器的微服务时,upstream connect error or disconnect/reset before headers虽然没有 Istio,但相同的应用程序也能正常工作。

我认为这与 Istio 或 Envoy 或 Python 有关。

更新:我确实注入了 Istio-proxy 边车。我还为外部 MySQL 数据库添加了 ServiceEntry,并且 mysql 是从微服务连接的。

0 投票
2 回答
471 浏览

bazel - bazel select help -- 配置 tcmalloc 调试

我正在做的一个项目——Envoy 代理——使用 Bazel 和 tcmalloc。我想将其配置为在为 debug 和 fastbuild 编译时使用 tcmalloc 的调试版本,并为优化构建使用优化版本。

还有其他条件,例如传递给 bazel 以完全关闭 tcmalloc 的命令行标志,使用以下逻辑:

https://github.com/envoyproxy/envoy/blob/7d2e84d3d0f8a4ffbf4257c450b3e5a6d93d4697/bazel/envoy_build_system.bzl#L166

我有公关(https://github.com/envoyproxy/envoy/pull/5424)失败的持续集成改变了逻辑(https://github.com/envoyproxy/envoy/blob/1ed5aba5894ce519181edbdaee3f52c2971befaf/bazel/envoy_build_system.bzl #L156)到:

然而,这不起作用,因为我们允许在调试版本上禁用 tcmalloc(我们在运行 tsan 时在连续集成脚本中这样做)。这与 bazel 相冲突,当我在这种情况下想要“第一个匹配规则获胜”时,显然期望条件是互斥的。我收到此错误:

解决这个问题的最佳方法是什么?我可以在 bazel 命令行设置上使用 Python 条件吗?我可以在条件表达式中使用 AND 或 OR 运算符来使它们互斥吗?还是我可以使用另一种方法?