【K8s 精選】隔離 Pod 的安全策略

網(wǎng)絡(luò)策略負(fù)責(zé)限制出流量,Pod 安全策略負(fù)責(zé) Pod 內(nèi)限制系統(tǒng)的訪問權(quán)限

1 網(wǎng)絡(luò)策略

參考 Kubernetes 網(wǎng)絡(luò)策略

NetworkPolicy 的示例:
ingress 入規(guī)則:允許以下 Pod 連接到 default 名字空間下的帶有 role=db 標(biāo)簽的所有 Pod 的 6379 TCP 端口
egress 出規(guī)則:允許名字空間 default 中所有自帶標(biāo)簽 role=db 的 Pod 使用 TCP 協(xié)議 與 10.0.0.0/24 范圍內(nèi)的 IP 通信,只要目標(biāo)端口介于 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 標(biāo)簽的所有名字空間中的 Pod
    - namespaceSelector:
        matchLabels:
          project: myproject
    # default 名字空間下帶有 role=frontend 標(biāo)簽的所有 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

默認(rèn)拒絕所有出站流量

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

2 Pod 安全策略

Pod 安全性標(biāo)準(zhǔn)定義了三種不同的策略。

Profile 作用
Privileged 有目的地開放且完全無限制的策略。通常針對由特權(quán)較高、受信任的用戶所管理的系統(tǒng)級或基礎(chǔ)設(shè)施級負(fù)載
Baseline 便于常見的容器化應(yīng)用采用,同時禁止已知的特權(quán)提升。針對的是應(yīng)用運維人員和非關(guān)鍵性應(yīng)用的開發(fā)人員
Restricted 旨在實施當(dāng)前保護(hù) Pod 的最佳實踐。針對運維人員和安全性很重要的應(yīng)用的開發(fā)人員,以及不太被信任的用戶

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 權(quán)限
  allowPrivilegeEscalation: false
  # 這與 allowPrivilegeEscalation 是多余的
  # 必須從容器中去除的權(quán)能字。 所給的權(quán)能字會從默認(rèn)權(quán)能字集合中去除,并且一定不可以添加
  requiredDropCapabilities:
    - ALL
  # 允許的 volume 類型.
  volumes:
    - 'configMap'
    - 'emptyDir'
    - 'projected'
    - 'secret'
    - 'downwardAPI'
    # Assume that persistentVolumes set up by the cluster admin are safe to use.
    - 'persistentVolumeClaim'
  #  控制是否 Pod 可以使用節(jié)點的網(wǎng)絡(luò)名字空間。 此類授權(quán)將允許 Pod 訪問本地回路(loopback)設(shè)備、在本地主機(jī)(localhost) 上監(jiān)聽的服務(wù)、還可能用來監(jiān)聽同一節(jié)點上其他 Pod 的網(wǎng)絡(luò)活動。
  hostNetwork: false
  # 控制 Pod 容器是否可共享宿主上的 IPC 名字空間
  hostIPC: false
  # 控制 Pod 中容器是否可以共享宿主上的進(jìn)程 ID 空間
  hostPID: false
  runAsUser:
    # 允許在非 root 權(quán)限在運行 container
    rule: 'MustRunAsNonRoot'
  # 設(shè)置容器的 SELinux 上下文
  seLinux:
    rule: 'RunAsAny'
  # 控制容器可以添加的組 ID
  supplementalGroups:
    # 要求至少指定一個 range 值。 第一個 range 中的最小值用作默認(rèn)值。 所有 range 值都被用來執(zhí)行驗證檢查。
    rule: 'MustRunAs'
    ranges:
      # 禁止添加到 root 組
      - min: 1
        max: 65535
  # 控制應(yīng)用到某些卷上的附加用戶組
  fsGroup:
    rule: 'MustRunAs'
    ranges:
      # 禁止添加到 root 組
      - min: 1
        max: 65535
  # 以只讀方式訪問根文件系統(tǒng)
  readOnlyRootFilesystem: false
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容