我有kubernetes 1.23版本的AKS。我想通过AdmissionConfiguration在集群级别激活podsecurity,如下所示:
https://kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-admission-controller/
正如我所读到的,"PodSecurity功能网关";默认情况下在kubernetes 1.23版本上启用。我已经根据链接上显示的配置创建了一个yaml文件,但是当我应用它时,我得到以下错误:
$ k create -f podsecurity.yaml
error: unable to recognize "podsecurity.yaml": no matches for kind "AdmissionConfiguration" in version "apiserver.config.k8s.io/v1"
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5",
GitCommit:"c285e781331a3785a7f436042c65c5641ce8a9e9", GitTreeState:"clean", BuildDate:"2022-03-16T15:58:47Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5",
GitCommit:"8211ae4d6757c3fedc53cd740d163ef65287276a", GitTreeState:"clean", BuildDate:"2022-03-31T20:28:03Z", GoVersion:"go1.17.8", Compiler:"gc", Platform:"linux/amd64"}
我在谷歌上搜索了很多,但找不到解决办法,也找不到原因。
如果有人能帮助我,我将不胜感激。
我可以在命名空间级别激活它,就像下面解释的那样:https://kubernetes.io/docs/tutorials/security/ns-level-pss/通过在命名空间下添加标签,但是我想在集群级别激活它,它不起作用。
这是因为管理配置不是应用于Kubernetes集群内部的文件。
这是一个静态
如果你的Kubernetes集群是由cloudder管理的,你不能直接访问api-server,你可以在你的集群中使用pod安全准入webhook。
安装简单,运行良好。
这样你就可以编辑一个包含集群范围配置的configmap。
apiVersion: v1
kind: ConfigMap
metadata:
name: pod-security-webhook
namespace: pod-security-webhook
data:
podsecurityconfiguration.yaml: |
apiVersion: pod-security.admission.config.k8s.io/v1beta1
kind: PodSecurityConfiguration
defaults:
enforce: "restricted"
enforce-version: "latest"
audit: "restricted"
audit-version: "latest"
warn: "restricted"
warn-version: "latest"
exemptions:
# Array of authenticated usernames to exempt.
usernames: []
# Array of runtime class names to exempt.
runtimeClasses: []
# Array of namespaces to exempt.
namespaces: ["kube-system","policy-test1"]
有关更多信息,我发现EKS文档非常有用:https://aws.github.io/aws-eks-best-practices/security/docs/pods/
您还应该注意,名称空间标签将优先于集群范围的配置。
从您所共享的链接。Note: pod-security.admission.config.k8s.io/v1 configuration requires v1.25+. For v1.23 and v1.24, use v1beta1. For v1.22, use v1alpha1.
重定向到此https://v1-24.docs.kubernetes.io/docs/tasks/configure-pod-container/enforce-standards-admission-controller/
页末有一个小注释。因为您使用的是1.23,所以在您的yaml配置文件apiVersion
下的第6行pod-security.admission.config.k8s.io/v1beta1
中使用它。另外,您可能需要运行kube-apiserver --admission-control-config-file=/some/path/pod-security.yaml
。
在Rancher k3s上,当您启动集群时,在k3s服务文件下传递相同的标志。对我来说,位置是/etc/systemd/system/k3s.service
;像
ExecStart=/usr/local/bin/k3s
server
'--cluster-cidr'
'172.16.16.0/20'
'--service-cidr'
'172.16.0.0/20'
'--kube-apiserver-arg=enable-admission-plugins=NodeRestriction,NamespaceLifecycle,PodSecurity,ServiceAccount'
'--kube-apiserver-arg=admission-control-config-file=/home/ubuntu/pod-security.yaml'
它应该以文件的形式呈现,并由——admit -control-config-file标志提供。
@医生是的,同样的解决方案,就像下面写的。
这个文件不是"平常"CRD,但是K8s API-Server的配置文件。
@all,
如果您无法控制或无法更改API-server的配置,第二个选择是使用策略引擎(OPA-Gatekeeper或kyverno)。
Kyverno对此有现有策略https://kyverno.io/policies/psa/add-psa-labels/add-psa-labels/和几个互补https://kyverno.io/policies/?policytypes=Pod%2520Security%2520Admission