更新时间:2022-05-10 GMT+08:00
分享

容器安全配置

控制Pod调度范围

通过nodeSelector或者nodeAffinity限定应用所能调度的节点范围,防止单个应用异常威胁到整个集群。参考节点亲和性

容器安全配置建议

  • 通过设置容器的计算资源限制(request和limit),避免容器占用大量资源影响宿主机和同节点其他容器的稳定性
  • 如非必须,不建议将宿主机的敏感目录挂载到容器中,如/、/boot、/dev、/etc、/lib、/proc、/sys、/usr等目录
  • 如非必须,不建议在容器中运行sshd进程
  • 如非必须,不建议容器与宿主机共享网络命名空间
  • 如非必须,不建议容器与宿主机共享进程命名空间
  • 如非必须,不建议容器与宿主机共享IPC命名空间
  • 如非必须,不建议容器与宿主机共享UTS命名空间
  • 如非必须,不建议将docker的sock文件挂载到任何容器中

容器的权限访问控制

使用容器应用时,遵循权限最小化原则,合理设置Deployment/Statefulset的securityContext:

  • 通过配置runAsUser,指定容器使用非root用户运行。
  • 通过配置privileged,在不需要特权的场景不建议使用特权容器。
  • 通过配置capabilities,使用capability精确控制容器的特权访问权限。
  • 通过配置allowPrivilegeEscalation, 在不需要容器进程提权的场景,建议关闭“允许特权逃逸”的配置。
  • 通过配置安全计算模式seccomp,限制容器的系统调用权限,具体配置方法可参考社区官方资料使用 Seccomp 限制容器的系统调用
  • 通过配置ReadOnlyRootFilesystem的配置,保护容器根文件系统。

限制业务容器访问管理面

在要求容器和kuberentes的管理节点网络隔离的场景时,可以通过添加iptables规则,限制容器到集群管理节点的流量。对于新建节点可以将步骤2和步骤3的操作加入创建节点时的“云服务高级设置”-“按照后执行脚本”中。对于已纳管节点,步骤如下:

  1. 登录到业务节点(即容器所在节点)并切换到root用户。
  2. 执行以下命令,添加临时规则。注意主机网段请根据节点实际的网络进行配置

    iptables -A FORWARD -i $(ip -o -4 a s |grep gw_ |awk '{print $2}') -d 主机网段如10.96.0.0/8 -j DROP

  3. 将规则持久化,添加到/etc/rc.local虚机启动脚本中,防止节点重启后规则丢失。适用vi命令编辑/etc/rc.local文件,追加步骤2中的命令。完成后保存退出。
  4. 获取Master节点IP。

    Kubernetes这个Service的Endpoint地址即为Master节点的IP。
    # kubectl describe svc kubernetes
    Name:              kubernetes
    Namespace:         default
    Labels:            component=apiserver
                       provider=kubernetes
    Annotations:       <none>
    Selector:          <none>
    Type:              ClusterIP
    IP:                10.247.0.1
    Port:              https  443/TCP
    TargetPort:        5444/TCP
    Endpoints:         192.168.0.107:5444
    Session Affinity:  None
    Events:            <none>

  5. 查询容器网段。

    在CCE的“集群管理”界面查看集群的容器网段。

  6. 以root用户登录CCE集群的每一个Node节点,执行以下命令:

    • VPC网络:

      iptables -I OUTPUT -s {container_cidr} -d {master_ip} -j REJECT

    • 容器隧道网络:

      iptables -I FORWARD -s {container_cidr} -d {master_ip} -j REJECT

    其中,{container_cidr}是集群的容器网络,如10.0.0.0/16,{master_ip}是Master节点的IP。

    为保证配置持久化,建议将该命令写入/etc/rc.local 启动脚本中。

分享:

    相关文档

    相关产品

关闭导读