标签: envoyproxy

从 Envoy 后面的容器与 Redis 服务器通信

我已经在 k8s 上部署了 Envoy 容器,作为 Istio 部署的一部分。每个 Envoy 代理容器都作为“sidecar”安装在 k8s pod 中的应用程序容器旁边。

我能够从应用程序内部启动 HTTP 流量,但是当尝试联系 Redis 服务器(另一个具有另一个特使代理的容器)时,我无法连接和接收 HTTP/1.1 400 Bad Request来自特使的消息。

在检查特使的日志时,每当此连接通过特使时,我都可以看到以下消息: HTTP/1.1" 0 - 0 0 0 "_"."_"."_"."_""

据我了解,Redis 命令使用纯 TCP 传输(无 HTTP)发送。Envoy 是否可能只希望看到 HTTP 流量并拒绝仅 TCP 流量?假设我的理解是正确的,有没有办法使用 Istio 改变这种行为并接受和处理通用 TCP 流量?

以下是我的相关部署yaml文件:

apiVersion: v1
kind: Service
metadata:
  name: redis
  namespace: default
  labels:
    component: redis
    role: client
spec:
  selector:
    app: redis
  ports:
  - name: http
    port: 6379
    targetPort: 6379
    protocol: TCP
  type: ClusterIP

apiVersion: extensions/v1beta1
kind: Deployment
metadata: …
Run Code Online (Sandbox Code Playgroud)

tcp http kubernetes istio envoyproxy

5
推荐指数
1
解决办法
1767
查看次数

Istio (1.0) 内部 ReplicaSet 路由 - 支持 Kubernetes 部署中 Pod 之间的流量

Istio 如何支持同一服务中的 Pod 之间基于 IP 的路由(或者更具体地说是 ReplicaSet)?

我们想在 Istio 网格中部署一个副本 > 1 的 Tomcat 应用程序。该应用程序运行 Infinispan,它使用 JGroups 来整理通信和集群。JGroups 需要识别其集群成员,为此需要使用 KUBE_PING(JGroups 的 Kubernetes 发现协议)。它将通过类似于kubectl get pods的查找来咨询 K8S API 。集群成员既可以是其他服务中的 pod,也可以是同一服务/部署中的 pod。

尽管我们的问题是由相当具体的需求驱动的,但该主题是通用的。我们如何让 pod 能够在副本集内相互通信?

示例:作为展示,我们部署了演示应用程序https://github.com/jgroups-extras/jgroups-kubernetes。相关的东西是:

apiVersion: v1
items:
- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: ispn-perf-test
    namespace: my-non-istio-namespace
  spec:
    replicas: 3
< -- edited for brevity -- >
Run Code Online (Sandbox Code Playgroud)

没有 Istio情况下运行,三个 Pod 会相互找到并形成集群。在my-istio-namespace 中使用 Istio部署相同的内容并添加基本服务定义:

kind: Service
apiVersion: v1 …
Run Code Online (Sandbox Code Playgroud)

jgroups infinispan kubernetes istio envoyproxy

5
推荐指数
1
解决办法
452
查看次数

运行 istio-proxy 后启动容器/pod

我正在尝试使用 Istio 和 Envoy 通过 Kubernetes 实现服务网格。我能够设置服务和 istio-proxy,但无法控制容器和 istio-proxy 的启动顺序。

我的容器是第一个启动的,并尝试通过 TCP 访问外部资源,但当时 istio-proxy 尚未完全加载,外部资源的 ServiceEntry 也没有完全加载

我尝试在服务中添加恐慌,并尝试在访问外部资源之前睡眠 5 秒。

有没有办法可以控制这些的顺序?

kubernetes istio envoyproxy

5
推荐指数
1
解决办法
3805
查看次数

Istio envoy 正在丢弃带有 Host 标头的请求

我在尝试让 Istio 在我的集群上运行时遇到问题。我的基础设施如下所示:

我有一个 Magento 商店,用清漆作为前端缓存。它在安装 istio 之前就可以工作。我已经启用了特使注入。Varnish 部署在 pod 中,并且有自己的服务未缓存重定向到 magento 服务。

当我尝试从 varnish 卷曲到 magento 时,问题就出现了。

如果我从 varnish 卷曲 magento 服务,我会重定向到 magento URL(这是预期的行为)

root@varnish-6468d5958d-dvxhx:/# curl -v store-es    
* Rebuilt URL to: store-es/
*   Trying 10.32.97.229...
* TCP_NODELAY set
* Connected to store-es (10.32.97.229) port 80 (#0)
> GET / HTTP/1.1
> Host: store-es
> User-Agent: curl/7.52.1
> Accept: */*
> 
< HTTP/1.1 301 Moved Permanently
< server: envoy
< date: Wed, 07 Nov 2018 11:08:47 GMT
< content-type: …
Run Code Online (Sandbox Code Playgroud)

curl virtualhost kubernetes envoyproxy

5
推荐指数
1
解决办法
2051
查看次数

如何为 Envoy 代理自动加载新的 TLS 证书?

我在 Kubernetes 环境中使用https://github.com/jetstack/cert-manager自动加载https://letsencrypt.org/。它创建的证书将在 90 天后过期。在到期前30 天,cert-manager 更新证书并替换证书。证书存储在 k8s 机密中。

你如何让 Envoy Proxy自动重新加载证书?这些问题已关闭,似乎没有答案。有人提到可以帮助提供解决方案的 Secret Discovery Service (SDS),但我还没有弄清楚。

对于 nginx,可以通过将 k8s 机密添加到 k8s 卷,将卷挂载到文件系统以供 nginx 使用来配置 TLS。然后可以使用文件系统观察程序调用sudo nginx -s reload以在证书更改时重新加载配置。我看到 Envoy Proxy 支持hot restart,但我没有看到类似于 nginx 的命令来让它热重启。

有一个hot-restarter.py,但它不是文件观察器,我宁愿不在 envoyproxy/envoy:latest docker 镜像上安装 python。我认为该程序的某些功能可能会内置到一个也可以查看文件的 Rust 应用程序中,但是对于这种非常常见的场景,必须已经存在一些东西,对吧?

ssl lets-encrypt cert-manager envoyproxy

5
推荐指数
1
解决办法
4943
查看次数

基于 URL 的具有亲和性的服务代理

我正在寻找具有基于 URL 的亲和性的服务代理(或负载平衡器)。

这是用于在集群内部的 Kubernetes 中使用的:我正在寻找一个“内部”负载均衡器,我不需要将服务暴露在外面。

默认情况下,Kubernetes 中的 Service 使用“循环”算法。

我想要基于 HTTP URL 的一部分的一些亲和性:第一个请求将转到随机 pod,使用相同 URL 的后续请求将(最好)转到同一个 pod。

我已经阅读了一些关于基于 sourceIP 的亲和性的文档,这是否基于 URL 存在?

我已经快速阅读了 Envoy,也许使用“Ring hash”负载平衡算法就可以了,但我不知道是否可以基于 URL 进行散列。

也许使用 kube-proxy 的“ipvs”代理模式(https://kubernetes.io/docs/concepts/services-networking/service/#proxy-mode-ipvs)可以,但我只看到“目的地散列”和“源哈希”作为负载平衡算法,我也不知道如何配置它。

haproxy kubernetes envoyproxy

5
推荐指数
1
解决办法
884
查看次数

特使显示没有健康的上游

我正在尝试通过博客的帮助构建特使代理,但在那里遇到了一些问题。

  • 首先,博客修复了 ip 地址,并且它与任何 URL 通配符匹配,保留唯一重要的端口,但是当我尝试运行http://192.168.99.100:9901/博客中给出的管理命令的 URL 时,它没有打开,而当我尝试它时我的IP,它运行成功。

  • 而且,我在浏览器上打开个人服务或产品服务的网页时遇到问题,要么http://192.168.99.100:10000/person是博客中提供的,要么是在浏览器和邮递员中使用http://<myip>:10000/person它们显示no healthy upstream的,我不知道no healthy upstream.

我没有使用zipkins。

我看过相关的问题,no healthy upstream但我找不到可以解决这个问题的答案。

请帮忙。

java proxy microservices envoyproxy

5
推荐指数
0
解决办法
1783
查看次数

特使配置解析错误 INVALID_ARGUMENT:Unexpected token

我试图从特使文档中设置一个基本的特使代理(使用 Docker),但我不断收到如下解析错误:

[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:238] initializing epoch 0 (hot restart version=11.104)
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:240] statically linked extensions:
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:242]   access_loggers: envoy.file_access_log,envoy.http_grpc_access_log
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:245]   filters.http: envoy.buffer,envoy.cors,envoy.csrf,envoy.ext_authz,envoy.fault,envoy.filters.http.dynamic_forward_proxy,envoy.filters.http.grpc_http1_reverse_bridge,envoy.filters.http.header_to_metadata,envoy.filters.http.jwt_authn,envoy.filters.http.original_src,envoy.filters.http.rbac,envoy.filters.http.tap,envoy.grpc_http1_bridge,envoy.grpc_json_transcoder,envoy.grpc_web,envoy.gzip,envoy.health_check,envoy.http_dynamo_filter,envoy.ip_tagging,envoy.lua,envoy.rate_limit,envoy.router,envoy.squash
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:248]   filters.listener: envoy.listener.original_dst,envoy.listener.original_src,envoy.listener.proxy_protocol,envoy.listener.tls_inspector
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:251]   filters.network: envoy.client_ssl_auth,envoy.echo,envoy.ext_authz,envoy.filters.network.dubbo_proxy,envoy.filters.network.mysql_proxy,envoy.filters.network.rbac,envoy.filters.network.sni_cluster,envoy.filters.network.thrift_proxy,envoy.filters.network.zookeeper_proxy,envoy.http_connection_manager,envoy.mongo_proxy,envoy.ratelimit,envoy.redis_proxy,envoy.tcp_proxy
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:253]   stat_sinks: envoy.dog_statsd,envoy.metrics_service,envoy.stat_sinks.hystrix,envoy.statsd
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:255]   tracers: envoy.dynamic.ot,envoy.lightstep,envoy.tracers.datadog,envoy.tracers.opencensus,envoy.zipkin
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:258]   transport_sockets.downstream: envoy.transport_sockets.alts,envoy.transport_sockets.tap,raw_buffer,tls
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:261]   transport_sockets.upstream: envoy.transport_sockets.alts,envoy.transport_sockets.tap,raw_buffer,tls
[2019-09-30 11:16:05.313][1][info][main] [source/server/server.cc:267] buffer implementation: old (libevent)
[2019-09-30 11:16:05.318][1][critical][main] [source/server/server.cc:93] error initializing configuration '/etc/envoy/envoy.yml': Unable to parse JSON as proto (INVALID_ARGUMENT:Unexpected token.
admin: …
Run Code Online (Sandbox Code Playgroud)

envoyproxy

5
推荐指数
1
解决办法
2056
查看次数

1 小时后 istio-proxy 关闭长时间运行的 TCP 连接

TL;DR:我们如何配置 istio sidecar injection/istio-proxy/envoy-proxy/istio egressgateway 以允许长时间(> 3 小时)、可能空闲的 TCP 连接?

一些细节:

我们正在尝试执行到 PostgreSQL 的数据库迁移,该迁移由一个配置了 Spring Boot + Flyway 的应用程序触发,此迁移预计将持续约 3 小时。

我们的应用程序部署在我们的 kubernetes 集群中,该集群配置了 istio sidecar 注入。在运行迁移正好一小时后,连接总是关闭。

我们确定它是 istio-proxy 关闭连接,因为我们尝试从没有 istio sidecar 注入的 pod 迁移并且它运行了超过一个小时,但是这不是一个选项,因为这可能意味着生产中的一些停机时间我们不能考虑。

我们怀疑这应该可以在 istio 代理设置参数 idle_timeout 中进行配置 - 这是在这里实现的。但是这不起作用,或者我们没有正确配置它,我们试图在 istio 安装期间通过添加--set gateways.istio-ingressgateway.env.ISTIO_META_IDLE_TIMEOUT=5s到我们的 helm 模板来配置它。

tcp kubernetes istio envoyproxy

5
推荐指数
1
解决办法
2445
查看次数

envoy v3 关于 typed_config http 连接管理器的非法映射值

我正在关注本教程,以便将 gRPC 服务转码为 HTTP。但是,它不是最新的,因为它使用 envoy API v2,但这不再可用(我收到一个错误说这个),他们现在使用 v3。因此,语法略有不同。

对于 v2,此代码段没有语法错误,但是,它引发了一个错误,指出 V2 不再可用(因此最终无法使用):

 - name: envoy.http_connection_manager
        config:
            ...
Run Code Online (Sandbox Code Playgroud)

根据这个例子,有一个 HTTP 连接管理器(它是 v3 兼容的)的方法是在envoy.yml配置文件中这样做(我们明确地告诉我们我们正在使用 v3):

- name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager

Run Code Online (Sandbox Code Playgroud)

但是,我收到一个Illegal map value错误指向"@type"error initializing configuration '/etc/envoy/envoy.yaml': yaml-cpp: error at line 15, column 17: illegal map value

我也试过强制 envoy 使用 V2,带有 flag --bootstrap-version 2,但是一直说 v2 不再使用,所以现在使用 envoy 的唯一方法就是使用 v3。你遇到过同样的问题吗?我的目标只是将 rGPC 服务转码为 HTTP。

如果你需要更多的材料来解决问题,我把整个项目上传到了GitHub

docker grpc envoyproxy

5
推荐指数
1
解决办法
124
查看次数