简单了解istio
2024-11-05
简单了解 istio
istio中文官网介绍了部署istio
全过程,部署按照手册完全没有问题,只是在使用上得了解如何作用
经过实际使用过程,发现istio
非常适合与发布结合
Istio 是一种开源服务网格,可透明地分层到现有的分布式应用程序上。 Istio 的强大功能提供了一种统一且更高效的方式来保护、连接和监控服务。 Istio 是实现负载均衡、服务到服务身份验证和监控的途径 - 几乎无需更改服务代码。它为您提供:
使用双向 TLS 加密、强大的基于身份的身份验证和鉴权在集群中保护服务到服务通信
HTTP、gRPC、WebSocket 和 TCP 流量的自动负载均衡
使用丰富的路由规则、重试、故障转移和故障注入对流量行为进行细粒度控制
支持访问控制、限流和配额的可插入策略层和配置 API
集群内所有流量(包括集群入口和出口)的自动指标、日志和链路追踪
验证
部署再套环境一样的Deployment,给他们定义同一个 SVC,此时访问应该是轮询的。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-v1
spec:
selector:
matchLabels:
version: v1
template:
metadata:
labels:
version: v1
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
requests:
memory: 50Mi
cpu: 50m
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-v2
spec:
selector:
matchLabels:
version: v2
template:
metadata:
labels:
version: v2
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
requests:
memory: 50Mi
cpu: 50m
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-v3
spec:
selector:
matchLabels:
version: v3
template:
metadata:
labels:
version: v3
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
resources:
requests:
memory: 50Mi
cpu: 50m
---
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx
type: ClusterIP
部署完成后,访问SVC服务,发现数据的请求被平均了
[root@kubernetes ~]# kubectl run busybox -t -i --image=centos --rm=true
If you don't see a command prompt, try pressing enter.
[root@busybox /]# for i in $(seq 1 100); do curl -s -o /dev/null nginx.default.svc ;done
配置istio
的DestinationRule
(目标规则)、VirtualService
(虚拟服务),其中完全没有定义nginx-v3
,通过请求发现istio不会把流量转发给nginx-v3
,其余两个请求有百分比
在此实验中,如果每次都调整请求比例,基本类似于金丝雀发布
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: nginx
spec:
host: nginx
trafficPolicy:
loadBalancer:
simple: RANDOM //随机、权重、最少请求
subsets:
- name: v1 // 定义一个名称
labels: // Pod 标签
version: v1
- name: v2
labels:
version: v2
---
apiVersion: networking.istio.io/v1
kind: VirtualService
metadata:
name: my-nginx
spec:
hosts:
- nginx
http:
- route:
- destination:
host: nginx
subset: v1 //使用目标规则
weight: 30 // 权重
- destination:
host: nginx
subset: v2
weight: 70