返回

赋能 Istio 管理 Egress 流量:指南和高级用法

见解分享

控制 Egress 流量:赋能 Istio 管理外部通信

引言

Istio 服务网格在保护和连接集群内的微服务方面发挥着至关重要的作用。然而,其功能不仅仅限于此。它还允许管理员控制服务与外部环境的通信,确保安全性和可靠性。本文将深入探讨 Istio 中的 egress 流量管理,为您提供全面指南,帮助您掌控 Istio 对外通信的行为。

服务入口:连接外部服务

想象一下,您有一个 Istio 集群,需要与一个外部服务通信,例如一个关系型数据库或一个第三方 API。在传统方法中,您必须修改服务网格配置,允许流量流向该服务。这既繁琐又容易出错。

Istio 通过引入了服务入口的概念来简化这一过程。服务入口充当 Istio 集群和外部服务之间的网关。通过定义服务入口,您可以指定要连接的外部服务以及连接方式。Istio 将负责将流量路由到正确的目标。

定义服务入口的步骤如下:

  1. 创建一个 ServiceEntry 资源,指定外部服务的主机名或 IP 地址、端口和协议。
  2. 在 ServiceEntry 中添加一个 Endpoints 块,列出该服务的端点。
  3. 将 ServiceEntry 应用到 Istio 集群中。

例如:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: my-external-service
spec:
  hosts:
  - my-external-service.example.com
  ports:
  - number: 3306
    name: mysql
    protocol: TCP
  endpoints:
  - address: 10.0.0.1
    ports:
      mysql: 3306

出口网关:直接放行 IP 范围

在某些情况下,您可能希望 Istio 直接放行对特定 IP 范围的访问,而无需创建服务入口。这对于允许与不需要通过 Istio 服务网格的外部服务通信非常有用。

Istio 提供了出口网关功能,允许您配置一组 IP 范围,这些范围可以不受 Istio 流量管理的限制直接访问。要配置出口网关,请在 Istio 网关资源中添加一个 egress 对象:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "*"
  egress:
  - hosts:
    - "*.example.com"

在上面的示例中,Istio 将允许对所有以 ".example.com" 结尾的主机的直接访问。

高级用法

Istio egress 流量管理提供了多种高级功能,让您对外部通信进行更精细的控制。这些功能包括:

  • 授权策略: 允许您根据源服务、目标服务和其他条件限制对外部服务的访问。
  • TLS 终止: 允许 Istio 终止与外部服务的 TLS 连接,提供额外的安全保护。
  • 流量分片: 允许您将流量拆分为多个外部服务,实现负载均衡和故障转移。

结论

Istio 的 egress 流量管理功能提供了强大的工具,可让您控制 Istio 集群与外部环境之间的通信。通过使用服务入口和出口网关,您可以轻松连接到外部服务,同时保持 Istio 服务网格的安全性、可靠性和可观察性。探索这些功能的高级用法,您可以进一步提高 Istio 部署的灵活性、弹性和安全性。