networking - 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 中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 版中,它无法正常工作。在这些情况下,请使用适当的版本验证您的设置。
此外,请参阅故障排除部分。
您可以在集群内验证您应用的配置(更改),fe: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
希望这有帮助。
推荐阅读
- octobercms - 在octobercms中单击提交时,如何使用表中的其他用户输入字段数据保存多行数据?
- python - 如何使用烧瓶结合vue
- flutter - 有条件地显示预定通知
- javascript - 根据从承诺中解析的数据更改/控制复选框选中状态
- java - 为什么我的容器不能使用面向方面编程正确存储?
- java - Char 什么时候表现得像 Java 中的 Char 和整数?
- android - 查询sqlite数据库时没有这样的列错误
- python - 缺少日期值
- c - 我正在尝试构建一个并发计数器程序,当线程增加时性能时间会增加
- wcf - DispatchOperation.ParameterInspectors 在 netstandard2.0 中不可用