应用程序的通讯可以通过 mTLS 在 Linkerd 上得到防护
安全性是云原生应用程序的重中之重,虽然安全性是一个非常广泛的话题,但 Linkerd 依然可以发挥重要作用:其双向 TLS(mTLS)功能是为了在 Kubernetes 中实现零信任的安全方法。零信任安全是一种 IT 安全模型,要求试图访问专用网络上资源的每一个人和每一台设备(无论位于网络边界之内还是之外)都必须进行严格的身份验证。 什么是 mTLS 在云环境中越来越普遍的通信安全方法是零信任方法,虽然对零信任安全的全面处理超出了本节的范围,但核心目标是将应用程序的安全边界缩小到尽可能小的级别。例如,与其在数据中心周围设置防火墙,对进入的流量实施安全保护,留下"软内部"而不进一步验证,不如让数据中心的每个应用在自己的边界实施安全。这种零信任的方法自然适合云环境,因为云环境中的底层硬件和网络基础设施不在你的控制之下。 验证是特别重要的,虽然大多数人认为 TLS 的价值在于加密,但验证连接两边实体的身份也同样重要。毕竟只有在你能相信与你通信的另一方的实体是他们所说的人的情况下,加密才是有用的--来自不良行为者的加密信息仍然是来自不良行为者的信息。 在 Linkerd 中,通过 mTLS 验证的身份与 Kubernetes ServiceAccounts 相关联。这意味着 Linkerd 的 mTLS 身份系统使用与 Kubernetes 用于为集群上的工作负载建立身份和访问控制的完全相同的模式,而不是发明一个新框架。 在 Linkerd 2.8.1 和更早的版本中,Linkerd 只能为 HTTP 和 gRPC 流量添加 mTLS,即使如此,也无法针对某些类型的权限、主机或 Header 执行该操作,这些限制在 Linkerd 2.9 中已经被移除,它将 mTLS 添加到所有的 TCP 流量中,不管是什么协议。 客户端发起 TLS 的连接不能由 Linkerd 进行 mTLS。相反,Linkerd 会将把这些连接视为 TCP 流量。请注意,这也意味着 Linkerd 只能为这些连接提供 TCP 级别的指标。 接下来让我们来了解下 mTLS 是如何工作的,以及如何验证我们的连接是否确实具有 mTLS。 Linkerd 的 CA(Identity 服务)作为 Linkerd 控制平面的一部分部署到集群中。在该部署过程中,Linkerd CLI 将生成一个证书并将其存储在 Linkerd 命名空间中名为 linkerd-identity-token-XXXXX 的 Kubernetes Secret 中。 复制 $ kubectl get secret -n linkerd NAME TYPE DATA AGE linkerd-identity-issuer Opaque 2 11d linkerd-identity-token-nqhbk kubernetes.io/service-account-token 3 11d # ...... 通过查看 Secret 可以看到一个前缀为 linkerd-identity-token- 的 Secret 对象,我们可以将其导出来进行查看: $ kubectl get secret -n linkerd linkerd-identity-token-nqhbk -o yaml apiVersion: v1 data: ca.crt: <ca.crt> namespace: bGlua2VyZA== token: <token> kind: Secret metadata: annotations: kubernetes.io/service-account.name: linkerd-identity kubernetes.io/service-account.uid: cdc3d8fd-0e02-4b17-88ce-d2cc0a9e4907 name: linkerd-identity-token-nqhbk namespace: linkerd type: kubernetes.io/service-account-token 输出的数据部分中名为 ca.crt 的字段就是在 Linkerd 安装期间生成的 UTF-8 编码的根证书。此证书称为“信任之锚”,因为它是用作颁发给代理的所有证书的基础。 (编辑:银川站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |