我是否需要在客户端使用 istio sidecar 代理来应用路由规则?

Do I need a istio sidecar proxy at client end for routing rules to be applied?

我有两个名为 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 代理?我期望我为其添加规则的服务应该 只有 有 sidecar。我想不出任何技术要求将它与 svc B.

并存

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

是的,服务 A 需要一个 sidecar。我承认这很令人困惑,但是考虑 VirtualService 资源的方式是 "where do I find the backends I want to talk to and what service should they appear to provide me?" A 的 sidecar 是它的助手,它代表它做一些事情,比如 load-balancing,在你的情况下是错误注入(服务 B 是可靠的;是服务 A 希望它看起来不可靠)。

关于 A 和 B 都需要 sidecar 才能进行通信的评论是不正确的(除非你想要 mTLS),但如果你希望网格为 A 提供额外的服务,那么 A 需要 sidecar。

先去运行:

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

这将为您提供两个 IP 地址。将这些添加到您的部署 yaml 中,如下所示(用您的 IP 地址替换 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

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