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

相关推荐
华为云开源1 小时前
openGemini 社区人才培养计划:助力成长,培养新一代云原生数据库人才
数据库·云原生·开源
ZHOU西口11 小时前
微服务实战系列之玩转Docker(十五)
nginx·docker·微服务·云原生·swarm·docker swarm·dockerui
无名之逆17 小时前
云原生(Cloud Native)
开发语言·c++·算法·云原生·面试·职场和发展·大学期末
Richardlygo18 小时前
(k8s)Kubernetes部署Promehteus
云原生·容器·kubernetes
晨曦_子画20 小时前
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
5g·架构·istio
Lill_bin1 天前
JVM内部结构解析
jvm·后端·spring cloud·微服务·云原生·ribbon
二进制杯莫停1 天前
初识zookeeper
分布式·zookeeper·云原生
StevenZeng学堂1 天前
【Kubernetes笔记】为什么DNS解析会超时?
网络协议·docker·云原生·kubernetes
爱吃龙利鱼1 天前
nginx实现https安全访问的详细配置过程
运维·nginx·安全·云原生·https
大白菜和MySQL2 天前
rockylinux9.4单master节点k8s1.28集群部署
云原生·容器·kubernetes