нет совпадений для вида "AdmissionConfiguration" в версии "apiserver.config.k8s.io/v1"
У меня есть AKS с kubernetes версии 1.23. Я хочу активировать podsecurity на уровне кластера, установив его через AdmissionConfiguration, как описано здесь:
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/ , добавив метку под nameapce, однако я хочу активировать его на уровне кластера. и это не работает.
4 ответа
Это связано с тем, что конфигурация администрирования не является файлом, который можно применять внутри кластера Kubernetes.
Это статический файл, который необходимо передать API-серверу.
Если ваш кластер Kubernetes управляется облачным сервисом и у вас нет прямого доступа к API-серверу, вы можете использовать в своем кластере веб-хук доступа к безопасности пода .
Он очень прост в установке и работает очень хорошо.
Таким образом, вы сможете редактировать карту конфигурации, содержащую общую конфигурацию кластера.
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, используйте это в строке 6 вашего файла конфигурации yaml в разделеapiVersion
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' \
@Doctor Да, такое же решение, как написано ниже.
Этот файл не "обычный" CRD, а конфигурационный файл для K8s API-Server.
все,
если вы не контролируете или не можете изменить конфигурацию API-сервера, второй вариант — использование механизма политик (OPA-Gatekeeper или kyverno).
Kyverno имеет существующую политику для этого https://kyverno.io/policies/psa/add-psa-labels/add-psa-labels/ и несколько дополнительных https://kyverno.io/policies/?policytypes=Pod%2520Security%2520Допуск
Он должен быть представлен в виде файла и передан флагом --admission-control-config-file.