使用 Istio 代理外部 Rest API

问题描述 投票:0回答:2

我使用 Istio 来管理 K8S 微服务,但有一些 REST API (https) 在 K8S 集群外部运行。 现在我想通过 Istio 代理这些 API,而不是直接调用它们。 例如:

  1. 所有 api 都使用“api.xyz.com”作为域。
  2. 现在,如果有人调用“https://api.xyz.com/v2/review”,那么它应该转到部署在 K8S 集群中的服务。这对我有用(使用虚拟服务和网关)
  3. 现在,如果请求到达“https://api.xyz.com/review”(此处没有 v2),那么我想将该请求发送到外部 API“https://execute.abc.com/v1/review”(这里添加了“v1”,因此我们还需要重写 url),无论收到什么响应,都应该返回。
    我尝试使用 ServiceEntry 但没有取得任何成功。我是 Istio 新手,所以不确定我在这里缺少什么。

感谢您的帮助!

istio http-proxy istio-gateway
2个回答
0
投票

根据 istio 文档为 443 正确端口创建 ServiceEntry 和 Destination 规则。

它应该在定义网关的命名空间中创建。如果您的网关在 

execute.abc.com

中定义,则按如下方式创建对象:-

istio-system

如果您的模式是 TLS: SIMPLE,则目标规则可以指定证书
https://istio.io/latest/docs/reference/config/networking/destination-rule/#ClientTLSSettings

您可以在 ingressgateway 使用现有的 cacert,也可以指定 credentialName 并使用密钥 cacert 部署密钥: apiVersion: networking.istio.io/v1beta1 kind: ServiceEntry metadata: name: execute-domain namespace: istio-system spec: hosts: - execute.abc.com ports: - number: 443 name: https-execute-domain protocol: HTTPS resolution: DNS location: MESH_EXTERNAL exportTo: - "."

然后在您的虚拟服务中,您可以将其添加到 v2 路由之前。在 VS 中,顺序很重要。如果找到匹配项,则第一个。

所以看起来像这样:-

apiVersion: networking.istio.io/v1beta1 kind: DestinationRule metadata: name: execute-domain namespace: istio-system spec: host: execute.abc.com exportTo: - "." trafficPolicy: tls: mode: SIMPLE sni: execute.abc.com caCertificates: /etc/istio/ingressgateway-ca-certs/cacerts



0
投票
https://github.com/istio/istio/issues/50997

@bhantol 你尝试过并成功了吗?或者只是认为它可能有效。 谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.