标签: envoyproxy

运行 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代理包装第三方API吗?

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

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

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

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

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

谢谢

api proxy circuit-breaker envoyproxy

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

启用mTLS后,使用istio ingress访问服务会显示503错误

我有一个启用TLS的双向Istio网格。我的设置如下

在此处输入图片说明

  1. 在pod内运行的服务(服务容器+特使)
  2. 处于上述服务前面的特使网关。附加了一个Istio网关和虚拟服务。它将路由/info/路由到上述服务。
  3. 另一个Istio网关配置为使用默认istio入口Pod进行入口。这也具有网关+虚拟服务组合。虚拟服务将/info/路径定向到图2中描述的服务

我正在尝试使用curl命令从入口网关访问服务,例如:

$ curl -X GET http://istio-ingressgateway.istio-system:80/info/ -H "Authorization: Bearer $token" -v
Run Code Online (Sandbox Code Playgroud)

但是我遇到了503 not found错误,如下所示:

$ curl -X GET http://istio-ingressgateway.istio-system:80/info/ -H "Authorization: Bearer $token" -v
Note: Unnecessary use of -X or --request, GET is already inferred.
*   Trying 10.105.138.94...
* Connected to istio-ingressgateway.istio-system (10.105.138.94) port 80 (#0)
> GET /info/ HTTP/1.1
> Host: istio-ingressgateway.istio-system
> User-Agent: curl/7.47.0
> Accept: */*
> Authorization: Bearer ...
>
< HTTP/1.1 503 Service Unavailable
< content-length: 57 …
Run Code Online (Sandbox Code Playgroud)

kubernetes istio envoyproxy

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

外部身份验证后删除特使代理中的上游标头

在使用特使代理进行外部身份验证后,是否有任何方法可以删除上游的标头?我们计划为我们的内部 API 网关迁移到 Envoy 代理,但现在这是一个障碍。

例如:外部认证服务获取请求并处理认证头,万一验证失败,它会抛出401。但如果成功,我想阻止auth头进入上游。

根据文档Ext Auth

成功的检查允许授权服务在将原始请求分派到上游之前添加或覆盖来自原始请求的标头。这是通过配置授权响应中的哪些标头应该发送到上游来完成的。请参阅下面的 allowed_authorization_headers。

没有提到我是否可以完全删除上游的标题。

我可以选择覆盖标头,但这会导致上游服务器上的标头冲突。所以这不是一个可能的解决方案。

我怎样才能做到这一点?

reverse-proxy kubernetes envoyproxy

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

Envoy 和 statsd 错误:需要节点“id”和“集群”id

我正在尝试配置统计接收器以将统计信息收集到statsd.

我已配置 envoy.yaml 如下:

admin:
  access_log_path: /logs/envoy_access.log
  address:
    socket_address:
      protocol: TCP
      address: 0.0.0.0
      port_value: 8001

stats_sinks:
  name: envoy.statsd
  config:
    tcp_cluster_name: statsd-exporter

static_resources:
  ...


  clusters:

    - name: app
      connect_timeout: 0.25s
      type: strict_dns
      lb_policy: round_robin
      hosts:
        - socket_address:
            address: {{appName}}
            port_value: {{appPort}}

    - name: statsd-exporter
      connect_timeout: 0.25s
      type: strict_dns
      lb_policy: round_robin
      hosts:
        - socket_address:
            address: statsd_exporter
            port_value: 9125
Run Code Online (Sandbox Code Playgroud)

statsd在同一个 docker 网络中构建为容器。

当我使用 Envoy 和 statsd 运行 docker 容器时,Envoy 显示以下错误:

proxy_1            | [2019-05-06 04:50:38.006][27][info][main] [source/server/server.cc:516] exiting
proxy_1            | tcp statsd: …
Run Code Online (Sandbox Code Playgroud)

statsd envoyproxy

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

对每个虚拟主机应用 envoyfilter ext_authz

我有 ext_authz 过滤器,如下所示:

kind: EnvoyFilter
metadata:
  name: authn-filter
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway
  configPatches:
  - applyTo: HTTP_FILTER
    match:
      context: GATEWAY
      listener:
        filterChain:
          filter:
            name: "envoy.http_connection_manager"
            subFilter:
              name: "envoy.router"
    patch:
      operation: INSERT_BEFORE
      value:
        name: envoy.ext_authz
        config:
          http_service:
            server_uri:
              uri: http://authservice.istio-system.svc.cluster.local
              cluster: outbound|8080||authservice.istio-system.svc.cluster.local
              failure_mode_allow: false
              timeout: 10s
            authorization_request:
              allowed_headers:
                patterns:
                - exact: "cookie"
                - exact: "X-Auth-Token"
            authorization_response:
              allowed_upstream_headers:
                patterns:
                - exact: "kubeflow-userid"
          status_on_error:
            code: GatewayTimeout

Run Code Online (Sandbox Code Playgroud)

问题是它适用于同一入口下的所有虚拟主机。我只想将其应用于特定的虚拟主机。目前我使用以下内容排除一些主机:

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: bypass-auth-filter
  namespace: istio-system
spec:
  workloadSelector:
    labels:
      istio: ingressgateway …
Run Code Online (Sandbox Code Playgroud)

filter kubernetes istio envoyproxy

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

通过 Envoy docker 将 React Web 客户端连接到 gRPC 服务器不起作用

我在 scala Play Framework 中有 gRPC 服务器,它在端口 9000 上公开了 gRPC hello world 示例服务。我正在尝试将它与 React Web 客户端连接。我似乎遇到了部署到 Mac 上 docker 容器的 Envoy 代理的连接问题。

\n

我总是遇到同样的错误,我认为这意味着 Envoy 无法与后端连接:

\n
\xe2\x80\x8bcode: 2\xe2\x80\x8b\nmessage: "Http response at 400 or 500 level"\n\xe2\x80\x8bmetadata: Object {  }\n
Run Code Online (Sandbox Code Playgroud)\n

我用来构建 Envoy 的 docker 文件是:

\n
FROM envoyproxy/envoy:v1.12.2\nCOPY ./envoy.yaml /etc/envoy/envoy.yaml\nCMD /usr/local/bin/envoy -c /etc/envoy/envoy.yaml -l trace --log-path /tmp/envoy_info.log\n
Run Code Online (Sandbox Code Playgroud)\n

我正在使用这个脚本构建它:

\n
echo --- Building my-envoy docker image ---\ndocker build -t my-envoy:1.0 .\n\necho --- Running my-envoy docker image ---\ndocker run -d -p …
Run Code Online (Sandbox Code Playgroud)

docker grpc grpc-web envoyproxy

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

Python GRPC - 无法选择子通道

我正在尝试在 Python 中设置 GRPC 客户端来访问特定服务器。服务器设置为需要通过访问令牌进行身份验证。因此,我的实现如下所示:

def create_connection(target, access_token):
    credentials = composite_channel_credentials(
        ssl_channel_credentials(),
        access_token_call_credentials(access_token))

    target = target if target else DEFAULT_ENDPOINT
    return secure_channel(target = target, credentials = credentials)

conn = create_connection(svc = "myservice", session = Session(client_id = id, client_secret = secret)
stub = FakeStub(conn)
stub.CreateObject(CreateObjectRequest())
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我尝试使用此连接时,出现以下错误:

File "<stdin>", line 1, in <module>
File "\anaconda3\envs\test\lib\site-packages\grpc\_interceptor.py", line 216, in __call__
    response, ignored_call = self._with_call(request,
File "\anaconda3\envs\test\lib\site-packages\grpc\_interceptor.py", line 257, in _with_call
    return call.result(), call
File "anaconda3\envs\test\lib\site-packages\grpc\_channel.py", line 343, in result
    raise self
File "\anaconda3\envs\test\lib\site-packages\grpc\_interceptor.py", …
Run Code Online (Sandbox Code Playgroud)

python grpc envoyproxy

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

Envoy 访问日志持续时间字段

我们正在使用访问日志字段来提供持续时间类型我们正在使用以下内容

totalDuration: '%DURATION%'
upstreamTime: '%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%'
Run Code Online (Sandbox Code Playgroud)

我们正在获取这些值,但是它在访问日志中的值相同(完全相同的时间),为什么?我想持续时间应该总是大于 upstram_service_time 我在这里错过了什么?

1 We need the total time of the calls E2E - for that we use '%DURATION%'
2. How much time it spent e2e on the upstream '%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%'
Run Code Online (Sandbox Code Playgroud)

可以打印微秒吗?也许我们可以看到差异

kubernetes envoyproxy

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