Завершить istio-прокси колонтитула istio для работы / crujob kubernetes - PullRequest
0 голосов
/ 28 февраля 2019

Мы недавно начали использовать istio Istio для создания сервис-сетки в пределах Kubernetes ландшафт.

Теперь у нас есть проблема, что задания и cronjobs не завершаютсяи продолжайте работать вечно, если мы введем в них контейнер с коляской istio istio-proxy.istio-proxy должен быть введен, хотя для установления надлежащих соединений mTLS со службами, с которыми работа должна поговорить, и для соблюдения наших правил безопасности.

Я также заметил открытые проблемы в Istio ( istio / проблемы/ 6324 ) и kubernetes ( kubernetes / Issues / 25908 ), но оба, похоже, не могут обеспечить правильное решение в ближайшее время.

Сначала ловушка предстопа казалась подходящейчтобы решить эту проблему, но есть некоторая путаница с самим этим понятием: kubernetes / Issues / 55807

lifecycle:
  preStop:
    exec:
      command: 
        ...

Итог: Эти хуки не будут выполнены, если контейнер успешно завершен.

Есть также несколько относительно новых проектов на GitHub, пытающихся решить эту проблему с помощью выделенного контроллера (что, я думаю, является наиболее предпочтительным подходом), но для нашей команды они не чувствуют себя достаточно зрелыми, чтобы сразу же заняться ими.производство:

Тем временем мы сами получили следующий обходной путь, который запускается в коляску и отправляет сигнал SIGTERM, но только если основной контейнер успешно завершился:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: terminate-sidecar-example-service-account
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: terminate-sidecar-example-role
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get","delete"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: terminate-sidecar-example-rolebinding
subjects:
  - kind: ServiceAccount
    name: terminate-sidecar-example-service-account
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: terminate-sidecar-example-role
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: terminate-sidecar-example-cronjob
  labels:
    app: terminate-sidecar-example
spec:
  schedule: "30 2 * * *"
  jobTemplate:
    metadata:
      labels:
        app: terminate-sidecar-example
    spec:
      template:
        metadata:
          labels:
            app: terminate-sidecar-example
          annotations:
            sidecar.istio.io/inject: "true"
        spec:
          serviceAccountName: terminate-sidecar-example-service-account
          containers:
          - name: ****
            image: ****
            command:
              - "/bin/ash"
              - "-c"
            args:
              - node index.js && kubectl exec -n ${POD_NAMESPACE} ${POD_NAME} -c istio-proxy -- bash -c "sleep 5 && /bin/kill -s TERM 1 &"
            env:
              - name: POD_NAME
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.name
              - name: POD_NAMESPACE
                valueFrom:
                  fieldRef:
                    fieldPath: metadata.namespace

Итакглавный вопрос для всех вас: Знаете ли вы о каком-нибудь лучшем обходном пути, решении, контроллере, ... который был бы менее хакерским / более подходящим для завершения контейнера istio-proxy, как только основной контейнер завершил свою работу

...