来自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
.