5.6.7. Webhook 정의
Operator 작성자는 Webhook를 통해 리소스를 오브젝트 저장소에 저장하고 Operator 컨트롤러에서 이를 처리하기 전에 리소스를 가로채기, 수정, 수락 또는 거부할 수 있습니다. Operator와 함께 webhook 가 제공 될 때 OLM (Operator Lifecycle Manager)은 이러한 Webhook의 라이프 사이클을 관리할 수 있습니다.
Operator의 CSV(클러스터 서비스 버전) 리소스에는 다음 유형의 Webhook를 정의하는 webhookdefinitions
섹션을 포함할 수 있습니다.
- 승인 Webhook(검증 및 변경)
- 변환 Webhook
프로세스
Operator CSV의
spec
섹션에webhookdefinitions
섹션을 추가하고ValidatingAdmissionWebhook
,MutatingAdmissionWebhook
또는ConversionWebhook
type
을 사용하여 Webhook 정의를 포함합니다. 다음 예제에는 세 가지 유형의 Webhook가 모두 포함되어 있습니다.Webhook를 포함하는 CSV
apiVersion: operators.coreos.com/v1alpha1 kind: ClusterServiceVersion metadata: name: webhook-operator.v0.0.1 spec: customresourcedefinitions: owned: - kind: WebhookTest name: webhooktests.webhook.operators.coreos.io 1 version: v1 install: spec: deployments: - name: webhook-operator-webhook ... ... ... strategy: deployment installModes: - supported: false type: OwnNamespace - supported: false type: SingleNamespace - supported: false type: MultiNamespace - supported: true type: AllNamespaces webhookdefinitions: - type: ValidatingAdmissionWebhook 2 admissionReviewVersions: - v1beta1 - v1 containerPort: 443 targetPort: 4343 deploymentName: webhook-operator-webhook failurePolicy: Fail generateName: vwebhooktest.kb.io rules: - apiGroups: - webhook.operators.coreos.io apiVersions: - v1 operations: - CREATE - UPDATE resources: - webhooktests sideEffects: None webhookPath: /validate-webhook-operators-coreos-io-v1-webhooktest - type: MutatingAdmissionWebhook 3 admissionReviewVersions: - v1beta1 - v1 containerPort: 443 targetPort: 4343 deploymentName: webhook-operator-webhook failurePolicy: Fail generateName: mwebhooktest.kb.io rules: - apiGroups: - webhook.operators.coreos.io apiVersions: - v1 operations: - CREATE - UPDATE resources: - webhooktests sideEffects: None webhookPath: /mutate-webhook-operators-coreos-io-v1-webhooktest - type: ConversionWebhook 4 admissionReviewVersions: - v1beta1 - v1 containerPort: 443 targetPort: 4343 deploymentName: webhook-operator-webhook generateName: cwebhooktest.kb.io sideEffects: None webhookPath: /convert conversionCRDs: - webhooktests.webhook.operators.coreos.io 5 ...
추가 리소스
- 웹 후크 승인 플러그인의 유형
Kubernetes 설명서:
5.6.7.1. OLM의 Webhook 고려 사항
OLM(Operator Lifecycle Manager)을 사용하여 Operator를 Webhook와 함께 배포할 때는 다음을 정의해야 합니다.
-
type
필드는ValidatingAdmissionWebhook
,MutatingAdmissionWebhook
또는ConversionWebhook
중 하나로 설정해야 합니다. 그러지 않으면 CSV가 실패한 단계에 배치됩니다. -
CSV에는
webhookdefinition
의deploymentName
필드에 제공된 값과 이름이 같은 배포가 포함되어야 합니다.
Webhook가 생성되면 OLM은 Operator가 배포된 Operator group과 일치하는 네임스페이스에서만 Webhook가 작동하는지 확인합니다.
인증 기관 제약 조건
OLM은 각 배포에 하나의 CA(인증 기관)를 제공하도록 구성되어 있습니다. 배포에 CA를 생성하고 마운트하는 논리는 원래 API 서비스 라이프사이클 논리에 사용되었습니다. 결과는 다음과 같습니다.
-
TLS 인증서 파일이 배포에 마운트됩니다(
/apiserver.local.config/certificates/apiserver.crt
). -
TLS 키 파일이 배포에 마운트됩니다(
/apiserver.local.config/certificates/apiserver.key
).
승인 Webhook 규칙 제약 조건
Operator에서 클러스터를 복구할 수 없는 상태로 구성하는 것을 방지하기 위해 OLM은 승인 Webhook에 정의된 규칙에서 다음 요청을 가로채는 경우 CSV를 실패한 단계에 배치합니다.
- 모든 그룹을 대상으로 하는 요청
-
operators.coreos.com
그룹을 대상으로 하는 요청 -
ValidatingWebhookConfigurations
또는MutatingWebhookConfigurations
리소스를 대상으로 하는 요청
변환 Webhook 제약 조건
OLM은 변환 Webhook 정의가 다음 제약 조건을 준수하지 않는 경우 CSV를 실패한 단계에 배치합니다.
-
변환 Webhook가 있는 CSV는
AllNamespaces
설치 모드만 지원할 수 있습니다. -
변환 Webhook에서 대상으로 하는 CRD는
spec.preserveUnknownFields
필드가false
또는nil
로 설정되어 있어야 합니다. - CSV에 정의된 변환 Webhook는 고유한 CRD를 대상으로 해야 합니다.
- 지정된 CRD의 전체 클러스터에는 하나의 변환 Webhook만 있을 수 있습니다.