启用 Pod 安全政策

通过启用 pod 安全政策,您可以确保遭到入侵的命名空间(istio-system 除外)不会影响共用相同节点的其他命名空间的安全性。可与 Mesh CA 一起使用的 PodSecurityPolicy 资源文件随 Anthos Service Mesh 一起提供。您可以根据需要修改这些文件。在以下示例中,您首先应用 pod 安全政策,然后为 GKE 集群启用 pod 安全政策

启用 Pod 安全政策

  1. 检查您的系统是否已定义了 pod 安全政策:

    kubectl get psp --all-namespaces
    
    • 如果该命令返回现有政策的列表,则表示您的系统已应用 pod 安全政策。我们建议您使用现有的 PodSecurityPolicy YAML 文件,以防您需要执行rollback。您需要将以下部分添加到每个现有 pod 安全政策的 spec 部分,但以 gce 开头的政策除外。

      allowedHostPaths:
        - pathPrefix: "/var/run/sds"
          readOnly: true
      allowedCapabilities:
        - NET_ADMIN
        - NET_RAW
      

      这些行允许从 /var/run/sds 主机路径读取数据,并允许自动 Sidecar 注入。

      您可以使用 kubectl 在 Kubernetes 中修改和应用 pod 安全政策:

      kubectl edit psp YOUR_EXISTING_POD_SECURITY_POLICY
      
    • 如果该命令返回 No resources found,则您尚未定义 pod 安全政策。您可能仍需要修改 samples/security/psp/all-pods-psp.yaml 文件,以确保它不会与现有工作负载发生冲突。如需了解详情,请参阅 Pod 安全政策指南。修改该文件后,应用它:

      kubectl apply -f "samples/security/psp/all-pods-psp.yaml"
      
  2. 应用 pod 安全政策来保护 Secret Discovery Service (SDS)

    kubectl apply -f "samples/security/psp/citadel-agent-psp.yaml"
    

    这可为 Citadel 代理(也称为节点代理)提供在主机虚拟机上创建 UDS 路径 /var/run/sds 的权限。

  3. 运行以下命令以启用 pod 安全政策:

    gcloud beta container clusters update ${CLUSTER_NAME} \
        --enable-pod-security-policy
    

    启用 pod 安全政策可能需要几分钟时间。在此过程中,现有工作负载将无法连接到 Kubernetes 主实例。等待 Kubernetes 主实例再次启动。您可以在 Google Cloud Console 的 Kubernetes 集群页面上查看集群状态。

    如需了解详情,请参阅使用 pod 安全政策

验证 pod 安全政策

如果您有现有工作负载,我们建议您验证工作负载是否可以使用新的 pod 安全政策进行部署。

  1. 选择要检查并增加其副本的部署。例如,如果指定的服务有 1 个副本,则将它增加 1:

    kubectl scale deployment YOUR_DEPLOYMENT --replicas=2 -n YOUR_NAMESPACE
    
  2. 验证部署是否已纵向扩容:

    kubectl get deploy
    
  3. 验证新工作负载是否可以部署。这意味着 pod 安全政策不会影响服务的工作负载部署。

    kubectl get deployment YOUR_SERVICE -n YOUR_NAMESPACE
    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    YOUR_SERVICE            2/2     2            2           ...
    
  4. 缩小服务的副本:

    kubectl scale deployment YOUR_SERVICE --replicas=1 -n YOUR_NAMESPACE
    
  5. 如果您的工作负载未成功部署,您可以在修复 YAML 文件时暂时停用 pod 安全政策:

    gcloud beta container clusters update ${CLUSTER_NAME} \
      --no-enable-pod-security-policy
    

后续步骤