貔貅云原生

貔貅云原生

简单了解istio

18
0
0
2024-11-05
简单了解istio

简单了解 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

33de4f357059688adea66557f5abb4d.png

配置istioDestinationRule(目标规则)、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

142487d2873f9337fc95cc8a187ec87.png