美文网首页Kubernetes精选学习
【K8s 精选】隔离 Pod 的安全策略

【K8s 精选】隔离 Pod 的安全策略

作者: 熊本极客 | 来源:发表于2021-10-15 14:31 被阅读0次

    网络策略负责限制出流量Pod 安全策略负责 Pod 内限制系统的访问权限

    1 网络策略

    参考 Kubernetes 网络策略

    NetworkPolicy 的示例:
    ingress 入规则:允许以下 Pod 连接到 default 名字空间下的带有 role=db 标签的所有 Pod 的 6379 TCP 端口
    egress 出规则:允许名字空间 default 中所有自带标签 role=db 的 Pod 使用 TCP 协议 与 10.0.0.0/24 范围内的 IP 通信,只要目标端口介于 32000 和 32768 之间就可以。

    piVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: test-network-policy
      namespace: default
    spec:
      podSelector:
        matchLabels:
          role: db
      policyTypes:
      - Ingress
      - Egress
      ingress:
      - from:
        # IP 地址范围为 172.17.0.0–172.17.0.255 和 172.17.2.0–172.17.255.255 (即,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)
        - ipBlock:
            # CIDR 表示范围
            cidr: 172.17.0.0/16
            except:
            - 172.17.1.0/24
        # 带有 project=myproject 标签的所有名字空间中的 Pod
        - namespaceSelector:
            matchLabels:
              project: myproject
        # default 名字空间下带有 role=frontend 标签的所有 Pod
        - podSelector:
            matchLabels:
              role: frontend
        ports:
        - protocol: TCP
          port: 6379
      egress:
      - to:
        - ipBlock:
            cidr: 10.0.0.0/24
        ports:
        - protocol: TCP
          port: 32000
         endport: 32768
    

    默认拒绝所有出站流量

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: default-deny-egress
    spec:
      podSelector: {}
      policyTypes:
      - Egress
    

    2 Pod 安全策略

    Pod 安全性标准定义了三种不同的策略。

    Profile 作用
    Privileged 有目的地开放且完全无限制的策略。通常针对由特权较高、受信任的用户所管理的系统级或基础设施级负载
    Baseline 便于常见的容器化应用采用,同时禁止已知的特权提升。针对的是应用运维人员和非关键性应用的开发人员
    Restricted 旨在实施当前保护 Pod 的最佳实践。针对运维人员和安全性很重要的应用的开发人员,以及不太被信任的用户

    restricted 安全策略 模板如下:

    apiVersion: policy/v1beta1
    kind: PodSecurityPolicy
    metadata:
      name: restricted-security-policy
      annotations:
        seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
        apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
        seccomp.security.alpha.kubernetes.io/defaultProfileName:  'runtime/default'
        apparmor.security.beta.kubernetes.io/defaultProfileName:  'runtime/default'
    spec:
      privileged: false   # Don't allow privileged pods!
      # 不允许升级到 root 权限
      allowPrivilegeEscalation: false
      # 这与 allowPrivilegeEscalation 是多余的
      # 必须从容器中去除的权能字。 所给的权能字会从默认权能字集合中去除,并且一定不可以添加
      requiredDropCapabilities:
        - ALL
      # 允许的 volume 类型.
      volumes:
        - 'configMap'
        - 'emptyDir'
        - 'projected'
        - 'secret'
        - 'downwardAPI'
        # Assume that persistentVolumes set up by the cluster admin are safe to use.
        - 'persistentVolumeClaim'
      #  控制是否 Pod 可以使用节点的网络名字空间。 此类授权将允许 Pod 访问本地回路(loopback)设备、在本地主机(localhost) 上监听的服务、还可能用来监听同一节点上其他 Pod 的网络活动。
      hostNetwork: false
      # 控制 Pod 容器是否可共享宿主上的 IPC 名字空间
      hostIPC: false
      # 控制 Pod 中容器是否可以共享宿主上的进程 ID 空间
      hostPID: false
      runAsUser:
        # 允许在非 root 权限在运行 container
        rule: 'MustRunAsNonRoot'
      # 设置容器的 SELinux 上下文
      seLinux:
        rule: 'RunAsAny'
      # 控制容器可以添加的组 ID
      supplementalGroups:
        # 要求至少指定一个 range 值。 第一个 range 中的最小值用作默认值。 所有 range 值都被用来执行验证检查。
        rule: 'MustRunAs'
        ranges:
          # 禁止添加到 root 组
          - min: 1
            max: 65535
      # 控制应用到某些卷上的附加用户组
      fsGroup:
        rule: 'MustRunAs'
        ranges:
          # 禁止添加到 root 组
          - min: 1
            max: 65535
      # 以只读方式访问根文件系统
      readOnlyRootFilesystem: false
    

    相关文章

      网友评论

        本文标题:【K8s 精选】隔离 Pod 的安全策略

        本文链接:https://www.haomeiwen.com/subject/yttmoltx.html