前言:
对于一个系统来说,有入系统的流量,就有出系统的流量。这两个流量就是我们常说的南北流量。对于入流量来说就用Ingress网关去管理,与之对应的出流量用Egress网关去管理。
1. 访问外部服务的方法?
- 有个全局配置项 global.outboundTrafficPolicy.mode = ALLOW_ANY (不推荐,不安全)
- 使用服务入口(ServiceEntry)
- 配置Sidecar 让流量绕过代理(一般不去使用它,因为相当于没有使用Istio的数据平面)
-
2. 何为Egress
Egress同样也是一个网关,管理出网格内部的流量。他定义了网格的出口点,允许你将监控、路由等这些功能在上面进行配置,统一的管理你的出流量。
3. Egress适用场景
假设有要求必须所有的出流量都统一经过某一些节点,比如处于一些安全考虑等等,这时候就需要设置一个Egress网关把所有的流量都收敛到这个节点去
- 可能你的网格内的服务,是没有办法直接访问公网的。相当于需要用Egress给他做一个代理,通过它去访问外部的服务。
4. 实验:创建Egress网关
目标:创建Egress网关,让内部服务通过网关去访问外部服务,如下图让sleep服务通过Engress网关去访问httpbin
- 查看一下Istio默认的egressgateway 组件是否存在,因为要使用他来进行Egress的配置
kubectl get pod -n istio-system
查看一下服务(Sleep)是否存在(如果不存在需要重新安装下)
kubectl get pod
- 为外部服务定义一个ServiceEntry
服务入口的配置清单如下 se.yaml
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: httpbin
spec:
hosts:
- httpbin.org
ports:
- number: 80
name: http-port
protocol: HTTP
resolution: DNS
安装资源
kubectl apply -f linshi/se.yaml
查看配置是否成功
kubectl get se
- 定义Egress gateway
主要注意下selector,使用的是Istio默认的gateway
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: istio-egressgateway
spec:
selector:
istio: egressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- httpbin.org
运行命令 kubectl apply -f linshi/gw.yaml
查看gateway创建情况
kubectl get gw
- 定义路由,将流量引导到egressgateway
虚拟服务vs2.yaml配置清单如下
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: vs-for-egressgateway
spec:
hosts:
- httpbin.org
gateways:
- istio-egressgateway
- mesh
http:
- match:
- gateways:
- mesh
port: 80
route:
- destination:
host: istio-egressgateway.istio-system.svc.cluster.local
subset: httpbin
port:
number: 80
weight: 100
- match:
- gateways:
- istio-egressgateway
port: 80
route:
- destination:
host: httpbin.org
port:
number: 80
weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: dr-for-egressgateway
spec:
host: istio-egressgateway.istio-system.svc.cluster.local
subsets:
- name: httpbin
运行命令 kubectl apply -f linshi/vs2.yaml
kubectl get vs
- 查看网关的日志验证即可