Egress
Istio Egress 简介
官方文档:
istio-egressgateway 也是 Istio 中的一种组件,需要自行安装。安装 istio-egressgateway 命令:
在集群中,如果 A 应用访问的地址属于集群中的应用,那么 Istio 可以给这些请求注入各种行为,实现负载均衡和熔断等
可是,如果集群内部要访问外部的一个服务时,需要配置访问地址,如 aaa.com,我们应该如何实现负载均衡和熔断这些功能呢?
Istio ServiceEntry 是一种资源,允许将外部服务(即不在 Istio 服务网格中的服务)纳入Istio服务网格。通过将外部服务添加到网格,可以使用 Istio 的流量管理和策略功能来控制与这些外部服务的交互。
以下是一个ServiceEntry示例,将外部HTTP服务www.google.com
添加到Istio服务网格:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: google
spec:
hosts:
- www.google.com
addresses:
- 192.168.1.1
ports:
- number: 80
name: http
protocol: HTTP
location: MESH_EXTERNAL
resolution: DNS
endpoints:
- address: "www.google.com"
ports:
http: 80
locality: "us-west1/zone1"
exportTo:
- "*"
在此示例中,我们创建了一个名为httpbin-ext
的ServiceEntry资源。指定的主机为httpbin.org
,端口号为80,协议为HTTP。此外,将resolution
设置为DNS
,将location
设置为MESH_EXTERNAL
,表示该服务位于网格之外
现在,Istio 服务网格中的服务访问 www.google.com
时仍受Istio策略的控制。例如,可以为此 ServiceEntry 创建 VirtualService 以应用流量管理规则,或者为其创建 DestinationRule 以配置负载均衡和连接池设置。
spec
: 包含ServiceEntry的具体配置的对象。
hosts
: 一个包含要导入的外部服务的主机名(FQDN)的列表。例如:["httpbin.org"]
。addresses
: (可选)与外部服务关联的虚拟IP地址的列表。例如:["192.168.1.1"]
。- ports: 一个描述外部服务使用的端口的列表。每个端口都有以下属性:
number
: 端口号,例如:80。name
: 端口的名称,例如:http
。protocol
: 使用的协议,例如:HTTP
、TCP
、HTTPS
等。location
: 服务的位置。可以是MESH_EXTERNAL
(表示服务在网格外部)或MESH_INTERNAL
(表示服务在网格内部,但不属于任何已知服务)。resolution
: 用于确定服务实例地址的解析方法。可以是NONE
(默认值,表示不解析地址),STATIC
(表示使用addresses
字段中的IP地址),DNS
(表示使用DNS解析主机名)或MESH_EXTERNAL
。- endpoints: (可选)外部服务的端点列表。每个端点都有以下属性:
address
: 端点的IP地址或主机名。ports
: 一个包含端口名称和端口号的映射,例如:{"http": 8080}
。labels
: (可选)应用于端点的标签。locality
: (可选)端点的地理位置,例如:us-west1/zone1
。exportTo
: (可选)一个包含命名空间名称的列表,指定可以访问此ServiceEntry的命名空间。可以使用星号(*
)表示所有命名空间。默认值为*
。subjectAltNames
: (可选)用于验证服务器证书主题替代名(SANs)的列表