Gatekeeper
Gatekeeper — бұл Rego тілінде шектеулерді (constraints) жасау мен олардың орындалуын бақылауды қамтамасыз ететін контроллер. Шектеулер жиынтығы CRD негізіндегі саясатты (CRD-based policy) қалыптастырады. Gatekeeper Kubernetes ресурстары үшін барлық CRD операцияларының (жасау, өзгерту, жою) берілген шектеулерге сәйкестігін тексереді және белгілі бір әрекетке тыйым салу немесе рұқсат беру туралы шешім қабылдайды.
Шектеулерді (саясаттар түрінде) қолдануға Open Policy Agent (OPA) жауап береді.
Саясаттардың сақталуы шектеулер (constraints) арқылы бақыланады. Бұл шектеулер шектеу үлгілерінің (constraint templates) негізінде жасалады және мыналарды анықтайды:
- Шектеудің қолданылу аясы: Kubernetes-тің қандай ресурстары шектеу үлгісінде берілген ережелерге сәйкестікке тексеріледі.
- Ережелерге сәйкестікті тексеру кезінде қолданылатын параметрлер.
Өз кезегінде, шектеу үлгісі шектеуде берілген қолданылу аясы мен параметрлер кезінде онда сипатталған ережелердің сақталуын тексереді. Бұл ережелер Rego тілі арқылы шектеу үлгісінің YAML-файлында тікелей сипатталады. Сондай-ақ шектеуден берілген параметрлердің дұрыстығы тексеріледі.
Шектеу мысалы:
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.shrego: <правила на языке Rego>
spec.crd.spec.validation.openAPIV3Schema параметрі ережелерді тексеру үшін шектеуден шектеу үлгісіне берілетін параметрлер түрінің дұрыстығын тексеруді қамтамасыз етеді. Дұрыс берілмеген параметрлері бар шектеулер жасалмайды.
Үлгілер туралы толығырақ құжаттамада.
Gatekeeper-ді пайдалану үшін:
- Қажетті ережелер мен кіріс параметрлерін тексерулері бар шектеу үлгісінің манифесін жасаңыз.
- Манифест негізінде шектеу үлгісінің ресурсын жасаңыз.
- Жасалған шектеу үлгісінің негізінде шектеу манифесін жасаңыз. Шектеу үшін қолданылу аясын және параметрлерін орнатыңыз.
Gatekeeper шектеулерін пайдалану мысалдары пайдалану сценарийлерінде келтірілген.