VK Cloud logo

Gatekeeper

Gatekeeper — бұл Rego тілінде шектеулерді (constraints) жасау мен олардың орындалуын бақылауды қамтамасыз ететін контроллер. Шектеулер жиынтығы CRD негізіндегі саясатты (CRD-based policy) қалыптастырады. Gatekeeper Kubernetes ресурстары үшін барлық CRD операцияларының (жасау, өзгерту, жою) берілген шектеулерге сәйкестігін тексереді және белгілі бір әрекетке тыйым салу немесе рұқсат беру туралы шешім қабылдайды.

Шектеулерді (саясаттар түрінде) қолдануға Open Policy Agent (OPA) жауап береді.

Gatekeeper жұмыс істеу қағидаты

Саясаттардың сақталуы шектеулер (constraints) арқылы бақыланады. Бұл шектеулер шектеу үлгілерінің (constraint templates) негізінде жасалады және мыналарды анықтайды:

  • Шектеудің қолданылу аясы: Kubernetes-тің қандай ресурстары шектеу үлгісінде берілген ережелерге сәйкестікке тексеріледі.
  • Ережелерге сәйкестікті тексеру кезінде қолданылатын параметрлер.

Өз кезегінде, шектеу үлгісі шектеуде берілген қолданылу аясы мен параметрлер кезінде онда сипатталған ережелердің сақталуын тексереді. Бұл ережелер Rego тілі арқылы шектеу үлгісінің YAML-файлында тікелей сипатталады. Сондай-ақ шектеуден берілген параметрлердің дұрыстығы тексеріледі.

Gatekeeper үшін ресурстардың құрылымы

Шектеу құрылымы

Шектеу мысалы:

apiVersion: constraints.gatekeeper.sh/v1beta1kind: <имя шаблона ограничений>metadata:  name: <имя ограничения>spec:  match:    <параметры, определяющие область действия ограничения>  parameters:    <параметры, участвующие в проверке правил из шаблона ограничений>  enforcementAction: <действие при обработке нарушения ограничения: deny | dryrun | warn>

Мұнда:

  • spec.match: жиынтығында шектеудің қолданылу аясын анықтайтын параметрлер тобы.

    • kinds: apiGroups және kinds өрістері бар объектілер тізімін қамтиды. Бұл объектілерде шектеу қолданылатын ресурстардың топтары мен түрлері келтіріледі. Егер бірнеше топ пен ресурс түрі көрсетілсе, ресурс шектеудің қолданылу аясына түсуі үшін бір ғана сәйкестік жеткілікті («логикалық НЕМЕСЕ» операциясы қолданылады).

    • scope: барлық ресурстар үшін бірден (әдепкі бойынша), кластер деңгейіндегі (cluster-scoped) немесе атаулар кеңістігі деңгейіндегі (namespace-scoped) ресурстар үшін сәйкестіктерді тексеру керек пе, соны анықтайды.

    • namespaces: атаулар кеңістіктерінің тізімі. Егер бұл параметр берілсе, онда шектеулер тек көрсетілген атаулар кеңістіктеріндегі ресурстарға қолданылады.

      Бұл параметр бірден бірнеше атаулар кеңістігін таңдау үшін префикс түрінде берілуі мүмкін. Мысалы, namespaces: [kube-*] параметрі kube-system және kube-public кеңістіктеріне сәйкес келеді.

    • excludedNamespaces: namespaces үшін ерекшелік болып табылатын атаулар кеңістіктерінің тізімі. Егер бұл параметр берілсе, онда шектеулер тек осы атаулар кеңістіктеріне жатпайтын ресурстарға қолданылады.

      Бұл параметр бірден бірнеше атаулар кеңістігін таңдау үшін префикс түрінде берілуі мүмкін. Мысалы, namespaces: [kube-*] параметрі kube-system және kube-public кеңістіктеріне сәйкес келеді.

    • labelSelector: matchLabels және matchExpressions деген екі міндетті емес өрістің комбинациясы. Бұл екі өріс ресурс метадеректеріне енгізілген белгі кілттері мен мәндері негізінде Kubernetes ресурстарын таңдаудың немесе алып тастаудың әртүрлі әдістерін ұсынады.

      Ресурс таңдалуы үшін ол мұнда берілген барлық талаптарға сай келуі керек (талаптарға «логикалық ЖӘНЕ» операциясы қолданылады).

    • namespaceSelector: ресурсты қамтитын атаулар кеңістігіне арналған немесе ресурс атаулар кеңістігі болса, сол ресурстың өзіне арналған белгі селекторы.

    • name: ресурс атауы. Егер бұл параметр берілсе, онда шектеулер тек көрсетілген атауы бар ресурстарға қолданылады.

      Бұл параметр бірден бірнеше ресурсты таңдау үшін префикс түрінде берілуі мүмкін. Мысалы, name: [pod-*] параметрі pod-a және pod-b ресурстарына сәйкес келеді.

  • spec.parameters: алдымен шектеу үлгісінде түрге сәйкестікке тексерілетін, содан кейін Rego тіліндегі ережелерге қойылатын параметрлер.

  • spec.enforcementAction: шектеуді бұзуды өңдеу кезіндегі әрекет. Мүмкін мәндер:

    • deny (әдепкі бойынша): Kubernetes ресурсын жасауға тыйым салу.
    • warn: Kubernetes ресурсын жасау және ескерту (warning) шығару. Бұл шектеулерді жөндеу кезінде пайдалы болуы мүмкін.
    • dryrun: Kubernetes ресурсын жасамау, шектеудің сынақ орындалуын (dry run) орындау. Бұл шектеулерді жөндеу кезінде пайдалы болуы мүмкін.

Шектеулер туралы толығырақ Gatekeeper құжаттамасында.

Шектеу үлгісінің құрылымы

Шектеу үлгісінің мысалы:

apiVersion: templates.gatekeeper.sh/v1beta1kind: ConstraintTemplatemetadata:  name: <имя ограничения>spec:  crd:    spec:      names:        kind: <имя ограничения, указывается в параметре kind для ресурса Constraint>      validation:        openAPIV3Schema: <схема для проверки типов параметров, переданных из ресурса Constraint>  targets:    - target: admission.k8s.gatekeeper.sh      rego: <правила на языке Rego>

spec.crd.spec.validation.openAPIV3Schema параметрі ережелерді тексеру үшін шектеуден шектеу үлгісіне берілетін параметрлер түрінің дұрыстығын тексеруді қамтамасыз етеді. Дұрыс берілмеген параметрлері бар шектеулер жасалмайды.

Үлгілер туралы толығырақ құжаттамада.

Gatekeeper-ді қалай пайдалану керек

Gatekeeper-ді пайдалану үшін:

  1. Қажетті ережелер мен кіріс параметрлерін тексерулері бар шектеу үлгісінің манифесін жасаңыз.
  2. Манифест негізінде шектеу үлгісінің ресурсын жасаңыз.
  3. Жасалған шектеу үлгісінің негізінде шектеу манифесін жасаңыз. Шектеу үшін қолданылу аясын және параметрлерін орнатыңыз.

Gatekeeper шектеулерін пайдалану мысалдары пайдалану сценарийлерінде келтірілген.