我有几个名为svc A
和svc B
的服务,请求流程如下:
svc A --> svc B
我已经向sidecar注入了svc B
,然后通过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
边上有任何技术要求。
答案 0 :(得分:2)
是的,服务A需要辅助工具。我承认这很令人困惑,但是考虑VirtualService资源的方式是“我在哪里可以找到我想要与之交谈的后端,以及他们应该为我提供什么服务?” A的辅助工具是其辅助工具,它可以代表其完成负载平衡之类的事情,并且在您的情况下,可以进行故障注入(服务B是可靠的;服务A希望它看起来不可靠)。
A和B都需要sidecar以便进行通信的注释是不正确的(除非您需要mTLS),但是如果您希望网格为A提供其他服务,则A需要sidecar。
答案 1 :(得分:1)
是的,您还应该在服务A中注入sidecar代理。那么只有这两个服务可以通过代理相互通信
答案 2 :(得分:0)
首先继续运行:
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
这允许Internet连接到您的服务。