温馨提示×

k8s安全策略在centos上如何实施

小樊
69
2025-10-05 06:34:09
栏目: 智能运维

Kubernetes安全策略在CentOS上的实施指南

一、系统基础安全加固

  1. 节点系统配置

    • 关闭不必要的服务(如FTP、邮件服务器),使用systemctl disable <service-name>禁用;配置firewalldiptables限制仅开放Kubernetes必要端口(如API Server的6443、kubelet的10250/10255)。
    • 禁用SELinux(临时命令:setenforce 0;永久生效:修改/etc/selinux/configSELINUX=disabled);关闭Swap分区(swapoff -a并注释/etc/fstab中的Swap条目)。
    • 同步系统时间:安装chrony并配置NTP服务器(如server ntp.aliyun.com iburst),运行chronyc sources验证同步状态。
  2. 用户与权限管理

    • 强制使用强密码:修改/etc/login.defs设置密码复杂度(如PASS_MIN_LEN 12PASS_REQUIRE_MIXED_CASE yes);锁定默认多余账户(如usermod -L admusermod -L lp)。
    • 限制su命令:编辑/etc/pam.d/su,添加auth required pam_wheel.so use_uid,仅允许wheel组用户切换root。

二、Kubernetes集群安全配置

1. 认证与授权

  • API Server安全
    启用TLS双向认证:生成CA证书、Server证书和Client证书(使用openssl),将证书放入/etc/kubernetes/pki,修改/etc/kubernetes/manifests/kube-apiserver.yaml添加参数:

    spec:
      containers:
      - command:
        - kube-apiserver
        - --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
        - --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
        - --client-ca-file=/etc/kubernetes/pki/ca.crt
    

    重启kubelet使配置生效。

  • RBAC权限控制
    遵循最小权限原则,创建命名空间、服务账户、角色及绑定:

    # 创建命名空间
    kubectl create namespace dev-ns
    
    # 创建服务账户
    kubectl create serviceaccount dev-sa -n dev-ns
    
    # 创建角色(限制仅能读取Pod)
    kubectl create role pod-reader --verb=get,list,watch --resource=pods -n dev-ns
    
    # 绑定角色到服务账户
    kubectl create rolebinding dev-rb --role=pod-reader --serviceaccount=dev-ns:dev-sa -n dev-ns
    

    避免使用cluster-admin角色给开发人员。

2. 网络隔离

  • NetworkPolicy配置
    使用Calico、Cilium等支持NetworkPolicy的网络插件,限制Pod间通信:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: frontend-database-policy
      namespace: dev-ns
    spec:
      podSelector:
        matchLabels:
          app: database
      policyTypes:
      - Ingress
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: frontend
        ports:
        - protocol: TCP
          port: 3306
    
    该策略仅允许带有app=frontend标签的Pod访问app=database的Pod的3306端口。

3. 容器运行时安全

  • 安全上下文(Security Context)
    在Pod或Container级别配置,限制容器权限:

    apiVersion: v1
    kind: Pod
    metadata:
      name: secure-pod
      namespace: dev-ns
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        securityContext:
          runAsNonRoot: true  # 禁止以root用户运行
          runAsUser: 1000     # 指定用户ID
          readOnlyRootFilesystem: true  # 只读根文件系统
          allowPrivilegeEscalation: false  # 禁止提权
    

    避免容器以root权限运行。

  • Pod安全标准(PSS)
    替代已废弃的Pod Security Policy(PSP),启用内置的BaselineRestricted策略(需集群支持):

    # 启用Restricted策略(需安装Kyverno或OPA/Gatekeeper)
    kubectl apply -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/release/install.yaml
    kubectl create -f - <<EOF
    apiVersion: kyverno.io/v1
    kind: ClusterPolicy
    metadata:
      name: enforce-restricted-psp
    spec:
      validationFailureAction: enforce
      background: true
      rules:
      - name: check-run-as-non-root
        match:
          resources:
            kinds:
            - Pod
        validate:
          message: "Containers must not run as root"
          pattern:
            spec:
              containers:
              - securityContext:
                  runAsNonRoot: true
    EOF
    

    该策略强制所有Pod以非root用户运行。

4. 镜像安全

  • 镜像来源与扫描
    使用私有镜像仓库(如Harbor),配置CI/CD流水线集成Trivy或Clair扫描镜像漏洞:

    # 使用Trivy扫描镜像
    trivy image --exit-code 1 --severity CRITICAL nginx:1.25
    

    若扫描到高危漏洞(如CVE-2023-1234),自动终止流水线并通知开发人员修复。

  • 镜像签名与验证
    使用Cosign对镜像签名,部署时验证签名有效性:

    # 签名镜像
    cosign sign --key cosign.key nginx:1.25
    
    # 验证签名
    cosign verify --key cosign.pub nginx:1.25
    

    在Kubernetes中配置imagePullSecretsPodSecurityPolicy(或PSS)强制验证签名。

5. 数据安全

  • etcd加密
    启用etcd静态加密保护Secret数据,修改/etc/kubernetes/manifests/etcd.yaml添加加密配置:

    spec:
      containers:
      - command:
        - etcd
        - --encryption-provider-config=/etc/kubernetes/pki/encryption-config.yaml
    

    创建encryption-config.yaml文件,指定加密算法(如AES-256-GCM)和密钥。

  • Secret管理
    避免硬编码Secret,使用Vault或CSI驱动动态注入:

    # 安装HashiCorp Vault并配置Kubernetes auth
    vault auth enable kubernetes
    vault write auth/kubernetes/role/dev-role \
      bound_service_account_names=dev-sa \
      bound_service_account_namespaces=dev-ns \
      policies=dev-secret-policy \
      ttl=1h
    
    # 使用Vault CSI驱动挂载Secret到Pod
    kubectl apply -f https://raw.githubusercontent.com/hashicorp/vault-helm/main/charts/vault/templates/csi-driver.yaml
    

    在Pod中声明Volume挂载Secret。

三、持续监控与审计

  1. 日志收集与分析
    部署EFK(Elasticsearch+Fluentd+Kibana)或Loki+Promtail+Grafana堆栈,收集节点、kubelet、API Server日志,设置告警规则(如频繁的登录失败)。

  2. 审计日志
    启用Kubernetes Audit Logging,记录所有API请求(如创建Pod、修改Deployment),修改/etc/kubernetes/audit-policy.yaml

apiVersion: audit.k8s.io/v1
kind: Policy
rules:
- level: Metadata
  resources:
  - group: ""
    resources: ["pods", "services", "deployments"]

将审计日志保存到/var/log/kubernetes/audit.log,定期分析异常行为。

  1. 实时入侵检测
    部署Falco监控容器和节点行为,检测异常操作(如容器逃逸、宿主机文件访问):
# 安装Falco
helm repo add falcosecurity https://falcosecurity.github.io/charts
helm install falco falcosecurity/falco --namespace falco --create-namespace

# 查看Falco告警
kubectl logs -f -n falco deploy/falco

Falco规则示例(检测容器内访问/etc/shadow):

- rule: Read sensitive file inside container
  desc: Detect container accessing sensitive files like /etc/shadow
  condition: >
    container and evt.type in (open, openat) and
    evt.dir=< and
    fd.name in ("/etc/shadow", "/etc/passwd")
  output: "Sensitive file accessed by container (user=%user.name command=%proc.cmdline file=%fd.name)"
  priority: WARNING

四、持续维护与更新

  1. 组件版本管理
    定期升级Kubernetes集群至最新稳定版本(使用kubeadm upgrade),升级前备份etcd数据(etcdctl snapshot save /tmp/etcd-snapshot.db)。

  2. 补丁管理
    使用yum update定期更新CentOS系统包(如kernelopenssl),使用kubeadm upgrade node更新Kubernetes组件(如kubeletkube-proxy)。

  3. 漏洞扫描
    使用kube-bench检查集群配置是否符合CIS Kubernetes Benchmark标准:

# 安装kube-bench
curl -L https://github.com/aquasecurity/kube-bench/releases/download/v0.6.13/kube-bench_0.6.13_linux_amd64.deb -o kube-bench.deb
sudo dpkg -i kube-bench.deb

# 运行扫描(针对master节点)
kube-bench --benchmark cis-1.25

根据扫描结果修复不安全配置(如未启用TLS、RBAC未配置)。

0