3

来自istio 文档的多信任部署模型

多信任图

我想将多个网格连接在一起。我目前管理 3 个不同的 AKS 集群

  • 运营 (aks-ops-euwest-1)
  • 分期 (aks-stg-euwest-1)
  • 生产 (aks-prod-euwest-1)

我在 Operations 上运行 Hashicorp Vault,我希望能够访问例如。使用 istio mTLS(用于自动秘密轮换)在 Staging 和 Production 中运行的 Postgres。

每个集群都在不同的网络中运行 istio(多主)。每个集群都有不同的 ClusterName、MeshID、TrustDomain 和 NetworkID。不过,这些cacerts秘密是使用通用根 CA配置的

图表

istio 文档中,为了实现跨集群通信,eastwestgateway必须部署一个特殊的。tlsMode 是AUTO_PASSTHROUGH.

这些是东西方网关的环境变量

# sni-dnat adds the clusters required for AUTO_PASSTHROUGH mode
- name: ISTIO_META_ROUTER_MODE
  value: "sni-dnat"
# traffic through this gateway should be routed inside the network
- name: ISTIO_META_REQUESTED_NETWORK_VIEW
  value: aks-ops-euwest-1

我不想通过在集群之间共享秘密来启用自动服务发现。为什么?因为我想要对网格之间要公开哪些服务进行细粒度控制。我希望能够AuthorizationPolicies从远程集群中指定指向服务帐户的点(因为不同的信任域)

例如:

# production cluster
kind: AuthorizationPolicy
spec:
  selector:
    matchLabels:
      app: postgres
  rules:
  - from:
      source:
        - principal: spiffe://operations-cluster/ns/vault/sa/vault

这是来自istio 文档

在某些高级场景中,可能不需要跨集群进行负载平衡。例如,在蓝/绿部署中,您可以将不同版本的系统部署到不同的集群。在这种情况下,每个集群都有效地作为一个独立的网格运行。这种行为可以通过以下几种方式实现:

  • 不要在集群之间交换远程机密。这提供了集群之间最强的隔离。
  • 使用 VirtualService 和 DestinationRule 禁止在两个版本的服务之间进行路由。

istio 文档没有具体说明的是如何在不共享机密的情况下启用跨集群通信。在共享秘密时,istiod 将创建额外的 envoy 配置,允许 pod 通过东西网关透明地进行通信。它没有指定的是如何在不共享机密时手动创建这些配置。

tlsMode 是AUTO_PASSTHROUGH. 查看 istio 存储库

    // Similar to the passthrough mode, except servers with this TLS
    // mode do not require an associated VirtualService to map from
    // the SNI value to service in the registry. The destination
    // details such as the service/subset/port are encoded in the
    // SNI value. The proxy will forward to the upstream (Envoy)
    // cluster (a group of endpoints) specified by the SNI
    // value. This server is typically used to provide connectivity
    // between services in disparate L3 networks that otherwise do
    // not have direct connectivity between their respective
    // endpoints. Use of this mode assumes that both the source and
    // the destination are using Istio mTLS to secure traffic.
    // In order for this mode to be enabled, the gateway deployment
    // must be configured with the `ISTIO_META_ROUTER_MODE=sni-dnat`
    // environment variable.

有趣的部分是The destination details such as the service/subset/port are encoded in the SNI value

似乎在集群之间共享秘密时,istio 将添加特使配置,这些配置将有效地将这些服务/子集/端口编码为特使集群的 SNI 值。但是,如果不共享秘密,我们怎么能达到同样的结果呢?

我查看了这个存储库,但它已经过时并且没有使用eastwestgateway.

我也在这里这里的 istio 论坛上发布了问题,但很难从那里获得帮助。

4

0 回答 0