【问题标题】:Do I need a istio sidecar proxy at client end for routing rules to be applied?我是否需要在客户端使用 istio sidecar 代理才能应用路由规则?
【发布时间】:2019-06-07 08:16:31
【问题描述】:

我有几个名为 svc Asvc B 的服务,请求流程如下:

svc A --> svc B

我已经用svc B 注入了sidecar,然后通过VirtualServices 对象添加了路由规则:

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: b
  namespace: default
spec:
  hosts:
  - b.default.svc.cluster.local
  http:
  - route:
    - destination:
        host: b.default.svc.cluster.local
    fault:
      abort:
        percentage:
          value: 100
        httpStatus: 403

这些规则仅适用于 svc A 具有 sidecar istio 代理的情况。这让我想到我们是否需要在客户端也有 istio 代理?我期望我为其添加规则的服务应该有边车。我想不出任何技术要求可以将它放在 svc B 旁边。

【问题讨论】:

    标签: kubernetes istio envoyproxy


    【解决方案1】:

    是的,服务 A 需要一个边车。我承认这很令人困惑,但考虑 VirtualService 资源的方式是“我在哪里可以找到我想与之交谈的后端以及它们应该为我提供什么服务?” A 的 sidecar 是它的助手,它代表它做一些事情,比如负载平衡,在你的情况下是故障注入(服务 B 是可靠的;它是服务 A 希望它看起来不可靠)。

    A 和 B 都需要 sidecar 才能进行通信的 cmets 根本不正确(除非您需要 mTLS),但如果您希望网格为 A 提供额外的服务,那么 A 需要一个 sidecar。

    【讨论】:

      【解决方案2】:

      是的,您也应该在服务 A 中注入 sidecar 代理。那么只有两个服务可以通过代理相互通信

      【讨论】:

      • 感谢您的回答。你知道它背后的技术要求吗?
      • 在 istio 启用的服务中,流量通过 sidecar 代理。如果未注入代理,则服务无法与其他服务通信
      • 有道理。但是对svc B 的传入请求正在通过边车代理,我希望它在将其转发到给定服务之前拦截并应用规则。我认为 svc A 不需要 Sidecar。对于策略,我希望如此,但对于路由规则则不然。
      【解决方案3】:

      先跑吧:

      gcloud container clusters describe [Your-Pod-Name] | grep -e clusterIpv4Cidr -e servicesIpv4Cidr
      

      这将为您提供两个 IP 地址。将这些添加到您的部署 yaml 中,如下所示(用您的 IP 地址替换)

      apiVersion: v1
      kind: Pod
      metadata:
        name: [Your-Pod-Name]
        annotations:
          sidecar.istio.io/inject: "true"
          traffic.sidecar.istio.io/includeOutboundIPRanges: 10.32.0.0/14,10.35.240.0/20
      

      这允许互联网连接到您的服务。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-21
        • 1970-01-01
        相关资源
        最近更新 更多