Istio 服务到服务的通信

Istio service to service communication

我是 Istio 的新手,我正在尝试与 Istio 通信 2 spring 启动应用程序:有要求的组件。

  1. 我已经使用演示配置文件在 GKE 集群上安装了 Istio 1.13.2:
istioctl install --set profile=demo -y
  1. 我已经自动将 sidecar 代理注入默认命名空间:
kubectl label namespace default istio-injection=enabled
  1. 我已经将 istio 入口网关定义为入口点和指向组件服务的虚拟服务。
 apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http      
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-gateway-vs
spec:
  hosts:
  - "*"
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /component
    route:
    - destination:
        host: component
        port:
          number: 8080
---

component app 只有一个 enpoint: /component 即 returns 一个字符串,到目前为止一切正常。

流程如下

我的网关----->组件

我的问题是如何在不通过 istio-ingress-gateway 的情况下直接将组件与需求进行通信。

我的网关----->组件---->要求

可能吗?

注意:我试过在虚拟服务中添加需求,但它似乎是通过 istio-ingress-gateway 而不是直接从组件到需求。

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http      
      protocol: HTTP
    hosts:
    - "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-gateway-vs
spec:
  hosts:
  - "*"
  gateways:
  - my-gateway
  http:
  - match:
    - uri:
        prefix: /component
    route:
    - destination:
        host: component
        port:
          number: 8080
  - match:
    - uri:
        prefix: /requirement
    route:
    - destination:
        host: requirement
        port:
          number: 8080
---

我不确定为什么 istio 入口控制器会介于两者之间。

你应该看看这个简单的例子:https://istio.io/latest/docs/examples/bookinfo/#deploying-the-application

在 istio 示例中,您可以看到 review 服务将请求发送到 rating 服务。

因此,对于连接或服务到服务的通信,您可以只使用 服务名称

因此,如果您检查评论服务来源,您将了解服务如何调用其他服务。

Java 示例:

https://github.com/istio/istio/blob/master/samples/bookinfo/src/reviews/reviews-application/src/main/java/application/rest/LibertyRestEndpoint.java#L42

Python 示例:

https://github.com/istio/istio/blob/master/samples/bookinfo/src/productpage/productpage.py#L61

所以你的结束流程会是这样的

istio-ingress-gateway----->service-1----->service-2