Прикрепление секрета к бегущей капсуле - PullRequest
0 голосов
/ 18 января 2019

Как прикрепить секрет к бегущей капсуле?

У меня запущен модуль, и я хочу прикрепить секрет.

Я не хочу завершать экземпляр запущенного модуля.

Я знаю, что модуль предназначен для работы без гражданства.

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Согласно документации :

Секреты могут быть смонтированы как тома данных или могут быть представлены как переменные среды для использования контейнером в модуле.

Это пример модуля, который монтирует секрет в томе:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: redis
    volumeMounts:
    - name: foo
      mountPath: "/etc/foo"
      readOnly: true
  volumes:
  - name: foo
    secret:
      secretName: mysecret

Установленные секреты обновляются автоматически

Когда секрет, уже использованный в томе, обновляется, спроецированные ключи в конечном итоге также обновляются. Kubelet проверяет, является ли установленный секрет свежим при каждой периодической синхронизации. Тем не менее, он использует свой локальный кеш для получения текущего значения секрета. Тип кэша настраивается с помощью поля (ConfigMapAndSecretChangeDetectionStrategy в структуре KubeletConfiguration). Его можно распространять с помощью watch (по умолчанию), на основе ttl или просто перенаправляя все запросы непосредственно на kube-apiserver. В результате общая задержка с момента обновления Секрета до момента, когда новые ключи проецируются на Pod, может составлять период синхронизации kubelet + задержка распространения кэша, где задержка распространения кэша зависит от выбранного типа кэша ( это равняется просмотру задержки распространения, ttl кеша или нуля соответственно).

Примечание. Контейнер, использующий Secret в качестве монтируемого тома subPath, не будет получать секретные обновления.

Это пример модуля, который использует секреты от переменных среды:

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
  - name: mycontainer
    image: redis
    env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: username
      - name: SECRET_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mysecret
            key: password
  restartPolicy: Never

В обоих случаях вам необходимо изменить спецификацию модуля. Вы можете сделать это, отредактировав Pod или Deployment с помощью kubectl edit:

$ kubectl edit pod <pod_name> -n <namespace_name>
$ kubectl edit deployment <deployment_name> -n <namespace_name>

В качестве альтернативы вы можете внести изменения в файл YAML и применить его:

$ vi MyPod.yaml
$ kubectl apply -f MyPod.yaml

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

Если вы все еще хотите добавить секреты без перезапуска Pod, вы можете использовать общее хранилище, например NFS. Когда вы изменяете содержимое тома NFS, который уже смонтирован в модуле, изменения сразу же будут видны внутри модуля. В некоторых случаях вы можете выполнить оболочку внутри модуля и смонтировать том NFS вручную.

Кроме того, вы можете экспортировать содержимое секрета в файл с помощью программы ksd
(или base64 -d) для декодирования закодированных в base64 значений в Secret:

kubectl get secret mysecret -o yaml | ksd > filename.yaml

и скопируйте в модуль, используя следующую команду:

kubectl cp filename.yaml <some-namespace>/<some-pod>:/tmp/secret.yaml
0 голосов
/ 18 января 2019

Секрет - это объем. Таким образом, вы не можете подключить том к запущенному модулю. Вы можете запустить pod в привилегированном режиме и смонтировать все, что вы хотите, с помощью команды mount внутри контейнера. Это безумие, хотя ...

...