Istio is “An open platform to connect, secure, control and observe services”.
Istio是一个可以服务治理的开放平台,涉及到服务的连接、安全、管理以及观察。
- 连接:智能控制服务之间的调用流量,能够实现灰度升级、AB测试和红黑部署等功能
- 安全:自动为服务之间的调用提供认证、授权和加密
- 管理:使用户定义的策略生效,保证资源在消费者中公平地分配
观察:查看服务运行期间的各种数据,比如日志、监控、链路追踪,了解服务的运行情况
架构
Proxy以边车模式与应用容器运行在同一个pod中。proxy使用了envoy作为代理通信的插件。
- Pilot接收管理员发出的指令或规则,遥控所有envoy的行为。是智能路弹性等功能的入口。
- Gallery,验证用户编写的Istio API配置。
- Citadal,管理集群的密钥和证书
网络规则
参考链接:https://istio.io/latest/docs/concepts/traffic-management/#gateway-exampleVirtual Service
Virtual Service(vs)和Destination Rule(dr)是istio的流量路由管理功能的核心组件。
vs定义了网络请求的转发规则,将请求的调用方和实现方解耦。apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews # 处理host为‘reviews’的请求
http:
- match: # 符合用户名为‘jason’条件的请求分发到v2版本
- headers:
end-user:
exact: jason
route:
- destination:
host: reviews
subset: v2
- route: # 默认分发到v3版本
- destination:
host: reviews
subset: v3
Destination Rule
vs定义了将请求转发到哪一个目标服务;dr定义了针对该目标服务的请求要进行哪些处理(负载均衡模型、TLS 安全模式或熔断器设置等) ```yaml apiVersion: networking.istio.io/v1alpha3 kind: DestinationRule metadata: name: my-destination-rule spec: host: my-svc # 针对host为‘my-svc’的请求,随机选择v1-v3中的一个子集 trafficPolicy: loadBalancer:
subsets: # v1与v3子集内部使用默认的随机策略simple: RANDOM
- name: v1 labels: version: v1 # 含有label=v1的pod等
- name: v2 # v2子集内部使用轮询策略
labels:
version: v2
trafficPolicy:
loadBalancer:
simple: ROUND_ROBIN
- name: v3 labels: version: v3
<a name="pCoCX"></a>
## Gateway
Gateway(gw)定义了进入或流出istio管理的服务网格的流量入口/出口,需要对每个gw绑定一个对应的vs用于管理这些流量。<br />istio提供了预定义的流量入口(istio-ingressgateway)和流量出口(istio-egressgateway)。
```yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: ext-host-gwy
spec:
selector:
app: my-gateway-controller
servers:
- port:
number: 443
name: https
protocol: HTTPS
hosts:
- ext-host.example.com
tls:
mode: SIMPLE
credentialName: ext-host-cert
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: virtual-svc
spec:
hosts:
- ext-host.example.com
gateways:
- ext-host-gwy
xxx
Service Entry
Service Entry(se)定义了istio服务网格之外的服务,方便网格内部的组件将流量转发到网格外部。
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: svc-entry
spec:
hosts:
- ext-svc.example.com
ports:
- number: 443
name: https
protocol: HTTPS
location: MESH_EXTERNAL
resolution: DNS