操作場景
1.8版本的網格默認支持VirtualService的Delegate功能,同時ASM控制臺界面也僅支持delegate格式的VirtualService,升級版本并不會對用戶的VirtualService進行修改,在升級后用戶將無法在頁面對路由進行維護,因此用戶需要根據本文指導對應用VirtualService進行修改。

說明對于delegate的介紹可以參考istio社區的說明:
//istio.io/latest/docs/reference/config/networking/virtual-service/#Delegate
約束與限制
- 只有在route和redirect為空時才能設置Delegate。
- ASM只支持一級Delegate,多級Delegate不會生效。
- Delegate VirtualService的HTTPMatchRequest必須是root virtualservice的子集,否則會產生沖突。
- Delegate特性只對HTTP/GRPC協議有效,其他協議無需修改。
操作步驟
修改將分兩種情況,下面以加入網格的tomcat服務為例。
一、若升級前服務未添加網關,則升級后進行如下修改,若升級前進行修改則apiVersion不變:
修改apiVersion: networking.istio.io/v1alpha3為apiVersion: networking.istio.io/v1beta1
二、若升級前服務添加了網關,則升級后進行如下修改,若升級前進行修改則apiVersion不變:
1.為網格所在集群配置kubectl命令,參考CCE控制臺集群詳情頁的指導進行配置。
2.在istio-system命名空間下創建兩個virtualservice YAML文件。
文件名:tomcat-default-gateway.yaml
其中,
?tomcat:為修改的服務名
?tomcat-default-gateway:為該virtualservice名,格式為{服務名}-default-gateway
?tomcat-route:為修改virtualservice的名字
?100.85.219.117:為ELB的IP
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: tomcat-default-gateway
namespace: istio-system
spec:
gateways:
- istio-system/tomcat-default-gateway
hosts:
- 100.85.219.117
http:
-
delegate:
name: tomcat-route
namespace: default
match:
-
uri:
prefix: /test
-
文件名:tomcat-route-default.yaml
其中,
?tomcat:為修改的服務名
?tomcat-route-default:為該virtualservice名,格式為{服務名}-route-default
?tomcat-route:為修改virtualservice的名字
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: tomcat-route-default
namespace: istio-system
spec:
hosts:
- tomcat.default.svc.cluster.local
http:
-
delegate:
name: tomcat-route
namespace: default
match:
-
uri:
prefix: /
-
使用如下命令創建virtualservice。
kubectl create -f tomcat-route-default.yaml
kubectl create -f tomcat-default-gateway.yaml
3.kubectl -n{namespace} get vs獲取到服務的virtualservice,執行kubectl -n{namespace} edit vs tomcat-route修改如下:
a.刪除spec.gateways、spec.hosts和spec.http.match.uri
b.tomcat-default-gateway.istio-system.svc.cluster.local替換成istio-system/tomcat-default-gateway
c.修改apiVersion: networking.istio.io/v1alpha3為apiVersion: networking.istio.io/v1beta1
d.destination.host:格式為{服務名}.{namespace}.svc.cluster.local
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
name: tomcat-route
namespace: default
spec:
gateways:
- tomcat-default-gateway.istio-system.svc.cluster.local
- mesh
hosts:
- tomcat
- 100.85.219.117
http:
-
match:
-
gateways:
- istio-system/tomcat-default-gateway
port: 5555
uri:
prefix: /test
route:
-
destination:
host: tomcat.default.svc.cluster.local
port:
number: 8080
subset: v1
-
-
match:
-
gateways:
- mesh
port: 8080
route:
-
destination:
host: tomcat.default.svc.cluster.local
port:
number: 8080
subset: v1
-
4.升級完成后在服務列表頁面,單擊外部訪問URL,檢查訪問是否正常。
5.在服務網關頁面,檢查服務網關路由是否顯示正常。