Istio 故障注入之停止(httpStatus)

Istio 故障注入

Istio 故障注入與其餘在網絡層引入錯誤(例如延遲數據包或者直接殺死 Pod)的機制不一樣,Istio 容許在應用程序層注入故障。這使得能夠注入更多相關的故障,好比 HTTP 錯誤代碼等。nginx

Istio 能夠注入兩種類型的故障,而這兩種故障都是使用虛擬服務來配置的:web

延遲:模擬增長網絡延遲或上游服務過載。後端

停止:模擬服務故障而致使調用服務不可用。停止一般以 HTTP 錯誤代碼或 TCP 鏈接失敗表示api


Istio 故障注入實例

​ 本實例包括 4 個資源文件,3 個 k8s 相關,1 個 istio 相關:網絡

client.yamlapp

nginx-svc.yamlspa

nginx-deploy.yamlcode

nginx-vs.yamlserver

客戶端資源文件

client.yaml 內容以下:blog

apiVersion: apps/v1
kind: Deployment
metadata:
  name: client
spec:
  replicas: 1
  selector:
    matchLabels:
      app: client
  template:
    metadata:
      labels:
        app: client
    spec:
      containers:
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        command: ["/bin/sh", "-c", "sleep 3600"]

​ 執行以下語句進行 Istio 注入,注入後,此 client 將處於網格以內:

istioctl kube-inject -f client.yaml | kubectl apply -f -

Istio 注入成功成功以下圖所示:

spacer.gifclipboard5.png

k8s 服務文件

nginx-svc.yaml 內容以下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    server: nginx
  ports:
  - name: http
    port: 80
    targetPort: 80
    protocol: TCP

執行以下語句部署 service:

kubectl apply -f nginx-svc.yaml

部署工做負載(deployment)

nginx-deploy.yaml 內容以下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    server: nginx
    app: web
spec:
  replicas: 1
  selector:
    matchLabels:
      server: nginx
      app: web
  template:
    metadata:
      name: nginx
      labels: 
        server: nginx
        app: web
    spec:
      containers:
      - name: nginx
        image: nginx:1.14-alpine
        imagePullPolicy: IfNotPresent

部署語句以下:

kubectl apply -f nginx-deploy.yaml

虛擬服務文件

​ 故障注入就在虛擬服務資源中,內容以下:

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: vs
spec:
  hosts:
  - nginx-svc
  http:
  - fault:
      abort:
        percentage:
          value: 100
        httpStatus: 503
    route:
    - destination: 
        host: nginx-svc

部署語句以下:

kubectl apply -f nginx-vs.yaml

自此,整個實例部署完畢。

驗證故障注入

​ 執行以下語句登陸客戶端:

kubectl exec -it client-5b77d5949f-clrb7 -- sh

​ 使用 wget 訪問 nginx-svc:

wget -q -O - http://nginx-svc

發現模擬後端服務停止失效。以下圖所示:

img

相關文章
相關標籤/搜索