Pod Security Admission

命名空间所强制执行的 Pod Security Admission (PSA) 配置文件决定了 mesh 工作负载的 pod 是否会被准入。

  • Baseline:所有 mesh 工作负载都会使用默认的控制平面配置获得准入。
  • Restricted:仅当 mesh 工作负载的 pod 携带 RuntimeDefault seccomp 配置文件时,该工作负载才会获得准入;控制平面默认不会添加此配置文件。否则 pod 会被拒绝,例如显示为 seccompProfile ... must be set to "RuntimeDefault" or "Localhost"

每种工作负载都需要单独配置:

工作负载配置
注入了 sidecar 的 Application podspec.values.global.proxy.seccompProfile 位于 Istio 资源上。请参阅注入的 sidecar
使用 Kubernetes Gateway API(istio gateway class)部署的网关spec.values.gatewayClasses.istio 位于 Istio 资源上。请参阅Gateway API 网关和 waypoint proxy
Waypoint proxy(istio-waypoint gateway class)spec.values.gatewayClasses.istio-waypoint 位于 Istio 资源上。请参阅Gateway API 网关和 waypoint proxy
通过网关注入安装的网关您自己的网关 DeploymentsecurityContext。请参阅通过注入安装网关

注入的 sidecar

只有同时满足以下两个条件,注入的 sidecar 才会被准入 Restricted 命名空间:

  • 已部署 IstioCNI 资源,因此控制平面会注入非特权的 istio-validation 容器,而不是特权的 istio-init 容器。这是安装 Alauda Service Mesh中所述的默认安装流程。

  • Istio 资源将 spec.values.global.proxy.seccompProfile.type 设置为 RuntimeDefault

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      values:
        global:
          proxy:
            seccompProfile:
              type: RuntimeDefault

    此设置仅适用于 istio-validationistio-proxy 容器。

NOTE

更改 Istio 资源的 spec.values 字段会更新注入模板,但正在运行的 pod 仍会保留创建时注入的 sidecar。请重启受影响的工作负载,使其获取新的 seccomp 配置文件。

Gateway API 网关和 waypoint proxy

控制平面使用自己的模板渲染通过 Kubernetes Gateway API 部署的网关和 waypoint proxy,这些模板不会读取 spec.values.global.proxy.seccompProfileIstio 资源也不会公开 spec.values.gateways;该字段会被静默丢弃。请使用 spec.values.gatewayClasses overlay 配置 seccomp 配置文件,控制平面会将其合并到生成的 Deployment 中。

在强制执行 Restricted 配置文件的命名空间中创建 Gateway 资源之前,先修补 Istio 资源。仅应用你所使用的 gateway class。

  • 对于使用 istio gateway class 的网关:

    kubectl patch istio default --type=merge -p '{"spec":{"values":{"gatewayClasses":{"istio":{"deployment":{"spec":{"template":{"spec":{"securityContext":{"seccompProfile":{"type":"RuntimeDefault"}}}}}}}}}}}'
  • 对于使用 istio-waypoint gateway class 的 waypoint proxy:

    kubectl patch istio default --type=merge -p '{"spec":{"values":{"gatewayClasses":{"istio-waypoint":{"deployment":{"spec":{"template":{"spec":{"securityContext":{"seccompProfile":{"type":"RuntimeDefault"}}}}}}}}}}}'

修补程序按键合并,因此可以应用两条命令并保留两个 overlay。

验证

运行以下命令,确认控制平面已为每个经过修补的 gateway class 生成 ConfigMap:

kubectl get configmap -n istio-system -l gateway.istio.io/defaults-for-class

示例输出

NAME                                        DATA   AGE
istio-default-gatewayclass-istio            1      10s
istio-default-gatewayclass-istio-waypoint   1      10s
WARNING

overlay 会应用于集群中该 class 的每个网关。现有网关会执行一次滚动发布,以获取 seccomp 配置文件。

参考