如何在 Kubernetes 集群内的 ASP.NET Core Pod 之间轻松设置 HTTPS?

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

假设一个应用程序由使用 ASP.NET Core 实现的不同 Web 服务组成,每个服务都部署为 Kubernetes 集群(确切地说是 AKS)中的 Pod。现在,假设我想通过 HTTPS 保护这些服务之间的集群内部通信。这需要我:

  1. 获取每项服务的 TLS 证书,
  2. 让 Pod 信任这些 TLS 证书(或者更确切地说,签名 CA),并且
  3. 证书有效期结束后进行轮换。

我已经学到的东西:

  • 这个 StackOverflow 答案表明这会增加很多复杂性并且不鼓励走这条路。尽管如此,我想知道这样的设置将包含哪些内容。
  • 诸如 LettuceEncrypt 之类的项目允许自动执行上面的大部分步骤 1 和 3。您只需要一个实现 ACME 协议的 CA。
  • Kubernetes 文档(“在集群中管理 TLS”) 提到了 Kubernetes API,它使用 “类似于 ACME 草案的协议” 来管理 CSR。
  • 但是,在文档中,他们手动完成所有工作(设置本地 CA、手动发布 CSR、使用本地 CA 手动签署 CSR,全部通过 cfssl 工具),我想知道为什么我实际上想要使用这些 API。除了将 CSR 存储为 Kubernetes 资源之外,它们还为我做什么?
  • 文档还提到 Kubernetes 集群已经包含一个根 CA,可以使用它来为 Pod 颁发 TLS 证书,但没有解释
  • 如何 这样做:“可以将集群配置为为此目的使用集群根 CA,但您永远不应该依赖于此。
  • 上面的引用似乎建议并警告不要同时使用集群根 CA。为什么会出现警告,如果我们可以使用现有的 CA,事情不是会简化很多吗?
在我看来,这可能非常简单:只需使用

LettuceEncrypt 设置 Kestrel,根据集群根 CA 配置它,并让所有 Pod 信任该 CA(通过将相应的证书导入为可信根)。

有这么简单吗?或者我错过了什么?

2022-07-26更新:请注意,我需要支持Windows容器。

kubernetes https azure-aks
2个回答
2
投票
为此目的,您应该使用

mTLS。要使用 AKS 集群存档此内容,您可以轻松激活 Open Service Mesh Add-On。启用 OSM 后,您现在可以加密集群中部署的服务端点之间的通信。最酷的事情是 OSM 附加组件与 Azure Monitor 集成。

这里使用 ingress-nginx 执行 mTLS 的示例:

为了代理与 HTTPS 后端的连接,我们将配置 Ingress 和 IngressBackend 配置以使用 https 作为后端 协议,并让 OSM 颁发 Nginx 将用作的证书 用于将 HTTPS 连接代理到 TLS 后端的客户端证书。这 客户端证书和CA证书将存储在Kubernetes中 Nginx 将用于验证服务网格后端的秘密。


0
投票
这其实是k8s的一个话题。关于此的文档非常罕见。

阅读

https://cert-manager.io/docs/usage/https://cert-manager.io/docs/usage/csi/

我相信这就是我们所需要的。

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