我有两个服务都启用了 DestinationRule。我已经能够单独实现对服务的外部调用的会话亲和力。当我尝试执行从服务 A 到服务 B 的内部调用时,DestinationRule 应用于服务 A 但未应用于服务 B。
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: isito-affinity-service-a
namespace: dev
spec:
host: service-a.dev.svc.cluster.local
trafficPolicy:
loadBalancer:
consistentHash:
httpHeaderName: x-connection
应用了服务 B 的类似目标规则。我能够验证这一点,因为我有在 Flask 中运行的服务,并且我在服务启动时生成了一个随机 UUID。此 UUID 随响应一起返回。每次我直接点击服务时,我都会得到相同的随机 ID,但是一旦我点击 API 来执行内部服务调用,我就会得到内部调用的服务的随机 ID。我已经在互联网上搜索了适当的参考资料或文档,但我找不到任何东西。
我正在使用请求包进行从服务 A 到服务 B 的内部服务调用,就像这样
response = requests.get("http://service-b.dev.svc.cluster.local/user/internal", headers=request.headers)
我还确保为 k8 中的 dev 命名空间自动注入 sidecar。我还为服务 A 和 B 配置了 VirtualService。我的所有设置都已完成并使用 minikube 进行了测试。如果有人有解决这个问题的想法,那将非常有帮助。提前致谢。
TLDR:DestinationRule 未应用于 istio 的内部服务调用