如何使用 Istio 重定向 pod 的传出流量

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

我有一个已容器化并在 Kubernetes 集群内运行的应用程序。该应用程序在端口 8443 上运行,但是应用程序内有一个我无法控制的错误,它在端口 80 向自身发送请求。作为解决方法,我想重定向任何发往 http://myapp 的流量。 com:80 转至 http://myapp.com:8443。我还需要 mTLS。

我尝试使用可以重定向流量的服务条目,但它没有使用 mTLS。

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: interal-svc-redirect
  namespace: mynamespace
spec:
  hosts:
  - myapp.com
  ports:
  - number: 80
    name: http
    protocol: HTTP
  resolution: DNS
  endpoints:
  - address: mynamespace.myapp.svc.cluster.local
    ports:
      http: 8443
kubernetes istio
1个回答
0
投票

要使用 Istio 重定向 pod 的传出流量并强制执行 mTLS,您可以使用 ServiceEntry 和 VirtualService 资源。你可以这样做,创建一个 ServiceEntry 资源来定义你的应用程序和 Istio 入口网关之间的关系:

apiVersion: networking.istio.io/v1beta1
kind: ServiceEntry
metadata:
  name: myapp-service-entry
  namespace: mynamespace
spec:
  hosts:
  - myapp.com
  partOf: cluster
  selector:
    app: myapp
  ports:
  - number: 80
    name: http
    protocol: HTTP
    targetPort: 80

然后创建 VirtualService 资源来定义流量的路由规则:

apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: myapp-virtual-service
  namespace: mynamespace
spec:
  selector:
    app: myapp
  egress:
  - port: 8443
    protocol: HTTP
    target: myapp.com
    action: redirect
      authority: myapp.com
      scheme: internal

对于 mTLS,您需要配置入口网关来终止 SSL/TLS 连接,并使用 Istio 的 mTLS 功能来保护应用程序与 Istio 入口网关之间的通信。您可以按照 Istio 文档中的说明使用 Istio 入口网关设置 mTLS

您可以遵循的另一种方法是来自下面链接中的 lstio 文档,

服务条目 您可以使用服务条目将条目添加到 Istio 内部维护的服务注册表中。添加服务条目后,Envoy 代理可以将流量发送到该服务,就像它是网格中的服务一样。配置服务条目允许您管理网格外部运行的服务的流量,包括以下任务:

重定向和转发外部目的地的流量,例如从网络使用的 API,或传统基础设施中服务的流量。 为外部目标定义重试、超时和故障注入策略。 通过将 VM 添加到网格来在虚拟机 (VM) 中运行网格服务。 您不需要为您希望网格服务使用的每个外部服务添加服务条目。默认情况下,Istio 将 Envoy 代理配置为将请求传递给未知服务。但是,您无法使用 Istio 功能来控制未在网格中注册的目的地的流量。

服务入口示例 以下示例 mesh-external 服务条目将 ext-svc.example.com 外部依赖项添加到 Istio 的服务注册表中:

apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
  name: svc-entry
spec:
  hosts:
  - ext-svc.example.com
  ports:
  - number: 443
    name: https
    protocol: HTTPS
  location: MESH_EXTERNAL
  resolution: DNS

您可以使用主机字段指定外部资源。您可以完全限定它或使用通配符前缀域名。

您可以配置虚拟服务和目标规则,以更精细的方式控制流向服务条目的流量,就像为网格中的任何其他服务配置流量一样。例如,以下目标规则调整对我们使用服务条目配置的 ext-svc.example.com 外部服务的请求的 TCP 连接超时:

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: ext-res-dr
spec:
  host: ext-svc.example.com
  trafficPolicy:
    connectionPool:
      tcp:
        connectTimeout: 1s

请参阅服务条目参考以获取更多可能的配置选项。

https://istio.io/latest/docs/concepts/traffic-management/

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