iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 23
0
DevOps

Kubernetes and Istio 三十天系列 第 23

[Day23] Istio Example BookInfo - Traffic Management III

Istio Example BookInfo Architecture

BookInfo-Architecture

前言

Istio Service Mesh可以在特別新增Mirroring,Ingress,Egress等等額外應用。

Mirroring

Mirroring,也稱為shadowing,是一個低風險的強大功能。Mirroring會將所有流量以Copy的方式發送到Mirroring Service。

首先把所有流量導到v1 Service。然後使用Roule將一部分流量Mirroring到v2。

Install

httpbin-v1:

cat <<EOF | istioctl kube-inject -f - | kubectl create -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpbin-v1
spec:
  replicas: 1
  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
EOF

httpbin-v2:

cat <<EOF | istioctl kube-inject -f - | kubectl create -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: httpbin-v2
spec:
  replicas: 1
  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
EOF

httpbin Kubernetes service:

kubectl create -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: httpbin
  labels:
    app: httpbin
spec:
  ports:
  - name: http
    port: 8000
    targetPort: 80
  selector:
    app: httpbin
EOF

啟動 sleep Service:

cat <<EOF | istioctl kube-inject -f - | kubectl create -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sleep
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: sleep
    spec:
      containers:
      - name: sleep
        image: tutum/curl
        command: ["/bin/sleep","infinity"]
        imagePullPolicy: IfNotPresent
EOF

Create a default routing policy

創建一個Rule,將所有流量導到v1

kubectl apply -f - <<EOF
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
EOF

那現在所有流量都會往v1 Service走。

Mirroring traffic to v2

創建一個Mirroring Traffic to Service v2

kubectl apply -f - <<EOF
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
EOF

結語

今天主要是針對Istio Traffic進行一些收尾,明天會針對Istio ingress以及egress講解

圖片來源

Istio BookInfo


上一篇
[Day22] Istio Example BookInfo - Traffic Management II
下一篇
[Day24] Istio Example BookInfo - Traffic Management IV
系列文
Kubernetes and Istio 三十天30

尚未有邦友留言

立即登入留言