нет совпадений для вида "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.

Другие вопросы по тегам