标签: envoyproxy

Istio mTLS 流程

我对 istio 的 mTLS 流程有点困惑。在bookinginfo 示例中,我看到服务通过http 而不是https 进行调用。如果服务之间有 mTLS 那么服务会进行 http 调用吗?

是否可以将来自服务的 HTTP 转到 Envoy 代理,然后将其转换为 https?但是,然后在服务器的 envoy-proxy 日志中,我在日志中看到了 http。

任何机构都可以解释这是如何工作的吗?

问候

istio envoyproxy

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

如何禁用 istio 就绪探针

我想禁用 istio 就绪探针在运行服务上进行运行状况检查。有没有办法禁用http就绪探针然后再启用它

kubernetes istio envoyproxy

4
推荐指数
1
解决办法
5052
查看次数

istio:VirtualService 重写到根 url

我有一个 Istio 1.4.6 VirtualService,它有一个匹配项和一个 url 重写,定义如下:

    match:
    - authority:
        prefix: example.com
      uri:
        prefix: /foo/bar
    rewrite:
      uri: /
    route:
    - destination:
        host: some-service
        port:
          number: 80

Run Code Online (Sandbox Code Playgroud)

我想重写如下:

指向的流量/foo/bar或其任何子路径都应重写为/加上 上的任何子路径some-service

i.e.
example.com/foo/bar -> some-service
example.com/foo/bar/subpath -> some-service/subpath
example.com/foo/bar/subpath/anothersubpath -> some-service/subpath/anothersubpath
Run Code Online (Sandbox Code Playgroud)

但是,当我对进入的流量进行 sysdig 时some-service,我看到 Istio 已将路径重写为:

GET //subpath/anothersubpath HTTP/1.1
Run Code Online (Sandbox Code Playgroud)

请注意 GET 请求中的两个斜杠。在 VirtualService 规范rewrite.uri字段中,我似乎无法将该字段留空或在其中添加空字符串。这样做会导致资源无法验证。

即我不能这样做:

    rewrite:
      uri: ""
Run Code Online (Sandbox Code Playgroud)

并且不能这样做

    rewrite:
      uri:
Run Code Online (Sandbox Code Playgroud)

如何定义 VirtualService 重写以将流量发送到目标服务的根?任何帮助深表感谢。

routing kubernetes istio envoyproxy

4
推荐指数
2
解决办法
3426
查看次数

Envoy 代理作为显式代理

我正在尝试将 Envoy 配置为显式代理来处理连接,尝试使用https://github.com/envoyproxy/envoy/blob/de757584e65da842dee5bddee3893a66b9a6219c/configs/terminate_connect.v3.yaml给出的配置

有没有将 Envoy 配置为显式代理的示例?

envoyproxy

4
推荐指数
1
解决办法
1600
查看次数

有没有办法阻止特使添加特定的标题?

根据此处的文档https://www.envoyproxy.io/docs/envoy/latest/configuration/http/http_conn_man/headers#x-forwarded-proto 特使代理将 Header 添加X-Forwarded-Proto到请求中,由于某种原因,标头值为错误的; 它将它设置为http尽管传入请求方案会https导致我的应用程序代码中出现一些问题,因为它取决于此标头的正确值。

这是特使中的错误吗?我可以阻止特使这样做吗?

kubernetes istio envoyproxy

4
推荐指数
1
解决办法
1923
查看次数

如何等待EXTERNAL-IP被分配?

当我在 Digital Ocean K8S 集群上部署https://projectcontour.io/入口控制器时,会自动创建一个负载均衡器。

我考虑使用Ansible作为K8S的管理工具来自动化部署。

完成以下任务后:

- name: retrieve file
  get_url:
    url: https://projectcontour.io/quickstart/contour.yaml
    dest: /testing/contour.yaml
  register: download_contour

- name: create deployment
  k8s:
    src: /testing/deployment.yml
  when: download_contour.changed
Run Code Online (Sandbox Code Playgroud)

我想等到轮廓获得分配的 EXTERNAL-IP 地址,然后继续执行其他任务。这是我本地计算机上的示例:

kubectl get -n projectcontour service envoy -o wide                                                                       
NAME    TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                      AGE     SELECTOR
envoy   LoadBalancer   10.96.226.84   172.18.255.200   80:31092/TCP,443:30362/TCP   2d15h   app=envoy
Run Code Online (Sandbox Code Playgroud)

如何等待envoyLoadBalancer 获得 Ansible 中分配的 EXTERNAL-IP 地址?

ansible kubernetes envoyproxy

4
推荐指数
1
解决办法
761
查看次数

如何在 envoy 代理中设置 Hash Key 值以实现 RING_HASH 负载平衡

我正在尝试根据某些请求标头在特使代理上设置 RING_HASH 负载平衡。从文档看来我必须在中设置哈希键filter_metadata

filter_metadata:
    envoy.lb:
      hash_key: "YOUR HASH KEY"
Run Code Online (Sandbox Code Playgroud)

但是,我无法找出 hash_key 的可能值/表达式是什么。我尝试为哈希键配置固定值,但请求仍然不会发送到同一上游服务器。

我的envoy.yaml

admin:
  address:
    socket_address: { address: 0.0.0.0, port_value: 9901 }

static_resources:
  listeners:
  - name: listener_0
    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
          stat_prefix: ingress_http
          codec_type: AUTO
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: some_service }
          http_filters:
          - name: envoy.filters.http.router

  clusters:
  - name: …
Run Code Online (Sandbox Code Playgroud)

load-balancing envoyproxy

3
推荐指数
1
解决办法
1823
查看次数

无法使基于 lua 的 EnvoyFilter 工作

我正在尝试让 EnvoyFilters 在我的安装中工作。\n出于测试目的,我正在尝试设置 lua 过滤器来记录哑消息并向响应添加标头。

\n

这是我的配置:

\n
apiVersion: networking.istio.io/v1alpha3\nkind: EnvoyFilter\nmetadata:\n  name: dumb-filter\n  namespace: istio-system\nspec:\n  # workloadSelector:\n  #   labels:\n  #     istio: ingressgateway\n  configPatches:\n  # - applyTo: VIRTUAL_HOST\n  - applyTo: HTTP_ROUTE\n    match:\n      context: GATEWAY\n      # context: ANY\n      routeConfiguration:\n        vhost:\n          # name: "<domain>:443"\n          route:\n            #TODO: Understand name compose logic\n            name: https.443.https.geth-dedicated.default\n    patch:\n      operation: MERGE\n      value:\n        name: envoy.filters.http.lua\n        typed_config:\n          "@type": type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua\n          inlineCode: |\n            function envoy_on_response(response_handle)\n              response_handle:headers():add("dm3ch-test", "dm3ch")\n              response_handle:logErr("Bye Bye.")\n            end\n
Run Code Online (Sandbox Code Playgroud)\n

目前我没有看到任何日志消息或测试标头响应。\n我已经尝试过:

\n
    \n
  • 在应用程序和 istio-system 命名空间(istio 网关 Pod 所在的位置)中创建 EnvoyFilter 对象
  • \n …

istio envoyproxy

3
推荐指数
1
解决办法
3458
查看次数

Envoy 的 Jwt 验证失败

我有一个 Laravel(Lumen) 登录 API,它使用 HS256 生成 JWT。然后我将不记名令牌发送到 Envoy Gateway 并从 Envoy 获取

JWT验证失败

在官方 JWT 解码网站上,我可以成功解码并验证我的不记名令牌。在这里我生成我的 JWT:

{
    $payload = [
        'iss' => config('app.name'),                  // Issuer vom Token
        'sub' => strval($user->ID),                       // Subject vom Token
        'username' => $user->username,
        'iat' => time() - 500,                            // Time when JWT was issued.
        'exp' => time() + config('jwt.ttl'),         // Expiration time
        'alg' => 'HS256',
        'kid' => 'ek4Z9ouLmGnCoezntDXMxUwmjzNTBqptKNkfaqc6Ew8'
    ];
    $secretKey = 'helloworld'; //my base64url

    $jwtEnc = JWT::encode($payload, $secretKey, $payload['alg'], $payload['kid']);

    return $jwtEnc;
}
Run Code Online (Sandbox Code Playgroud)

这是我的 Envoy …

jwt lumen laravel-envoy jwk envoyproxy

3
推荐指数
1
解决办法
1208
查看次数

Envoy WASM 由于缺少导入而无法加载(使用 net/http Go 模块)

我正在尝试运行 WASM Go 过滤器以使用 net/http 模块进行外部 HTTP 调用。Envoy 无法加载 WASM 代码。为什么导入失败?

Envoy/Istio 版本: istio/proxyv2:1.11.4

SDK版本: v0.16.1-0.20220127085108-af57b89bc067

TinyGo版本: tinygo版本0.22.0 darwin/amd64(使用go版本go1.17.6和LLVM版本13.0.0)

错误日志

2022-01-31T20:34:18.513749Z error   envoy wasm  Failed to load Wasm module due to a missing import: env.time.resetTimer
2022-01-31T20:34:18.513794Z error   envoy wasm  Failed to load Wasm module due to a missing import: env.time.stopTimer
2022-01-31T20:34:18.513807Z error   envoy wasm  Failed to load Wasm module due to a missing import: env.time.startTimer
2022-01-31T20:34:18.513817Z error   envoy wasm  Failed to load Wasm module due to a missing import: env.sync/atomic.AddInt32 …
Run Code Online (Sandbox Code Playgroud)

go webassembly istio envoyproxy tinygo

3
推荐指数
1
解决办法
2104
查看次数