【问题标题】:how to forward request to public service like cdn using istio virtualservice?如何使用 istio virtualservice 将请求转发到公共服务(如 cdn)?
【发布时间】:2020-02-04 08:25:27
【问题描述】:

我正在尝试使用 istio 虚拟服务进行反向代理

可以在虚拟服务中转发请求吗? (像 nginx 的 proxy_pass)

结果,

定义了服务入口,但它只是“重定向”,而不是转发请求。

这是我的 serviceentry.yaml 和 virtualservice.yaml

  1. serviceentry.yaml
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: my-service-proxy
  namespace: my-service
spec:
  hosts:
   - CDN_URL
  location: MESH_EXTERNAL
  ports:
    - number: 80
      name: http
      protocol: HTTP
    - number: 443
      name: https
      protocol: TLS
  resolution: DNS

  1. virtualservice.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: my-service
  namespace: my-service
spec:
  hosts:
   - myservice.com
  gateways:
   - myservice
  http:
  - match:
    - uri:
        prefix: /about
    rewrite:
      authority: CDN_URL
      uri: /
    route:
    - destination:
        host: CDN_URL
  - route:
    - destination:
        host: my-service-web.svc.cluster.local
        port:
          number: 80

virtualservice 可以像 nginx-igress 一样工作吗?

【问题讨论】:

    标签: kubernetes istio


    【解决方案1】:

    基于istio discuss

    用户@palic 在这里问了同样的问题

    不应该让ISTIO做反向代理吗 事情,所以没有人需要一个网络服务器(httpd/nginx/ lighthttpd/...) 做反向代理工作?

    @Daniel_Watrous 提供的答案

    Istio 控制平面的工作是配置一组反向代理。网络服务器的目的是提供内容,而不是反向代理。 Istio 的核心反向代理技术是 Envoy,Envoy 可以用作 HAProxy、nginx、Apache、F5 或任何其他用作反向代理的组件的替代品。


    可以在虚拟服务中转发请求

    基于此,我会说在虚拟服务中是不可能的,它只是重写(重定向),我认为它对你有用。


    当我需要反向代理功能时,我必须使用 nginx ingresscontroller(或其他东西)而不是 istio igress gateway?

    如果我们谈论反向代理,那么是的,您需要使用 istio 本身以外的其他技术。

    就我而言,您可以使用一些 nginx pod,它将被配置为外部服务的反向代理,它将成为您的虚拟服务的主机。

    所以它看起来像下面的例子。

    示例

    入口网关 -> 虚拟服务 -> nginx pod(在 nginx 上配置反向代理)
    服务入口 -> 集群外 URL 的可访问性

    如果您还有其他问题,请告诉我。

    【讨论】:

    • 当我需要反向代理功能时,我必须使用nginx ingresscontroller(或其他东西)而不是istio igress gateway?
    • 嗨@highalps,我在回答中进行了编辑以回答您的问题,请查看。
    • 我刚刚通过从 istio 切换到 nginx-ingress 控制器解决了我的问题。但这是一种临时方法,所以我要试试这个。非常感谢!
    • @jp97 它可以工作,但我根本没有使用 Service Entry。虚拟服务 -> 服务 -> Nginx Pod -> 使用 proxy_pass 从集群外部获取资源我不知道为什么它在没有服务入口的情况下工作。
    • @highalps 这可能是因为您将 global.outboundTrafficPolicy.mode 选项设置为 ALLOW_ANY。更多关于它here
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 2020-03-02
    • 2010-09-12
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 2016-04-10
    相关资源
    最近更新 更多