CentOS 安全加固的 Kubernetes 安装攻略
一 环境规划与最低要求
- 节点与网络
- 至少准备3 台服务器:建议1 个 Master + 2 个 Node;每台至少2 核 CPU、2GB 内存、30GB 磁盘,并保证节点间互通(公网或专线均可)。
- 规划固定 IP 与主机名,并在所有节点配置**/etc/hosts**解析,避免 DNS 单点依赖。
- 时间同步:安装并启用 NTP/chrony,保证集群证书与审计日志时间一致性。
- 软件与版本
- 操作系统建议 CentOS 7/8(或兼容的 RHEL 系发行版),内核与容器运行时保持更新。
- 容器运行时建议 Docker CE/Containerd;Kubernetes 组件使用 kubeadm/kubelet/kubectl 同一小版本。
二 系统加固与前置配置
- 安全基线
- 关闭 Swap:swapoff -a 并注释 /etc/fstab 中的 swap 行(Kubelet 要求)。
- SELinux:生产建议保持 enforcing,按需配置 container_t 等策略;若无法立即适配,可先 setenforce 0 并将 /etc/selinux/config 设为 permissive,后续再回归 enforcing。
- 防火墙:不建议直接关闭。生产应启用 firewalld/iptables 并仅放行必要端口(如 6443/10250/10251/10252/2379-2380 等,按组件与网络插件规划)。
- 内核与网络
- 启用桥接与转发(/etc/sysctl.d/k8s.conf):
- net.bridge.bridge-nf-call-iptables = 1
- net.bridge.bridge-nf-call-ip6tables = 1
- net.ipv4.ip_forward = 1
- 应用 sysctl 配置并持久化:sysctl --system。
- 容器运行时与 kubelet
- 安装并启动 Docker/Containerd;启用 kubelet 开机自启(暂不启动,待 kubeadm 初始化后再启动)。
三 安装 Kubernetes 组件与初始化集群
- 配置仓库与安装
- 配置 Kubernetes YUM 源(可用国内镜像加速),安装 kubelet/kubeadm/kubectl 并启用 kubelet。
- 初始化控制平面
- 使用 kubeadm 初始化(示例):
- kubeadm init --apiserver-advertise-address=<MASTER_IP> --pod-network-cidr=<POD_CIDR> --service-cidr=<SERVICE_CIDR>
- 常见取值:POD_CIDR=10.244.0.0/16(Flannel/Calico 常用),SERVICE_CIDR=10.96.0.0/12。
- 配置 kubectl
- mkdir -p $HOME/.kube
- cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
- chown $(id -u):$(id -g) $HOME/.kube/config
- 安装 CNI 网络插件
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico:kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
- 加入工作节点
- 在 Master 上获取加入命令:kubeadm token create --print-join-command
- 在 Node 上执行输出的 kubeadm join 命令。
四 安全加固清单与控制面配置
- 传输与认证
- 全链路启用 TLS:API Server、kubelet、etcd、Scheduler、Controller-Manager 组件间通信均使用证书;对外 API 仅开放 6443 并强制 HTTPS。
- 选择并启用 API 认证(如 X.509、ServiceAccount、或对接 OIDC/LDAP);所有客户端(含节点、插件)必须认证。
- 启用 RBAC 最小权限授权;结合 NodeRestriction 准入插件限制节点对 API 的访问范围。
- 控制面安全参数
- kube-apiserver:启用 authentication/authorization/admission 链路;对外仅暴露 6443;审计日志按需开启。
- kube-scheduler:设置 –profiling=false、–address=127.0.0.1,减少攻击面。
- kube-controller-manager:设置 –profiling=false、–address=127.0.0.1、–use-service-account-credentials=true、–terminated-pod-gc-threshold 合理值;启用 RotateKubeletServerCertificate=true(配合 Kubelet 证书轮换)。
- etcd:启用 TLS 与 客户端证书认证;限制访问来源;高可用部署并定期备份。
- 镜像与准入控制
- 使用 私有镜像仓库与镜像签名;通过 ImagePolicyWebhook 或准入控制器拦截未授权/未扫描镜像。
- 网络与运行时
- 部署支持 NetworkPolicy 的 CNI(如 Calico/Cilium),对命名空间设置 default-deny-all,再按需放行白名单流量,实现最小连通性。
五 验证与持续运维
- 基础验证
- 检查节点与组件状态:kubectl get nodes、kubectl get pods -A;确认 kubelet 与容器运行时健康。
- 验证网络连通:跨节点 Pod-to-Pod 通信、DNS 解析、外部访问策略生效。
- 持续安全运维
- 镜像安全:在 CI 中集成漏洞扫描与准入控制,只允许已授权镜像进入生产。
- 配置合规:定期审计 RBAC、准入、网络策略、Secrets 管理;启用 审计日志与集中告警。
- 补丁与升级:保持 操作系统、容器运行时、Kubernetes 组件及时更新;采用滚动升级降低风险。