kubernetes - istio 规则不适用于外部调用
问题描述
我希望特定服务的所有入口流量都由该服务的版本 8 提供。
可通过以下主机从外部访问服务:
我的.ciro.it
如果我调用 my.ciro.it,我可以看到规则运行良好。总是以 8 版本响应。如果我从其他服务 (my2.ciro.it) 调用 my.ciro.it,则规则不起作用并且服务响应版本 8 或 9 的替代方案。
这是我的虚拟服务和目标规则:
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: ciro-service2-destination-rules
spec:
host: ciro-service2.myns.svc.cluster.local
subsets:
- labels:
version: v8
name: v8
- labels:
version: v9
name: v9
trafficPolicy:
tls:
mode: DISABLE
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: ciro-service2-virtual-service
spec:
hosts:
- my.ciro.it
gateways:
- ciro-service2-gateway
http:
- match:
- uri:
prefix: /
route:
- destination:
host: ciro-service2.myns.svc.cluster.local
subset: v8
port:
number: 8082
weight: 100
- destination:
host: ciro-service2.myns.svc.cluster.local
subset: v9
port:
number: 8082
weight: 0
添加网关
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: ciro-service2-gateway
spec:
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "my.ciro.it"
---
解决方案
解决方案非常简单。
gateways:
- ciro-service2-gateway
- mesh
添加网状网关,该规则也适用于内部呼叫。
推荐阅读
- react-native - React-native header 标题图像被切断,为什么?
- reactjs - tsconfig 路径在我的反应打字稿项目中不起作用
- javascript - 如何记录我的按钮点击,并在我的计算器屏幕的输入框中显示它的值?
- python - python中大数据的堆积条形图
- oracle - BULK COLLECT INTO 对对象表的 UNION 查询
- python-3.x - 在 Ubuntu 18.04 上运行 Boto3
- django - Wagtailstreamforms TypeError from_db_value() 缺少 1 个必需的位置参数:'context'
- c++ - 从引用的容器 C++ 中获取 value_type 的优雅方式
- ruby-on-rails - 如何在 ruby on rails 的单元测试中使用 double 来测试异常处理?
- excel - 仅将过滤后的数据/可见单元格从多个工作表复制到新工作簿