charts/apm-attacher/templates/webhook.yaml (151 lines of code) (raw):

# This file is based on modifications to Kubernetes Mutating Webhook by Expedia, Inc., which is licensed under Apache 2.0. # https://github.com/ExpediaGroup/kubernetes-sidecar-injector {{- define "common.labels" }} app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/component: webhook app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{- define "certs.secret.name" }} {{- .Release.Name }} {{- end }} {{- define "service.name" }} {{- .Release.Name }} {{- end }} {{- $caPrefix := printf "%s-ca" .Release.Name }} {{- $ca := genCA $caPrefix 3650 }} {{- $cn := .Release.Name }} {{- $csrName := printf "%s.%s.svc" (include "service.name" .) .Release.Namespace }} {{- $cert := genSignedCert $cn nil (list $csrName) 3650 $ca }} --- apiVersion: v1 kind: Secret metadata: name: {{ include "certs.secret.name" . }} namespace: {{ .Release.Namespace }} labels: {{- include "common.labels" . | indent 4 }} data: cert.pem: {{ b64enc $cert.Cert }} key.pem: {{ b64enc $cert.Key }} {{- $secret_token := .Values.apm.secret_token }} {{- $api_key := .Values.apm.api_key }} {{ if or $secret_token $api_key }} {{ range .Values.apm.namespaces }} --- apiVersion: v1 kind: Secret metadata: name: apm-agent-auth namespace: {{ . }} data: {{- if $secret_token }} secret_token: {{ b64enc $secret_token }} {{- end }} {{- if $api_key }} api_key: {{ b64enc $api_key }} {{- end }} {{ end }} {{ end }} --- apiVersion: admissionregistration.k8s.io/v1 kind: MutatingWebhookConfiguration metadata: name: {{ .Release.Name }} labels: {{- include "common.labels" . | indent 4 }} webhooks: - name: {{ .Release.Name }}.{{ .Release.Namespace }}.svc.cluster.local clientConfig: service: name: {{ .Release.Name }} namespace: {{ .Release.Namespace }} path: "/" caBundle: {{ b64enc $ca.Cert }} failurePolicy: Fail admissionReviewVersions: [ "v1", "v1beta1" ] sideEffects: None rules: - operations: ["CREATE"] apiGroups: [""] apiVersions: ["*"] resources: ["pods"] namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: NotIn values: - kube-system - kube-public # The webhook has to be deployed to its own namespace, or else # attempts at scaling up pods will fail when trying to call # themself. - {{ .Release.Namespace }} --- apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Release.Name }} namespace: {{ .Release.Namespace }} labels: {{- include "common.labels" . | indent 4 }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: {{- include "common.labels" . | indent 6 }} template: metadata: annotations: generated-cert: {{ sha256sum $cert.Cert }} {{- with .Values.podAnnotations }} {{- toYaml . | nindent 8 }} {{- end }} labels: {{- include "common.labels" . | indent 8 }} {{- with .Values.podLabels }} {{- toYaml . | nindent 8 }} {{- end }} spec: containers: - name: {{ .Release.Name }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" imagePullPolicy: {{ .Values.image.pullPolicy }} args: - -certFile=/opt/webhook/certs/{{ .Values.certFile }} - -keyFile=/opt/webhook/certs/{{ .Values.keyFile }} - -config=/opt/webhook/config/webhook.yaml volumeMounts: - name: {{ .Release.Name }}-certs mountPath: /opt/webhook/certs readOnly: true - name: config mountPath: /opt/webhook/config readOnly: true ports: - name: https containerPort: {{ .Values.container.port }} protocol: TCP volumes: - name: {{ .Release.Name }}-certs secret: secretName: {{ include "certs.secret.name" . }} - name: config configMap: name: webhook-config --- apiVersion: v1 kind: ConfigMap metadata: name: webhook-config namespace: {{ .Release.Namespace}} data: webhook.yaml: | {{ toYaml .Values.webhookConfig | indent 4 }} --- apiVersion: v1 kind: Service metadata: name: {{ .Release.Name }} namespace: {{ .Release.Namespace }} spec: publishNotReadyAddresses: true ports: - port: 443 targetPort: https selector: {{- include "common.labels" . | indent 4 }}