FIPS 140-2 启用
FIPS 140-2 是美国联邦政府的安全标 准,用于批准加密模块。本文解释了如何使用 FIPS 验证的加密库构建 RKE2。
使用 FIPS 兼容的 Go 编译器
你可以在此处找到所使用的 Go 编译器。系统的每个组件都是用这个编译器的版本来构建的,与其他情况下使用的标准 Go 编译器版本一致。
这个版本的 Go 用经过 FIPS 验证的 BoringCrypto 模块取代了标准 Go 加密库。有关详细信息,请参阅 GoBoring 的 readme。该模块最初由 NIST 验证为 Rancher Kubernetes 加密库,用于支持更广泛的系统。但是,由于 SP 800-56A Rev3 引入的更改,此验证现在已成为历史。目前正在进行此模块的重新验证,以使该模块恢复到活动的 FIPS 140-2 状态。
集群组件中的 FIPS 支持
RKE2 系统的大部分组件都是使用 GoBoring Go 编译器实现静态编译的。从组件的角度来看,RKE2 被分成了若干部分。下面的列表包含了这些部分和相关的组件。
-
Kubernetes
- API Server
- Controller Manager
- Scheduler
- Kubelet
- Kube Proxy
- Metric Server
- Kubectl
-
Helm Chart
- Flannel
- Calico
- CoreDNS
运行时
为了确保系统架构的各方面都使用符合 FIPS 140-2 标准的算法实现,RKE2 运行时包含了用符合 FIPS 标准的 Go 编译器静态编译的实用程序。这确保了从 Kubernetes 守护程序到容器协调机制的所有层面都是合规的。
- etcd
- containerd
- containerd-shim
- containerd-shim-runc-v1
- containerd-shim-runc-v2
- ctr
- crictl
- runc
CNI
从 v1.21.2 开始,RKE2 支持通过 --cni
标志选择不同的 CNI,并绑定了多个 CNI,包括 Canal(默认)、Calico、Cilium 和 Multus。其中,只有 Canal(默认)是为符合 FIPS 标准而重建的。
Ingress
RKE2 附带了 NGINX 作为其默认的 ingress provider。从 v1.21+ 开始,此组件符合 FIPS 标准。NGINX ingress 有两个主要的子组件:
- controller - 负责监控/更新 Kubernetes 资源并相应地配置 server
- server - 负责接收和路由流量
Controller 是用 Go 编写的,因此使用我们 FIPS 兼容的 Go 编译器进行编译。
server 是用 C 编写的,还需要 OpenSSL 才能正常运行。因此,它利用 FIPS 验证的 OpenSSL 版本来实现 FIPS 合规。