限制条件模板允许您定义限制条件的工作原理,但可以将定义限制条件的细节委托给具有主题专业知识的个人或组。除了分离关注点之外,这还将限制条件的逻辑与其定义分离。
Anthos 政策控制器随附以下限制条件模板。您还可以在 Gatekeeper 代码库中浏览限制条件模板库。
anthos-service-mesh
AllowedServicePortName
要求服务端口名称具有指定列表中的前缀。
名称 | 类型 |
---|---|
prefixes | 数组 |
DestinationRuleTLSEnabled
禁止为 Istio DestinationRules 中的所有主机和主机子集停用 TLS。
DisallowedAuthzPrefix
要求 Istio AuthorizationPolicy
规则中的主账号和命名空间不包含指定列表中的前缀。
姓名 | 类型 |
---|---|
disallowedprefixes | 数组 |
PolicyStrictOnly
要求 Istio 身份验证政策使用 STRICT
双向 TLS 指定对等节点。
SourceNotAllAuthz
要求 Istio AuthorizationPolicy 规则将来源主体设置为“*”以外的内容。
etc
GCPStorageLocationConstraintV1
限制允许的 StorageBucket Config Connector 资源的 locations
。exemptions
列表中的存储分区名称例外。
姓名 | 类型 |
---|---|
豁免项 | 数组 |
位置 | 数组 |
K8sBlockProcessNamespaceSharing
通过将 shareProcessNamespace
设置为 true
来禁止 Pod 规范。这可避免 Pod 中的所有容器共享一个 PID 命名空间和访问彼此文件系统和内存这样的场景。
K8sDisallowedRoleBindingSubjects
禁止将主题与 disallowedSubjects
匹配的 RoleBinding 或 ClusterRoleBinding 传递为参数。
名称 | 类型 |
---|---|
disallowedSubjects | 数组 |
K8sEmptyDirHasSizeLimit
要求任何 emptyDir
卷都指定 sizeLimit
;您也可以视情况在限制条件中提供 maxSizeLimit
参数来指定许可的大小上限。
姓名 | 类型 |
---|---|
maxSizeLimit | 字符串 |
K8sLocalStorageRequireSafeToEvict
要求使用本地存储空间(emptyDir
或 hostPath
)的 Pod 必须具有 "cluster-autoscaler.kubernetes.io/safe-to-evict": "true"
注释。集群自动扩缩器不会删除没有此注释的 Pod。
K8sMemoryRequestEqualsLimit
通过要求所有容器请求的内存与内存限制完全一致来提升 Pod 稳定性,让 Pod 绝不会处于内存用量超出所请求数量的状态。需要内存时,Kubernetes 可能会终结处于该状态的 Pod。
K8sNoExternalServices
禁止创建将工作负载公开给外部 IP 的 Gateway、Ingress 和 Service 资源。
- Gateway:禁止使用
networking.istio.io
群组的所有资源。 - Ingress:禁止使用
extensions
或networking.k8s.io
群组的所有资源。 - Service:所有
LoadBalancer
类型资源必须具有Internal
注释;任何externalIPs
都必须属于internalCIDRs
参数指定的 CIDR。
名称 | 类型 |
---|---|
internalCIDRs | 数组 |
K8sRestrictLabels
禁止资源包含标签。异常可以通过组、种类、命名空间和名称指定。
姓名 | 类型 |
---|---|
exceptions | 数组 |
restrictedLabels | 数组 |
gatekeeper-general
K8sAllowedRepos
要求容器映像以指定列表中的代码库字符串开头。
姓名 | 类型 |
---|---|
repos | 数组 |
K8sBlockNodePort
禁止类型为 NodePort 的所有 Service。
K8sContainerLimits
要求容器设置内存和 CPU 限制,且不超过指定的最大值。
姓名 | 类型 |
---|---|
CPU | 字符串 |
memory | 字符串 |
K8sContainerRatios
设置容器资源限制与请求的最大比例。
姓名 | 类型 |
---|---|
比例 | 字符串 |
K8sHttpsOnly
要求 Ingress 资源仅为 HTTPS;应设置 TLS 配置,且 kubernetes.io/ingress.allow-http
注释为 false。
K8sImageDigests
要求容器映像包含摘要。
K8sRequiredLabels
要求所有资源均包含指定的标签,且其值与提供的正则表达式匹配。
姓名 | 类型 |
---|---|
标签 | 数组 |
消息 | 字符串 |
K8sRequiredProbes
要求 Pod 具有就绪和/或活跃探测。
姓名 | 类型 |
---|---|
probeTypes | 数组 |
探测 | 数组 |
K8sUniqueIngressHost
要求所有 Ingress 主机都具有唯一性。
K8sUniqueServiceSelector
要求服务在命名空间内具有唯一的选择器。
cis-k8s
K8sNoEnvVarSecrets
禁止 Secret 用作容器定义中的环境变量;相反,请在数据卷中使用装载的机密文件。
K8sPodsRequireSecurityContext
要求所有 Pod 和容器在 Pod 或容器级层定义 SecurityContext。
K8sProhibitRoleWildcardAccess
要求角色和 ClusterRoles 无法对通配符(“*”)值设置资源访问权限。
K8sRequireNamespaceNetworkPolicies
要求集群中定义的每个命名空间都具有一个 NetworkPolicy
K8sRestrictNamespaces
限制资源使用 restrictedNamespaces 参数下列出的命名空间。资源可以使用 labelSelector 绕过此限制。
姓名 | 类型 |
---|---|
restrictedNamespaces | 数组 |
K8sRestrictRoleBindings
限制 ClusterRoleBinding 和 RoleBinding 引用限制中指定的角色或 ClusterRole。异常可以在限制中作为 allowedSubject 列出。
姓名 | 类型 |
---|---|
allowedSubjects | 数组 |
restrictedRole | 对象 |
pod-security-policy
K8sPSPAllowPrivilegeEscalationContainer
对限制升级至 root 权限这一操作进行控制。
K8sPSPAllowedUsers
控制容器的用户 ID 和组 ID。
名称 | 类型 |
---|---|
fsGroup | 对象 |
runAsGroup | 对象 |
runAsUser | 对象 |
supplementalGroups | 对象 |
K8sPSPAppArmor
控制容器使用的 AppArmor 配置文件。
名称 | 类型 |
---|---|
allowedProfiles | 数组 |
K8sPSPCapabilities
控制 Linux 功能。
名称 | 类型 |
---|---|
allowedCapabilities | array |
requiredDropCapabilities | 数组 |
K8sPSPFSGroup
对分配拥有 Pod 卷的 FSGroup 这一操作进行控制。
姓名 | 类型 |
---|---|
ranges | 数组 |
规则 | 字符串 |
K8sPSPFlexVolumes
控制 Flexvolume 驱动程序的许可名单。
姓名 | 类型 |
---|---|
allowedFlexVolumes | 数组 |
K8sPSPForbiddenSysctls
控制容器使用的 sysctl
配置文件。
姓名 | 类型 |
---|---|
forbiddenSysctls | 数组 |
K8sPSPHostFilesystem
控制主机文件系统的使用情况。
名称 | 类型 |
---|---|
allowedHostPaths | 数组 |
K8sPSPHostNamespace
控制主机命名空间的使用情况。
K8sPSPHostNetworkingPorts
控制主机网络和端口的使用情况。
名称 | 类型 |
---|---|
hostNetwork | 布尔值 |
最大值 | 整数 |
分钟 | 整数 |
K8sPSPPrivilegedContainer
控制特权容器的运行情况。
K8sPSPProcMount
控制容器允许的 Proc 装载类型。
名称 | 类型 |
---|---|
procMount | 字符串 |
K8sPSPReadOnlyRootFilesystem
要求使用只读根文件系统。
K8sPSPSELinuxV2
控制容器的 SELinux 上下文。
名称 | 类型 |
---|---|
allowedSELinuxOptions | 数组 |
K8sPSPSeccomp
控制容器使用的 seccomp 配置文件。
名称 | 类型 |
---|---|
allowedProfiles | 数组 |
K8sPSPVolumeTypes
控制卷类型的使用情况。
名称 | 类型 |
---|---|
volumes | 数组 |
pod-security-policy-deprecated
K8sPSPSELinux
控制容器的 SELinux 上下文。
名称 | 类型 |
---|---|
allowedSELinuxOptions | 对象 |
后续步骤
- 详细了解政策控制器
- 安装政策控制器
- 了解如何使用限制条件代替 PodSecurityPolicy