首页 > 解决方案 > 如何在 AWS EKS 中使用 istio 网格启用自动 mTLS?

问题描述

我最近开始在 AWS EKS 集群中学习和实施 istio。为了为入口网关配置 TLS,我遵循了本指南,它只是要求您将 AWS ACM ARN id 作为注释添加到 istio-ingressgateway。所以,我既不需要使用证书来创建secret也不需要使用 envoyproxy 的 SDS。

此设置在网关处终止 TLS,但我还想在网格中启用 mTLS 以保护服务-服务通信。通过遵循他们的文档,我创建了这个策略来在命名空间中强制执行 mTLS:

apiVersion: security.istio.io/v1beta1
kind: PeerAuthentication
metadata:
  name: xyz-mtls-policy
  namespace: xyz-dev
spec:
  mtls:
    mode: STRICT

但即使在应用了这个之后,我看到一个服务能够使用http.

所以我的问题是:如何使用 ACM 证书在我的命名空间中实现 mTLS?

标签: securitykubernetesistioamazon-eksaws-certificate-manager

解决方案


如果您从网格内部调用,我会说它工作正常,请查看此处此处

Istio 中的双向 TLS

Istio 提供双向 TLS 作为服务到服务身份验证的解决方案。

Istio 使用 sidecar 模式,这意味着每个应用程序容器都有一个 sidecar Envoy 代理容器在其旁边运行在同一个 pod 中。

  • 当服务接收或发送网络流量时,流量总是首先通过 Envoy 代理。

  • 当在两个服务之间启用 mTLS 时,客户端和服务器端 Envoy 代理在发送请求之前会验证彼此的身份。

  • 如果验证成功,则客户端代理对流量进行加密,并将其发送到服务器端代理。

  • 服务器端代理解密流量并将其在本地转发到实际的目标服务。

在此处输入图像描述


我在 istio 1.6.8 上,认为它默认启用 mTLS。

是的,从 istio 1.5 版本开始默认启用。有关于此的相关文档。

现在默认启用自动双向 TLS。Sidecar 之间的流量自动配置为双向 TLS。如果您担心加密开销,您可以通过在安装期间添加选项 -- set values.global.mtls.auto=false 来明确禁用此功能。有关更多详细信息,请参阅自动双向 TLS


是否有任何明确的流程可以证明它确实在使用 mTLS?

我会说有3种方法

  • 使用 pod 进行测试

您可以将其从严格更改为许可并从网格外部调用它,它应该可以工作。然后将其更改为严格并再次调用它,它应该不起作用。在这两种方式中,您都应该能够从网格内的 pod 调用它。

  • 基亚利

如果您想在启用 mtls 时以视觉方式看到 kiali 应该有类似挂锁的东西,那么github 上就有关于它的问题。

在此处输入图像描述 在此处输入图像描述

  • 普罗米修斯

banzaicloud中已经提到过,您在评论中提到,您可以检查连接安全策略指标标签。如果请求实际上已被加密,Istio 会将此标签设置为mutual_tls。


让我知道是否还有其他问题。


推荐阅读