天天看點

istio

---基礎環境

kubectl run base --image=python -n test --dry-run=client -o yaml -- python -m http.server 
kubectl create 	svc clusterip base --tcp 8000:8000 -n test --dry-run=client -o yaml
kubectl label pod base app=base -n test
           
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: test-web
  namespace: istio-system
spec:
  selector:
    app: istio-ingressgateway
  servers:
  - name: test-web 
    hosts:
    - "test-web.wed.com"
    port:
      name: test-web
      number: 80
      protocol: http
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: base
  namespace: test
spec:
  host: base.test.svc.cluster.local
           
istioctl proxy-config listeners base -n test
istioctl proxy-config clusters base -n test
istioctl proxy-config routes base -n test
           

子集

---基礎環境
#kubectl run basev1 --image=python -n test --dry-run=client -o yaml -- sh -c "cd tmp;python -m http.server" 
kubectl run basev1 --image=python -n test -- sh -c "cd tmp;python -m http.server" 
kubectl create 	svc clusterip base --tcp 8000:8000 -n test --dry-run=client -o yaml
kubectl label pod basev1 app=base version=v1 -n test


kubectl run basev2 --image=python -n test --dry-run=client -o yaml -- python -m http.server 
kubectl run basev2 --image=python -n test -- python -m http.server 
kubectl create 	svc clusterip base --tcp 8000:8000 -n test --dry-run=client -o yaml
kubectl label pod basev2 app=base version=v2 -n test
           
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
        subset: v1
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: base
  namespace: test
spec:
  host: base.test.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1  # 比對pod.spec.metadata.labels
  - name: v2
    labels:
      version: v2
---
           

權重

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
        subset: v1
      weight: 20
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
        subset: v2
      weight: 80

---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: base
  namespace: test
spec:
  host: base.test.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1  # 比對pod.spec.metadata.labels
  - name: v2
    labels:
      version: v2
           

故障注入.中斷

---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
    fault:
      abort:
        httpStatus: 503
        percentage:
          value: 50
           

故障注入.延遲

---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
    fault:
      delay:
        fixedDelay: 10s
        percentage:
          value: 50
           

操作标頭

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
    headers:
      request:
      # 添加請求标頭
        add:
          vip-level: v3
        set:
          User-Agent: Chrome
        remove:
        - method
      response:
        add:
          vip-level: v3
        set:
          User-Agent: Chrome
        remove:
        - method
      # 添加請求标頭
        add:
          vip-level: v3
        set:
          User-Agent: Chrome
        remove:
        - method
           

match 類似nginx 中location

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: test-web
  namespace: istio-system
spec:
  gateways:
  - test-web
  hosts:
  - "test-web.wed.com"
  http:
  - match:
    - headers:
        User-Agent:
          exact: Chrome
        vip:
          exact: "true"
    route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
        subset: v1
  - route:
    - destination:
        host: base.test.svc.cluster.local
        port:
          number: 8000
          
---
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: base
  namespace: test
spec:
  host: base.test.svc.cluster.local
  subsets:
  - name: v1
    labels:
      version: v1  # 比對pod.spec.metadata.labels
  - name: v2
    labels:
      version: v2
           
curl -H "User-Agent: Chrome" -H "vip: true" http://test-web.wed.com
           
下一篇: tracing