备考ICA----Istio实验6---流量镜像 Traffic Mirroring 实验

备考ICA----Istio实验6---流量镜像 Traffic Mirroring 实验

流量镜像功能可以将生产的流量镜像拷贝到测试集群或者新的测试版本中,在不影响实际生产环境的情况下,测试具有实际生产流量的服务,帮助减低版本变更的风险。也可以用在不同集群间的同步

1. 部署httpbin应用

1.1 v1版本deployment

v1和v2一样拥有标签 app: httpbin ,同时拥有不同的version: v1标签

mirrors-httpbin-v1.yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin-v1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      version: v1
  template:
    metadata:
      labels:
        app: httpbin
        version: v1
    spec:
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:80", "httpbin:app"]
        ports:
        - containerPort: 80

1.2 v2版本deployment

v2和v1一样拥有标签 app: httpbin ,同时拥有不同的version: v2标签

mirrors-httpbin-v2.yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: httpbin-v2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: httpbin
      version: v2
  template:
    metadata:
      labels:
        app: httpbin
        version: v2
    spec:
      containers:
      - image: docker.io/kennethreitz/httpbin
        imagePullPolicy: IfNotPresent
        name: httpbin
        command: ["gunicorn", "--access-logfile", "-", "-b", "0.0.0.0:80", "httpbin:app"]
        ports:
        - containerPort: 80

1.3 Service

service 通过标签 app: httpbin 关联 httpbin-v1 和 httpbin-v2

mirrors-httpbin-service.yaml

yaml 复制代码
apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin

1.4 测试容器sleep

sleep 用于测试

mirrors-sleep.yaml

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sleep
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sleep
  template:
    metadata:
      labels:
        app: sleep
    spec:
      containers:
      - name: sleep
        image: curlimages/curl
        command: ["/bin/sleep","3650d"]
        imagePullPolicy: IfNotPresent

部署以上deployment和svc

bash 复制代码
kubectl apply -f Traffic-Mirroring/mirrors-httpbin-v1.yaml
kubectl apply -f Traffic-Mirroring/mirrors-httpbin-v2.yaml
kubectl apply -f Traffic-Mirroring/mirrors-httpbin-service.yaml
kubectl apply -f Traffic-Mirroring/mirrors-sleep.yaml

2. 配置路由

2.1 所有流量到v1

2.1.1 部署dr和vs

Traffic-Mirroring/mirrors-httpbin-vs-dr.yaml

yaml 复制代码
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
    - httpbin
  http:
  - route:
    - destination:
        host: httpbin
        subset: v1
      weight: 100
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: httpbin
spec:
  host: httpbin
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2

部署dr和vs

bash 复制代码
kubectl apply -f Traffic-Mirroring/mirrors-httpbin-vs-dr.yaml

2.1.2 测试访问

通过sleep容器向httpbin发起访问

bash 复制代码
kubectl exec deployments/sleep -- curl -sS http://httpbin:8000/headers

由于所有流量都被发给v1,所以v1有一条访问记录,而v2没有

bash 复制代码
kubectl logs deployments/httpbin-v1
kubectl logs deployments/httpbin-v2

2.2 将v1的流量全部镜像给v2

2.2.1 部署vs

将v1所有的流量镜像给v2版本

Traffic-Mirroring/mirrors-httpbin-v1-2-v2.yaml

yaml 复制代码
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: httpbin
spec:
  hosts:
    - httpbin
  http:
  - route:
    - destination:
        host: httpbin
        subset: v1
      weight: 100
    mirror:
      host: httpbin
      subset: v2
    mirrorPercentage:
      value: 100.0

部署vs

bash 复制代码
kubectl apply -f Traffic-Mirroring/mirrors-httpbin-v1-2-v2.yaml

2.2.2 测试访问

通过sleep容器向httpbin发起访问

bash 复制代码
kubectl exec deployments/sleep -- curl -sS http://httpbin:8000/headers

由于所有流量都被发给v1并且镜像给了v2,所以v1有一条访问记录,v2在同一时间也有一条相同的访问记录

bash 复制代码
kubectl logs deployments/httpbin-v1
kubectl logs deployments/httpbin-v2

至此Istio的流量镜像 Traffic Mirroring 实验完成.

相关推荐
L-影27 分钟前
单体与微服务区别
微服务·云原生·架构
Geek-Chow6 小时前
Kubernetes HPA Behavior When Deployment Is Scaled to 0
云原生·容器·kubernetes
张忠琳16 小时前
【kubernetes】Node Feature Discovery 0.20.0-devel 源码深度解析 — 第四卷:CLI入口、工具链与全局架构总结
云原生·容器·架构·kubernetes·nvidia
Navicat中国17 小时前
开发者入门:无服务器数据库
数据库·云原生·serverless·navicat
ai_coder_ai1 天前
编写自动化脚本,在自己后端服务中使用云原生Baas服务进行编码和解码相关操作
数据库·云原生·自动化
云烟成雨TD1 天前
Kubernetes 系列【20】服务:EndpointSlice 端点分片
云原生·容器·kubernetes
阿里云云原生2 天前
从 ReAct 到 Harness:AgentScope 2.0 如何用“工程化”定义分布式智能体开发范式?
云原生·agent
nece0012 天前
Kubernetes v1.36.0 + Ubuntu24.04 + containerd 2.x WordPress 完整部署文档
云原生·容器·kubernetes