首页 > 解决方案 > 有没有办法隔离 Istio 服务网格中的部署?

问题描述

我正在尝试了解微服务架构和不同的微服务之间的交互。我编写了一个简单的基于微服务的 Web 应用程序,但对此有疑问。如果一个服务有多个版本在运行,负载均衡很容易由 Istio 中的 envoy siedcar 管理。我的问题是,如果在其中一个版本中检测到一些漏洞,是否有办法将 pod 与接收更多流量隔离开来。

我们可以在虚拟服务和适当的路由规则的帮助下手动执行此操作。但是它可以根据一些触发事件动态执行吗?

---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: VirtualServiceName
spec:
  hosts:
    - SomeHost
  http:
  - route:
    - destination:
        host: SomeHost
        subset: v1
      weight: 0
    - destination:
        host: SomeHost
        subset: v2
      weight: 100

任何帮助表示赞赏

标签: kubernetesmicroservicesistio

解决方案


根据istio 文档,您可以使用 LocalityLoadBalancerSetting 配置故障转移。

如果运营商的目标不是跨区域和区域分配负载,而是限制故障转移的区域性以满足其他运营要求,则运营商可以设置“故障转移”策略而不是“分布”策略。

以下示例为区域设置本地故障转移策略。假设服务驻留在 us-east、us-west 和 eu-west 内的区域中,此示例指定当 us-east 内的端点变得不健康时,流量应故障转移到 eu-west 内的任何区域或子区域中的端点,类似地我们- west 应该故障转移到 us-east。

 failover:
   - from: us-east
     to: eu-west
   - from: us-west
     to: us-east

故障转移需要进行异常值检测才能正常工作。

但它更适用于区域/区域而不是 pod。


如果是关于 pod,你可以看看这个istio 文档

虽然 Istio 故障恢复功能提高了网格中服务的可靠性和可用性,但应用程序必须处理故障或错误并采取适当的回退操作。例如,当负载均衡池中的所有实例都失败时,Envoy 返回 HTTP 503 代码。应用程序必须实现处理 HTTP 503 错误代码所需的任何回退逻辑。

看看这个和这个github问题。

在 HTTP 健康检查期间,Envoy 将向上游主机发送 HTTP 请求。默认情况下,如果主机健康,它会收到 200 响应。预期的响应代码是可配置的。如果上游主机想立即通知下游主机不再向其转发流量,上游主机可以返回 503。


希望这个对你有帮助。


推荐阅读