首页 > 解决方案 > 本地 Kubernetes 集群上的 Istio Ingress Gateway 无法路由流量(Linux 容器)

问题描述

我有一个用于测试本地 docker、本地 Kubernetes 和 Istio 设置的演示应用程序。我最初将演示服务公开为 type=NodePort,它在没有 Istio 的 http://localhost:<NodePort#> 上运行良好。然后,我尝试安装 Istio 并将服务配置为 ClusterIP,并通过 Istio-IngressGateway 和 VirtualService 将其公开,基本配置是 inline :

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: demo-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: demoservice
spec:
  hosts:
  - "*"
  gateways:
  - demo-gateway
  http:
  - route:
    - destination:
        host: demo-service
        port:
          number: 80

部署后,导航到 http://localhost/ 会出现 HTTP 404 错误。服务、VS、网关在集群上一切正常。由于我是新手,我不确定我是否缺少 Istio 或 Kubernetes 的一些基本内容。

标签: kuberneteskubernetes-ingressistio

解决方案


istio-ingressgateway 和 virtualservice 的配置看起来不错。IstioByExample ( link ) 有几个在各种用例中使用 istio 的示例。

由于您在尝试本地访问服务时收到 404,我怀疑 istio sidecar 未安装在服务本身中。Istio 具有启用自动边车部署(链接)的配置,该配置会在部署新 pod 时安装边车。我还建议您阅读本书示例(链接)以了解它的各种组件。

样本中的一些片段是

要启用边车注入 - 使用

$ kubectl label namespace default istio-injection=enabled

启用 sidecar 注入后再次执行部署,因为它将在后续部署(之前未部署)中工作

如果这有效或无效,请在此处发表评论,以便我可以尝试查看还有什么可能导致问题。


推荐阅读