Istio 和(或与)Nginx 入口 Controller

标签 istio nginx-ingress

我正在测试 Istio,目前我将测试路由流量的“金丝雀”功能。

在我的测试中,我创建了一个由 5 个微服务(serviceA、serviceB、serviceC、serviceD、serviceE)组成的小型 servicemesh。每个人都可以调用其他人。我只是传递了一个像 A、E、C、B、B、D 这样的路径,请求遵循这个路径。
为了从集群外部调用我的 servicemesh,我有一个 Nginx 入口 Controller 使用指向 serviceA pod 的 Ingress 规则

这工作正常。

我面临的问题涉及使用自定义 header 匹配的流量切换,如下所示:

kind: VirtualService
metadata:
  name: ServiceA
  namespace: demo
  labels:
    app: demo
spec:
  hosts:
  - service-a
  http:
  - route:
    - destination:
        host: service-a
        subset: v1
  - match:
    - headers:
        x-internal-request:
          exact: true
    route:
    - destination:
        host: service-a
        subset: v2

所以在这里,当我将自定义 header x-internal-request 设置为 true 时,我想尝试将流量路由到 ServiceA 的 v2 版本。

问题 :
  • 为了使用此功能,我的服务是否必须知道 x-internal-header 并且必须将其传递给请求中的下一个服务?或者他们不需要处理它,因为 Istio 为他们做这项工作?
  • 为了使用此功能,我是否需要使用 Istio Ingress Controller(带有 Istio 网关)而不是 Nginx Ingress Controller?

  • 今天,我使用 Nginx Ingress Controller 来公开我的一些服务。我们选择 Nginx 是因为它有一些诸如“外部授权”之类的功能,可以为我们节省大量工作,如果我们需要使用 Istio Ingress Controller ,我不确定它是否提供与 Nginx 相同的功能。

    也许有一条我看不到的中间道路

    感谢您的帮助

    最佳答案

    Istio旨在使用 Envoy在每个 Pod 上部署为 sidecars拦截和代理服务网格中微服务之间的网络流量。

    您可以使用 HTTP headers 进行操作通过 Envoy 获取请求和响应以及。据官方Documentation ,自定义 header 可以按以下顺序添加到请求/响应:加权集群级别 header 、路由级别 header 、虚拟主机级别 header 和最终全局级别 header 。因为您的 Envoy代理在每个相关的服务 Pod 上部署为 sidecar , 定制 HTTP header应该传递给每个请求或响应。

    我建议使用 Istio Ingress Controller及其核心组件Istio Gateway它通常用于在 Istio 中启用监控和路由规则功能网状服务。

    GitHub 上打开了一个问题关于Nginx Ingress controller的实现在网格服务中以及路由请求的问题。

    关于Istio 和(或与)Nginx 入口 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51780780/

    相关文章:

    Kubernetes - 服务网格是必须的吗?

    SSL 错误 : Unable to verify the first certificate

    kubernetes - Nginx-ingress - 错误的 src 客户端 ip (X-Real-Ip)

    kubernetes - 入口 nginx 缓存

    在 istio 网格中运行时出现 Redis 断管错误

    kubernetes - 创建 "install/kubernetes/istio-rbac-beta.yaml"时出错

    kubernetes - istio可以调用lambda函数吗?

    kubernetes多域动态路由

    nginx.ingress.kubernetes.io/server-snippet 注解包含无效词位置

    kubernetes - 如何使用 Terraform 公开具有公共(public) IP 地址的 Azure Kubernetes 集群