【问题标题】:mTLS setup using self-signed cert in Kubernetes and NGINX在 Kubernetes 和 NGINX 中使用自签名证书设置 mTLS
【发布时间】:2020-11-11 12:01:15
【问题描述】:

我有一个托管 REST 回显服务的 Kubernetes 集群 (AKS)。该服务通过 HTTP 运行良好。我正在使用 NGINX 入口来路由流量。我现在想通过 HTTPS 和 mTLS 设置此服务,因此强制客户端指定一个证书以便能够与 echo 服务进行通信。这是 POC,所以我使用的是自签名证书。

我需要设置哪些 Kubernetes 组件才能实现这一目标?我阅读了 NGINX 文档,但无法理解是否需要在 Kubernetes 集群中创建证书颁发机构/证书管理器并使用它来配置入口服务以执行 mTLS 步骤。我可以在入口处终止 SSL(在执行 mTLS 之后)并允许从入口到 echo-service 的不安全通道。

我希望有这种设置经验的人可以提供一些指导。

谢谢!

【问题讨论】:

    标签: ssl nginx kubernetes nginx-ingress mtls


    【解决方案1】:

    首先,mTLS 和 TLS/SSL 终止并不完全相同。 mTLS 是mutual authentication ? 表示客户端对服务器进行身份验证,服务器对客户端进行身份验证。

    通常,SSL 终止负责服务器对客户端的身份验证,但它需要客户端支持服务器才能对客户端进行身份验证。

    另外,Certificate Authority 和我相信您所指的 certificate manager 是两个不同的东西。

    对于 Kubernetes,您可以使用 ingress controller like Nginx 设置 TLS/SSL termination on an Ingress。你可以totally use a self-signed certificate with your own Certificate Authority with this。唯一的问题是除非将 CA(证书颁发机构)添加为受信任的实体,否则您的请求将不会被验证,而是您的客户端/浏览器。

    现在,对于 mTLS,您不必关心是否使用完全相同的 CA、Cert 和 Key 来进行两种身份验证。但是,您必须强制您的入口对客户端进行身份验证,并且使用 Nginx 入口控制器,您可以使用以下注释来做到这一点:

    nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
    nginx.ingress.kubernetes.io/auth-tls-secret: "default/mycerts"
    

    您可以在 K8s 中使用以下内容创建上述秘密:

    kubectl create secret generic mycerts --from-file=tls.crt=server.crt --from-file=tls.key=server.key --from-file=ca.crt=ca.crt
    

    blog 中有更多详细信息。

    注意:IstioLinkerdConsul 等服务网格在您的服务之间支持 mTLS。

    ✌️

    【讨论】:

    • 感谢您的信息。我会继续挖掘。
    • 能否请您帮助我在不使用其他域的情况下测试 AWS NLB 中的入口。
    • 如果您在设置证书时需要帮助,我在这里写了一份指南:thoughts-about-code.blogspot.com/2021/12/…
    猜你喜欢
    • 2021-04-07
    • 1970-01-01
    • 2011-02-06
    • 2011-04-26
    • 2020-06-16
    • 2021-12-13
    • 1970-01-01
    • 2021-12-03
    • 2020-05-17
    相关资源
    最近更新 更多