можно ли два kubernetes тома монтировать в одном месте - PullRequest
0 голосов
/ 09 июня 2018

Я довольно новичок в Kubernetes, пытаюсь понять это.Я не смог найти этот ответ в Google, поэтому я в тупике.Может ли Кубернетес открыть два секрета на одном пути?скажем, учитывая следующее развертывание:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx-deployment
    version: v1
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
        version: v1
    spec:
      volumes:
      - name: nginxlocal
        hostPath:
          path: /srv/docker/nginx
      - name: requestcert
        secret:
          secretName: requests-certificate
      - name: mysitecert
        secret:
          secretName: mysitecert
      containers:
      - name: nginx
        image: nginx:mainline-alpine # Use 1.15.0
        volumeMounts:
        - name: nginxlocal
          subPath: config/nginx.conf
          mountPath: /etc/nginx/nginx.conf
        - name: requestcert
          mountPath: /etc/nginx/ssl
        - name: mysitecert
          mountPath: /etc/nginx/ssl
        - name: nginxlocal
          subPath: logs
          mountPath: /etc/nginx/logs
        ports:
        - containerPort: 443

возможно ли смонтировать оба SSL-сертификата в один и тот же каталог (/ etc / nginx / ssl / *)?

Если нет, можно ли сохранитьработает TLS cert + key как "непрозрачный" вместо типа kubernetes.io/tls?Я попытался объединить оба сертификата + ключи в один секрет типа tls, но kubernetes ожидал, что он будет называться tls.crt и tls.key, поэтому мне пришлось разделить его на два секретных файла.если бы они могли быть сделаны как непрозрачные, я думаю, я мог бы удалить два секретных значения и просто использовать одну непрозрачную запись.

Спасибо!

1 Ответ

0 голосов
/ 09 июня 2018

возможно ли смонтировать оба SSL-сертификата в один и тот же каталог (/ etc / nginx / ssl / *)?

Нет, потому что (по крайней мере, при использовании докера) он использует монтирование томов, которое ведет себя точно так же, как и mount -t ext4 /dev/something /path/something, в этом случае /path/something будет последним-одним победом.

Однако у вас есть только слегка вонючий обходной путь:secret requestcert как /etc/nginx/.reqcert (или аналогичный), смонтировать secret mysitecert как /etc/nginx/.sitecert, затем заменить entrypoint изображения и скопировать файлы на место перед делегированием к фактической точке входа:

containers:
- name: nginx
  image: etc etc
  command:
  - bash
  - -c
  - |
    mkdir -p /etc/nginx/ssl
    cp /etc/nginx/.*cert/* /etc/nginx/ssl/
    # or whatever initialization you'd like

    # then whatever the entrypoint is for your image
    /usr/local/sbin/nginx -g "daemon off;"

Или, если это не кажется хорошей идеей, вы можете использовать одноразовый, специфичный для Pod каталог в сочетании с initContainers::

spec:
  volumes:
  # all the rest of them, as you had them
  - name: temp-config
    emptyDir: {}
  initContainers:
  - name: setup-config
    image: busybox  # or whatever
    command:
    - sh
    - -c
    - |
       # "stage" all the config files, including certs
       # into /nginx-config which will evaporate on Pod destruction
    volumeMounts:
    - name: temp-config
      mountPath: /nginx-config
    # and the rest

  containers:
  - name: nginx
    # ...
    volumeMounts:
    - name: temp-config
      mountPath: /etc/nginx

Они различаются по сложности в зависимости отхотите ли вы иметь дело с отслеживанием команды точки входа вышестоящего изображения, вместо того, чтобы оставить нетронутым восходящее изображение, но затрачивать гораздо больше энергии инициализации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...