我具有以下VirtualService:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: external-vs
namespace: dev
spec:
hosts:
- "*"
gateways:
- http-gateway
http:
- name: "postauth"
match:
- uri:
exact: /postauth
route:
- destination:
port:
number: 8080
host: postauth
- name: "frontend"
match:
- uri:
exact: /app
route:
- destination:
port:
number: 8081
host: sa-frontend
我希望/ postauth端点的调用将被路由到postauth服务,而/ app端点的调用将被路由到sa-frontend服务。发生的是,所有调用最终都被路由到文件中的第一个路由器,在上述情况下为postauth,但是如果我更改顺序,它将变为sa-frontend
所有服务和部署都在同一个名称空间(dev)中。
这是某种预期的行为吗?我的解释是,以上内容仅应允许调用/ postauth和/ app端点,而不能将其路由到各自的服务。
根据HTTPMatchRequest中的documentaion for Istio 1.3,您可以找到
字段:名称,类型:字符串
我已经比较了1.1和1.3版本之间的设置:在版本1.3.4中,此伞兵工作正常,并且路由使用以下名称传播:
[
{
"name": "http.80",
"virtualHosts": [
{
"name": "*:80",
"domains": [
"*",
"*:80"
],
"routes": [
{
"name": "ala1",
"match": {
"prefix": "/hello1",
"caseSensitive": true
},
"route": {
"cluster": "outbound|9020||hello1.default.svc.cluster.local",
.
.
.
{
"name": "ala2",
"match": {
"prefix": "/hello2",
"caseSensitive": true
},
"route": {
"cluster": "outbound|9030||hello2.default.svc.cluster.local",
虽然在1.1版中,它无法正常工作。在这种情况下,请使用适当的release验证设置。
此外,请参考Troubleshooting部分。
您可以在集群中验证您应用的配置(更改),例如:Envoy实例的配置方式:
istioctl proxy-config cluster -n istio-system your_istio-ingressgateway-name
验证服务的路由配置和虚拟主机:
istioctl proxy-config routes -n istio-system your_istio-ingressgateway-name -o json
希望获得帮助。