Удалить секрет Кубернетеса на Хелме - PullRequest
0 голосов
/ 30 мая 2018

Я создаю некоторые секреты, когда helm install выполняется с помощью pre-install перехватчиков.

Все отлично работает.Однако при выполнении helm delete созданные секреты не удаляются.Это связано с тем, что любой ресурс, установленный с использованием pre-install, считается самоуправляемым.Итак, я прочитал, что это можно сделать с помощью post-delete хуков.

Итак, вопросы:

  1. Как удалить секреты при удалении сообщения?

  2. Если мы удалим pre-install хуков, тогда удаление работает просто отлично.Но тогда как гарантировать, что секреты будут созданы еще до того, как будут созданы стручки, когда мы выполним helm install?

Ответы [ 2 ]

0 голосов
/ 02 августа 2019

Вы можете использовать любое изображение с установленным kubectl, чтобы удалить его с помощью ловушки перед удалением, например, как @ ignacio-millán.Для этого вам также понадобится роль для запуска привилегированного задания, чтобы она могла удалять секреты.

Или вы можете просто использовать REST API K8s и свернуть его так:

apiVersion: batch/v1
kind: Job
metadata:
  labels:
  annotations:
    "helm.sh/hook": pre-delete # << run before delete (we still need the role)
...
spec:
  template:
    spec:
      serviceAccountName: your-privileged-serviceaccount
      automountServiceAccountToken: true 
    # this will mount var/run/secrets/kubernetes.io/serviceaccount/token
    containers:
        - name: pre-delete
          image: "appropriate/curl" # alpine + curl (3 MB)
          env:
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          command: 
            - "/bin/sh"
            - "-ec"
            - |
              curl -s -X DELETE -k https://kubernetes.default.svc/api/v1/namespaces/${NAMESPACE}/secrets/your-secret-name-nere \
                -H "Authorization: Bearer $( cat /var/run/secrets/kubernetes.io/serviceaccount/token )" \
                -H "Content-Type: application/json" \
                -H "Accept: application/json" \
                -d "{ \"kind\": \"Secret\", \"apiVersion\": \"v1\", \"metadata\": { \"name\": \"your-secret-name-nere\", \"namespace\": \"${NAMESPACE}\" } }"  > /dev/null
{{- end }}

Нам нужно «RoleBind» ServiceAccount с ролью (или clusterRole).Используйте helm.sh/hook-weight для заказа всего этого.роль должна выглядеть примерно так:

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: Role # Roles works only in namespace vs ClusterRole works in all the cluster (warning!)
metadata:
   namespace: {{ .Release.Namespace }}
  annotations:
    "helm.sh/hook": pre-install
    "helm.sh/hook-weight": "20"
    "helm.sh/hook-delete-policy": before-hook-creation
  labels:
     ....
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list", "create", "update"]

Обратите внимание, что мы перенаправляем вывод curl в null с помощью> / dev / null, мы не хотим этого в журналах.;) прокомментируйте это и "helm.sh/hook-delete-policy" для отладки.

Здесь идет работа над чем-то вроде этого:

https://github.com/Flag5/consul-helm/tree/tls-encryption/templates см. tls - *. yaml файлы.

надеюсь, это поможет:)

0 голосов
/ 30 мая 2018

Tiller создает ресурсы в определенном порядке (найдите его в исходном коде здесь: https://github.com/kubernetes/helm/blob/master/pkg/tiller/kind_sorter.go#L26)

Так что для этого конкретного случая пользователя нет необходимости в хуках или любом другом механизме, просто включите свой секрет иваши стручки и магия произойдут;)

Тем не менее, существует проблема с предустановленными объектами.В документации говорится, что это желаемое поведение:

На практике это означает, что если вы создаете ресурсы в хуке, вы не можете полагаться на удаление из-под рулевого управления для удаления ресурсов.Чтобы уничтожить такие ресурсы, вам нужно либо написать код для выполнения этой операции в хуке до или после удаления, либо добавить аннотацию «helm.sh/hook-delete-policy» в файл шаблона хука.

Единственное решение - добавить задание на диаграмму с помощью ловушки post-delete , которая удаляет эти ресурсы.

...