---基礎環境
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