Istio 服务到服务的通信
Istio service to service communication
我是 Istio 的新手,我正在尝试与 Istio 通信 2 spring 启动应用程序:有要求的组件。
- 我已经使用演示配置文件在 GKE 集群上安装了 Istio 1.13.2:
istioctl install --set profile=demo -y
- 我已经自动将 sidecar 代理注入默认命名空间:
kubectl label namespace default istio-injection=enabled
- 我已经将 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 示例:
Python 示例:
https://github.com/istio/istio/blob/master/samples/bookinfo/src/productpage/productpage.py#L61
所以你的结束流程会是这样的
istio-ingress-gateway----->service-1----->service-2
我是 Istio 的新手,我正在尝试与 Istio 通信 2 spring 启动应用程序:有要求的组件。
- 我已经使用演示配置文件在 GKE 集群上安装了 Istio 1.13.2:
istioctl install --set profile=demo -y
- 我已经自动将 sidecar 代理注入默认命名空间:
kubectl label namespace default istio-injection=enabled
- 我已经将 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 示例:
Python 示例:
https://github.com/istio/istio/blob/master/samples/bookinfo/src/productpage/productpage.py#L61
所以你的结束流程会是这样的
istio-ingress-gateway----->service-1----->service-2