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

相关推荐
Karoku0666 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
探索云原生11 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
启明真纳11 小时前
elasticache备份
运维·elasticsearch·云原生·kubernetes
会飞的土拨鼠呀14 小时前
chart文件结构
运维·云原生·kubernetes
Hello Dam18 小时前
面向微服务的Spring Cloud Gateway的集成解决方案:用户登录认证与访问控制
spring cloud·微服务·云原生·架构·gateway·登录验证·单点登录
power-辰南19 小时前
Zookeeper 底层原理解析
分布式·zookeeper·云原生
power-辰南19 小时前
Zookeeper常见面试题解析
分布式·zookeeper·云原生
Cairry.1 天前
WatchAlert - 开源多数据源告警引擎
云原生·开源·prometheus
会飞的土拨鼠呀1 天前
Kubernetes 是什么?
云原生·容器·kubernetes
向阳逐梦2 天前
开源云原生数据仓库ByConity ELT 的测试体验
数据仓库·云原生·开源