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 на нужное значение.
- Получите файл шаблона из модуля 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 Входной исходный код