Как установить значения ssl-session-cache в configmap - kubernetes? - PullRequest
2 голосов
/ 17 апреля 2020

Я пытаюсь установить значение ssl-session-cache в моем configmap для ingress-controller,

проблема в том, что я не могу найти, как написать это правильно.

Мне нужны следующие изменения в конфигурации nginx:

ssl-session-cache builtin:3000 shared:SSL:100m

ssl-session-timeout: 3000

, когда я добавляю ssl-session-timeout: "3000" на карту конфигурации, это работает правильно - это я могу увидеть в nginx -конфиге через несколько секунд.

а как мне написать ssl-session-cache?

ssl-session-cache: builtin:"3000" shared:SSL:"100m" идет хорошо, но без изменений в nginx

ssl-session-cache: "builtin:3000 shared:SSL:100m" идет хорошо, но без изменений в синтаксической ошибке nginx

ssl-session-cache "builtin:3000 shared:SSL:100m" - невозможно изменить конфигурационную карту

ssl-session-cache builtin:"3000 shared:SSL:100m" синтаксическая ошибка - невозможно изменить конфигурационную карту

У кого-то есть идея, как правильно установить ssl-session-cache в configmap?

Спасибо!

1 Ответ

1 голос
/ 21 апреля 2020

TL; DR

Покопавшись и протестировав тот же сценарий в моей лаборатории, я нашел, как заставить его работать.

Как вы можете видеть здесь параметр ssl-session-cache требует, чтобы логическое значение указывало, будет ли оно включено или нет.

Необходимые изменения обрабатываются параметром ssl_session_cache_size и требуют строку, затем Правильно предположить, что оно будет работать, если изменить значение на builtin:3000 shared:SSL:100m, но после воспроизведения и погружения в конфигурацию nginx я пришел к выводу, что оно не будет работать, поскольку опция builtin:1000 имеет в жестком коде .

Чтобы заставить его работать должным образом, я нашел решение, использующее шаблон nginx в качестве configMap, смонтированный как том в модуле nginx -контроллера и другие configMap для внесения изменений в параметр ssl_session_cache_size.

Обходной путь

Взгляните на строку 343 из файла /etc/nginx/template в nginx модуль -дресс-контроллера:

bash-5.0$ grep -n 'builtin:' nginx.tmpl 
343:    ssl_session_cache builtin:1000 shared:SSL:{{ $cfg.SSLSessionCacheSize }};

Как видите, опция builtin:1000 равна жестко запрограммирован и не может быть изменен с использованием пользовательских данных на вашем подходе.

Однако есть несколько способов заставить его работать, вы можете напрямую изменить файл шаблона в модуль, но эти изменения будут потеряны если модуль d ie по какой-то причине ... или вы можете использовать пользовательский шаблон, смонтированный как configMap в nginx -контроллере.

В этом случае давайте создайте configMap с содержимым nginx .tmpl, изменив значение строки 343 на нужное значение.

  1. Получите файл шаблона из модуля nginx -ingress-controller, он создаст файл с именем nginx.tmpl локально:

ПРИМЕЧАНИЕ. Убедитесь, что пространство имен указано правильно.

$ NGINX_POD=$(kubectl get pods -n ingress-nginx -l=app.kubernetes.io/component=controller -ojsonpath='{.items[].metadata.name}')

$ kubectl exec $NGINX_POD -n ingress-nginx -- cat template/nginx.tmpl > nginx.tmpl
Измените значение строки 343 с builtin:1000 на builtin:3000:
$ sed -i '343s/builtin:1000/builtin:3000/' nginx.tmpl

Проверка, все ли в порядке:

$ grep builtin nginx.tmpl 
ssl_session_cache builtin:3000 shared:SSL:{{ $cfg.SSLSessionCacheSize }};

Хорошо, на этом у нас есть файл nginx.tmpl с измененным желаемым параметром.

Давайте продолжим и создадим configMap с пользовательским файлом nginx .tmpl:

$ kubectl create cm nginx.tmpl --from-file=nginx.tmpl
configmap/nginx.tmpl created

Это будет создайте configMap с именем nginx.tmpl в пространстве имен ingress-nginx, если пространство имен вашего входа отличается, внесите необходимые изменения перед применением.

После этого нам нужно отредактировать nginx -ingress развертывание и добавьте новые volume и volumeMount к контейнерам spe c. В моем случае имя развертывания nginx ingress-nginx-controller в пространстве имен ingress-nginx.

Отредактируйте файл развертывания:

$ kubectl edit deployment -n ingress-nginx ingress-nginx-controller

И добавьте следующую конфигурацию в правильные места:

...
        volumeMounts:
        - mountPath: /etc/nginx/template
          name: nginx-template-volume
          readOnly: true
...
      volumes:
      - name: nginx-template-volume
        configMap:
          name: nginx.tmpl
          items:
          - key: nginx.tmpl
            path: nginx.tmpl
...

После сохранения файла модуль контроллера nginx будет воссоздан с configMap, смонтированным как файл в модуле.

Давайте проверим, были ли распространены изменения:

$ kubectl exec -n ingress-nginx $NGINX_POD -- cat nginx.conf | grep -n ssl_session_cache
223:    ssl_session_cache builtin:3000 shared:SSL:10m;

Отлично, первая часть выполнена!

Теперь для shared:SSL:10m мы можем использовать тот же подход, который вы уже использовали: configMap с указанными c параметрами, указанными в этом do c.

Если вы помните в nginx .tmpl, для shared:SSL есть переменная с именем SSLSessionCache ({{ $cfg.SSLSessionCacheSize }}), в исходном коде можно проверить, что переменная представлена ​​параметром ssl-session-cache-size:

340  // Size of the SSL shared cache between all worker processes.
341  // http://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_session_cache
342  SSLSessionCacheSize string `json:"ssl-session-cache-size,omitempty"`

Итак, все, что нам нужно сделать, это создать configMap с этим параметром и требуемым значением:

kind: ConfigMap
apiVersion: v1
metadata:
  name: ingress-nginx-controller
  namespace: ingress-nginx
data:
  ssl-session-cache-size: "100m"

Примечание. Настройте пространство имен и имя configMap для эквивалента вашей среды.

Применение этого configMap NGINX перезагрузит конфигурацию и внесет изменения в файл конфигурации.

Проверка результатов:

$ NGINX_POD=$(kubectl get pods -n ingress-nginx -l=app.kubernetes.io/component=controller -ojsonpath='{.items[].metadata.name}')

$ kubectl exec -n ingress-nginx $NGINX_POD -- cat nginx.conf | grep -n ssl_session_cache
223:    ssl_session_cache builtin:3000 shared:SSL:100m;

Заключение

Это будет работать, как и ожидалось, К сожалению, я не могу найти способ добавить переменную в builtin:, поэтому мы продолжим использовать ее в жестком коде , но в настоящее время это будет configMap, в который вы сможете легко внести изменения, если это необходимо.

Ссылки:

NGINX Входной пользовательский шаблон

NGINX Входной исходный код

...