我正在尝试了解 Istio 流量路由。我在演示模式下安装了 Istio 并开始使用示例。这些示例让您安装了一些网关(我安装了 bookinfo-gateway
和 httpbin-gateway
。
但似乎我所有的流量都通过 istio-ingressgateway
命名空间中的 istio-system
中定义的“http2”端口。
The documentation 参考了这个:
<块引用>Istio 提供了一些您可以使用的预配置网关代理部署(istio-ingressgateway 和 istio-egressgateway) - 如果您使用我们的演示安装,则两者都会部署
但是当我运行:kubectl -n istio-system get service istio-ingressgateway -o yaml
时,结果显示 kind: Service
。
演示让我制作的其他网关显示 kind: Gateway
。
所以我很困惑...
istio-ingressgateway
(这实际上是一种服务)。VirtualService
连接到 istio-ingressgateway
。它只是在寻找所有 VirtualServices
吗?答案 0 :(得分:2)
服务和网关之间有区别吗?
是的。
istio-ingressgateway
是 LoadBalancer
(或 NodePort
,取决于您的设置)类型的 kubernetes 服务,用作集群的入口点。 ingressgateway 是 istio 的入口控制器,它是完全可选的。gateway
是 istio 的自定义资源,用作网格的入口。它被选择器绑定到一个入口网关,例如见 https://github.com/istio/istio/blob/master/samples/httpbin/httpbin-gateway.yamlkind: Gateway
[...]
spec:
selector:
istio: ingressgateway
<块引用>
我将如何使用示例应用程序网关而不是 istio-ingressgateway(这实际上是一种服务)。
您需要两者(或另一种形式的入口控制器并通过网状网关路由所有流量,更多信息见下文)。
<块引用>istio 如何将我的 VirtualService 连接到 istio-ingressgateway。它只是在寻找所有 VirtualServices 吗?
再次查看这个 yaml 文件:https://github.com/istio/istio/blob/master/samples/httpbin/httpbin-gateway.yaml
网关绑定到入口网关。
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: httpbin-gateway
spec:
selector:
istio: ingressgateway
[...]
像文件中的 VirtualService
绑定到 gateway
。
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: httpbin
spec:
gateways:
- httpbin-gateway
[...]
因此,如果流量使用您的网关,则考虑 VirtualService
。
除了您配置的网关之外,还有网状网关。因此,如果您希望您的内部集群流量使用 istio 配置,您需要将网格网关添加到您的虚拟服务中:
gateways:
- httpbin-gateway
- mesh
或者为此创建一个单独的虚拟服务。如果你没有设置任何网关,将使用网状网关,因为它是默认的。 请参阅:https://istio.io/latest/docs/reference/config/networking/virtual-service/#VirtualService -> 网关条目