【问题标题】:How to enable automatic mTLS using istio mesh in AWS EKS?如何在 AWS EKS 中使用 istio 网格启用自动 mTLS?
【发布时间】:2021-01-14 08:49:02
【问题描述】:

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

此设置在网关处终止 TLS,但我还想在网格中启用 mTLS 以保护服务-服务通信。通过关注their documentation,我创建了此策略以在命名空间内强制执行 mTLS:

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

但即使应用了这个,我看到一个服务能够使用 http 调用另一个服务。

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

【问题讨论】:

  • 您是从网格内部还是外部调用?如果它在网格内,那么我会说它工作正常,看看here。另外看看here
  • 从网格内部调用。我之前确实参考过这篇文章,但不知道如何检查 connection_security_policy 指标。终于能够从普罗米修斯检查并将其设置为mutual_tls,即使我没有应用上述策略。我在 istio 1.6.8 上,认为它默认启用 mTLS。有没有明确的流程可以证明它确实在使用mTLS?
  • 我已经回答了你所有的问题。

标签: security kubernetes istio amazon-eks aws-certificate-manager


【解决方案1】:

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

Istio 中的双向 TLS

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

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

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

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

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

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


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

是的,从 istio 1.5 版本开始默认启用。关于这个有相关的docs

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


有没有明确的流程可以证明确实在使用mTLS?

我想说有3种方法

  • 使用 pod 进行测试

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

  • 基利

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

  • 普罗米修斯

banzaicloud中已经提到过,你提到在cmets中可以查看Connection Security Policy metric label。如果请求实际上已被加密,Istio 会将此标签设置为mutual_tls。


如果还有其他问题,请告诉我。

【讨论】:

  • 嘿,如何使用网格外部的 pod 进行测试?编辑:通过 AWS 公开的 pod IP 地址?还是你说的服务?如果服务那么,nodeport、clusterip 还是 loadbalancer?
  • @Grimlock 在 banzaicloud 上有一个关于使用 curl 进行测试的示例。 istio documentation 上有用于测试 httpbin 和 sleep 样本的样本。
  • 是的,这些例子现在很有意义。谢谢!
猜你喜欢
  • 2019-01-21
  • 2022-07-20
  • 2020-11-02
  • 2021-06-16
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 2021-01-11
  • 2021-12-08
相关资源
最近更新 更多