【云原生 | Kubernetes 系列】K8s 实战 实施Pod 容器标准的两种方式


前言

在这里插入图片描述

上一节学习了 PodSecurity ,本篇文章功能,首先要确保PodSecurity 特性已经被启用。

1、特权(privileged)、 基线(baseline)和 受限(restricted) 这三种策略涵盖了广泛安全范围,并由 Pod 安全 准入控制器实现。

2、在 v1.22 版本中,Kubernetes 提供一种内置的准入控制器 用来强制实施 Pod 安全标准。 你可以配置此准入控制器来设置集群范围的默认值和豁免选项。


一、通过名字空间标签来要求实施 baseline Pod 容器标准

下面的清单定义了一个 my-baseline-namespace 名字空间,其中

  • 阻止任何不满足 baseline 策略要求的 Pods
  • 针对任何无法满足 restricted 策略要求的、已创建的 Pod 为用户生成警- 告信息, 并添加审计注解;
  • baselinerestricted 策略的版本锁定到 v1.24。
apiVersion: v1
kind: Namespace
metadata:
  name: my-baseline-namespace
  labels:
    pod-security.kubernetes.io/enforce: baseline
    pod-security.kubernetes.io/enforce-version: v1.24

    # 我们将这些标签设置为我们所 _期望_ 的 `enforce` 级别
    pod-security.kubernetes.io/audit: restricted
    pod-security.kubernetes.io/audit-version: v1.24
    pod-security.kubernetes.io/warn: restricted
    pod-security.kubernetes.io/warn-version: v1.24

1.1、使用 kubectl label 为现有名字空间添加标签

在刚开始为名字空间评估安全性策略变更时,使用 --dry-run 标志是很有用的。 Pod 安全性标准会在 dry run(试运行) 模式下运行,在这种模式下会生成新策略如何处理现有 Pod 的信息, 但不会真正更新策略。

$ kubectl label --dry-run=server --overwrite ns --all
pod-security.kubernetes.io/enforce=baseline

1.2、应用到所有名字空间

如果你是刚刚开始使用 Pod 安全性标准,一种比较合适的初始步骤是针对所有名字空间为类似 baseline 这种比较严格的安全级别配置审计注解。

$ kubectl label --overwrite ns --all \
pod-security.kubernetes.io/audit=baseline \
pod-security.kubernetes.io/warn=baseline

扫描二维码关注公众号,回复: 14452018 查看本文章

注意,这里没有设置 enforce 级别,因而没有被显式评估的名字空间可以被识别出来。 你可以使用下面的命令列举那些没有显式设置 enforce 级别的名字空间:

$ kubectl get namespaces --selector=‘!pod-security.kubernetes.io/enforce’

1.3、应用到单个名字空间

你也可以更新特定的名字空间。下面的命令将 enforce=restricted 策略应用到 my-existing-namespace 名字空间,将 restricted 策略的版本锁定到 v1.24。

$ kubectl label --overwrite ns my-existing-namespace
pod-security.kubernetes.io/enforce=restricted
pod-security.kubernetes.io/enforce-version=v1.24

二、通过配置内置准入控制器实施 Pod 安全标准

目前配置准入控制器,主要分为两个版本,一个是v1.23+ 版本的v1beta1,一个是 v1.22 版本的v1alpha1配置方式,下面我们来看一下这两种配置方式:

  1. v1.23+ 版本的v1beta1:
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
  configuration:
    apiVersion: pod-security.admission.config.k8s.io/v1beta1
    kind: PodSecurityConfiguration
    # 当未设置 mode 标签时会应用的默认设置
    #
    # level 标签必须是以下取值之一:
    # - "privileged" (默认)
    # - "baseline"
    # - "restricted"
    #
    # version 标签必须是如下取值之一:
    # - "latest" (默认) 
    # - 诸如 "v1.24" 这类版本号
    defaults:
      enforce: "privileged"
      enforce-version: "latest"
      audit: "privileged"
      audit-version: "latest"
      warn: "privileged"
      warn-version: "latest"
    exemptions:
      # 要豁免的已认证用户名列表
      usernames: []
      # 要豁免的运行时类名称列表
      runtimeClasses: []
      # 要豁免的名字空间列表
      namespaces: []
  1. v1.22 版本的v1alpha1配置:
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
  configuration:
    apiVersion: pod-security.admission.config.k8s.io/v1alpha1
    kind: PodSecurityConfiguration
    # 当未设置 mode 标签时会应用的默认设置
    #
    # level 标签必须是以下取值之一:
    # - "privileged" (默认)
    # - "baseline"
    # - "restricted"
    #
    # version 标签必须是如下取值之一:
    # - "latest" (默认) 
    # - 诸如 "v1.24" 这类版本号
    defaults:
      enforce: "privileged"
      enforce-version: "latest"
      audit: "privileged"
      audit-version: "latest"
      warn: "privileged"
      warn-version: "latest"
    exemptions:
      # 要豁免的已认证用户名列表
      usernames: []
      # 要豁免的运行时类名称列表
      runtimeClasses: []
      # 要豁免的名字空间列表
      namespaces: []

两种配置的方式,区别并不大,一个bate版本,一个alpha版本。

总结

本篇文章主要讲解了实施Pod 容器标准的两种方式,写到这里,对于配置pod 和容器的相关功能点,已经全部写完了,从下一篇文章开始,我们将一起学习如何管理 Kubernetes 对象,相关的知识模块。

猜你喜欢

转载自blog.csdn.net/u010755471/article/details/126221717