首页 > 解决方案 > 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"
---  

标签: kubernetesistio

解决方案


解决方案非常简单。

gateways:
- ciro-service2-gateway
- mesh

添加网状网关,该规则也适用于内部呼叫。


推荐阅读