我是 istio 新手。我有一个应用程序部署在 k8s 集群上。我想使用 istio 入口网关向互联网公开服务。我的服务在端口 80 上运行。所以我创建了一个网关和虚拟服务 yaml 文件。当我将前缀设置为“/”时,它工作正常。但如果我将前缀设置为“/xyz”。它不起作用。帮助。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: vote
spec:
hosts:
- "*"
gateways:
- my-gateway
http:
- match:
- uri:
prefix: /xyz
route:
- destination:
host: vote # Replace with the actual service name
port:
number: 80
and this is the gateway code
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
谢谢
我猜您将流量路由到的
vote
服务没有 /xyz
路径的句柄。根据您当前的配置,如果您向 http://[yourgateway]/xyz
发送请求,流量将路由到 http://vote/xyz
。如果不需要,您必须在匹配后重写路径。
例如:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: vote
spec:
hosts:
- "*"
gateways:
- my-gateway
http:
- match:
- uri:
prefix: /xyz
rewrite:
uri: /
route:
- destination:
host: vote # Replace with the actual service name
port:
number: 80
上述配置仍然会捕获
http://[yourgateway]/xyz
,但会将捕获的部分(/xyz
)重写为/
,因此请求将发送到vote/
(而不是vote/xyz
)。