备考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 实验完成.

相关推荐
我不会起名字3224 小时前
Pod 一直 Pending:调度器 5 类失败原因与 kubectl describe 的正确读法
云原生·kubernetes·调度·排查
risc1234567 小时前
万变不离其宗
人工智能·低代码·云原生
T.O.P_KING10 小时前
Falco vs. Tetragon:云原生运行时安全选型指南
安全·云原生
七夜zippoe11 小时前
把 OpenClaw Agent 搬进 K8s:容器化部署全记录
ai·云原生·容器·kubernetes·openclaw
March.s1 天前
Kubernetes 全景导览:从部署演进到云原生底座
云原生·kubernetes·dubbo
熊出没1 天前
云原生架构落地实践:Kubernetes 生产级配置与 Service Mesh 流量治理
云原生·架构·kubernetes·istio
CCblandy1 天前
一致性哈希到底省了多少搬迁?本机实测 3 轮:取模 6→7 搬 85.8%,V=128 只搬 14.3%,虚拟节点太少会被倾斜骗
后端·python·云原生·性能优化·架构
code_slave(码畜)1 天前
微服务架构落地:OpenFeign 服务远程调用 + 线程池隔离架构实战 —— 超时控制、重试机制、线程池隔离,防雪崩
spring boot·spring cloud·微服务·云原生·架构·openfeign
涵美女程序猿1 天前
ChatCut online 剪微服务熔断测试录屏:仪表盘告警、降级日志与恢复时刻怎样对应
程序人生·微服务·云原生·架构·电脑
古城小栈1 天前
Docker Compose 云原生的底座
docker·云原生·容器