昨天介紹 istio gateway
時有提到,他需要透過 virtual service 才能做到 L7 route rule 的功能,今天就來跟大家介紹這個東西
首先大家先看一下這個部署檔
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: first-vs
spec:
hosts:
# 這邊可以選擇要不要指定
- "first-vs.com"
gateways:
# 這邊要指定昨天做過的 gateway名稱
- first-gateway
http:
- route:
- destination:
port:
number: 80
host: grpc-client.test-istio.svc.cluster.local #這裡就是指向你真正服務 service 的名稱喔
上面 destionation 下面的 host 名稱會這麽長,這是 k8s 內部實際 dns 全名,如果需要跨 namspace 存取,就需要用這樣的全名方式指定。
{service name}.{namespace}.svc.cluster.local 這就是它的規則
這邊簡單說明一下,它的流量管理方式
spec:
hosts:
- reviews
http:
- route:
- destination:
host: grpc-client
subset: v1
weight: 75
- destination:
host: grpc-client
subset: v2
weight: 25
假設你服務要進行改版,你可以同時部署上去,然後透過 virtualservice 來控制,改版的服務可能只分配總流量的 25% 給它,來做實際測試,這種方式會比傳統的更新程式更來得穩固,因為你可以用實際流量來測試新服務有沒有什麼 bug ,就算真的有問題,你也只會損失 25% 的流量,而不會造成全面性的災難,損失客戶流量。
最後以這幾天範例下來,這個流程會是
實務上『切記』istio-ingressgateway,可以有多個選擇,這個 istio-ingressgateway 是 istio 安裝完後預設的,如果放在真實環境,如果有多組 ip 需要掛上去,這時侯就需要使用多組 ingressgateway。