我使用 Istio 来管理 K8S 微服务,但有一些 REST API (https) 在 K8S 集群外部运行。 现在我想通过 Istio 代理这些 API,而不是直接调用它们。 例如:
感谢您的帮助!
根据 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