在services中修改annotations:kt-virtual-environment/rule: 后不会更新vs,需要重新删除svc重新创建。
在services中修改annotations:kt-virtual-environment/rule: 后不会更新vs,需要重新删除svc重新创建。
测试过修改svc中Prefix字段或allowOrigin字段
kt-virtual-environment/rule: '{"Match":[{"Uri":{"Prefix":"/"}}],"corsPolicy":{"allowOrigin":["*"],"allowCredentials":true,"allowHeaders":["app-key","xxx"],"allowMethods":["GET","POST","PUT","DELETE","PATCH","OPTIONS"]}}'
之后 virtual-env-operator 多出如下日志
[Info] 2022-02-18 11:04:27 Adding Service gateway
[Info] 2022-02-18 11:04:27 Trigger reconcile VirtualEnvironment
[Info] 2022-02-18 11:04:32 Send reconcile signal
[Info] 2022-02-18 11:04:32 Receive reconcile request with name: virtualenv
[Info] 2022-02-18 11:04:32 Unmarshal route rule successful
但vs中配置并未更新
删除svc重建后vs更新,virtual-env-operator 日志如下
[Info] 2022-02-18 11:09:09 Removing Service gateway
[Info] 2022-02-18 11:09:09 VirtualService deleted gateway
[Info] 2022-02-18 11:09:09 Push reconcile request to trigger virtualenv
[Info] 2022-02-18 11:09:09 Trigger reconcile VirtualEnvironment
[Info] 2022-02-18 11:09:09 DestinationRule deleted gateway
[Info] 2022-02-18 11:09:09 Push reconcile request to trigger virtualenv
[Info] 2022-02-18 11:09:12 Adding Service gateway
[Info] 2022-02-18 11:09:19 Send reconcile signal
[Info] 2022-02-18 11:09:19 Receive reconcile request with name: virtualenv
[Info] 2022-02-18 11:09:19 Unmarshal route rule successful
[Info] 2022-02-18 11:09:19 Push reconcile request to trigger virtualenv
[Info] 2022-02-18 11:09:19 VirtualService gateway created
[Info] 2022-02-18 11:09:19 Push reconcile request to trigger virtualenv
[Info] 2022-02-18 11:09:19 DestinationRule gateway created
遇到了同样的问题,此外,还有一个相关问题:
当一个service只关联了一个版本的Pod,没有子集pod时,不会为这个service创建virtualservice,这就导致service上配置的kt-virtual-environment/rule就失效了,如url重写之类的规则。
建议为service创建一个托底的virtualservice,无论该service下有没有子集pod
遇到了同样的问题,此外,还有一个相关问题:
当一个service只关联了一个版本的Pod,没有子集pod时,不会为这个service创建virtualservice,这就导致service上配置的kt-virtual-environment/rule就失效了,如url重写之类的规则。
建议为service创建一个托底的virtualservice,无论该service下有没有子集pod
看了源码,发现没有对自定义VirtualService规则做判断,可以在位于virtual_service_generator.go里的isRouteEqual方法中最上面插入以下代码,然后编译打包
if route.Redirect != target.Redirect {
return false
}
if route.Rewrite != target.Rewrite {
return false
}
if route.WebsocketUpgrade != target.WebsocketUpgrade {
return false
}
if route.Timeout != target.Timeout {
return false
}
if route.Retries != target.Retries {
return false
}
if !reflect.DeepEqual(route.Fault, target.Fault) {
return false
}
if !reflect.DeepEqual(route.Mirror, target.Mirror) {
return false
}
if !reflect.DeepEqual(route.DeprecatedAppendHeaders, target.DeprecatedAppendHeaders) {
return false
}
if !reflect.DeepEqual(route.Headers, target.Headers) {
return false
}
if !reflect.DeepEqual(route.RemoveResponseHeaders, target.RemoveResponseHeaders) {
return false
}
if !reflect.DeepEqual(route.CorsPolicy, target.CorsPolicy) {
return false
}
至于我说的另外问题,可以参考提交记录,把加上的判断再去掉就好了