限制网络暴露
Kubernetes 重要组件的网络暴露必须限制:其中 Kubelet API、Kubernetes Dashboard、ETCD 上述组件不要暴露到公网,内部暴露也尽量限制范围。API server 如果非要对外暴露一定是提供HTTPS证书认证的方式。
使用 RBAC
安全领域的坚守的准则之一:最小化权限开放。通过RBAC 开放最小化权限。因为在k8s中serviceaccount 会自动注入到 pod 中的,给予不必要的权限非常危险,尤其操作 Pod 的权限。
Secret
Secret 管理程序,商业的有如 Hashicorp Vault,开源的有 Sealed Secrets、Kamus 、Helm Secerts Plugin。原生sercet的base64 实在是太弱了。
Network Policy
Network Policy 作为在 Kubernetes 集群范围内控制应用网络访问范围的有效手段。但这个设置需要谨慎,否则很容易导致生产故障。
Security Context
Kubernetes 的 Security Context 定义 Pod 或 Container 的特权与访问控制设置。包括非root运行,开放各种capabilities等。比如,下面通过NET_ADMIN 开启容器配置网络的权限。
- apiVersion: v1
- kind: Pod
- metadata:
- name: security-context-demo-4
- spec:
- containers:
- - name: sec-ctx-4
- image: busybox
- securityContext:
- capabilities:
- add: ["NET_ADMIN"]
seccomp
过滤危险的系统调用。
安全容器
部分高危的应用可用采用kata等安全容器部署,减少容器逃逸带来的风险。