通过启用 pod 安全政策,您可以确保遭到入侵的命名空间(istio-system
除外)不会影响共用相同节点的其他命名空间的安全性。可与 Mesh CA 一起使用的 PodSecurityPolicy
资源文件随 Anthos Service Mesh 一起提供。您可以根据需要修改这些文件。在以下示例中,您首先应用 pod 安全政策,然后为 GKE 集群启用 pod 安全政策。
启用 Pod 安全政策
检查您的系统是否已定义了 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"
应用 pod 安全政策来保护 Secret Discovery Service (SDS):
kubectl apply -f "samples/security/psp/citadel-agent-psp.yaml"
这可为 Citadel 代理(也称为节点代理)提供在主机虚拟机上创建 UDS 路径
/var/run/sds
的权限。运行以下命令以启用 pod 安全政策:
gcloud beta container clusters update ${CLUSTER_NAME} \ --enable-pod-security-policy
启用 pod 安全政策可能需要几分钟时间。在此过程中,现有工作负载将无法连接到 Kubernetes 主实例。等待 Kubernetes 主实例再次启动。您可以在 Google Cloud Console 的 Kubernetes 集群页面上查看集群状态。
如需了解详情,请参阅使用 pod 安全政策。
验证 pod 安全政策
如果您有现有工作负载,我们建议您验证工作负载是否可以使用新的 pod 安全政策进行部署。
选择要检查并增加其副本的部署。例如,如果指定的服务有 1 个副本,则将它增加 1:
kubectl scale deployment YOUR_DEPLOYMENT --replicas=2 -n YOUR_NAMESPACE
验证部署是否已纵向扩容:
kubectl get deploy
验证新工作负载是否可以部署。这意味着 pod 安全政策不会影响服务的工作负载部署。
kubectl get deployment YOUR_SERVICE -n YOUR_NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE YOUR_SERVICE 2/2 2 2 ...
缩小服务的副本:
kubectl scale deployment YOUR_SERVICE --replicas=1 -n YOUR_NAMESPACE
如果您的工作负载未成功部署,您可以在修复 YAML 文件时暂时停用 pod 安全政策:
gcloud beta container clusters update ${CLUSTER_NAME} \ --no-enable-pod-security-policy