如何在 configmap - kubernetes 中设置 ssl-session-cache 值?
How to set the ssl-session-cache values in configmap - kubernetes?
我尝试在入口控制器的配置映射中设置 ssl-session-cache 的值,
问题是,我找不到正确的写法。
我需要在 nginx 配置中进行以下更改:
ssl-session-cache builtin:3000 shared:SSL:100m
ssl-session-timeout: 3000
当我添加
ssl-session-timeout: "3000"
到配置映射,它工作正常 - 几秒钟后我可以在 nginx-config 中看到。
但是我应该如何编写 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"
语法错误 - 无法更改 configmap
ssl-session-cache builtin:"3000 shared:SSL:100m"
语法错误 - 无法更改 configmap
有人知道吗,如何正确设置 configmap 中的 ssl-session-cache?
谢谢!
TL;DR
在我的实验室中深入研究并测试相同的场景后,我找到了如何让它发挥作用。
如您所见here参数ssl-session-cache
需要一个布尔值来指定它是否被启用。
您需要的更改由参数 ssl_session_cache_size
处理并且需要一个字符串,然后假设它可以将值更改为 builtin:3000 shared:SSL:100m
是正确的,但是在复制并深入到 nginx 之后配置,我得出的结论是它不会工作,因为选项 builtin:1000
是 hardcoded.
为了让它按预期工作,我找到了一个解决方案,使用 nginx 模板作为 configMap
作为卷安装到 nginx-controller pod 和其他 configMap
进行更改在参数 ssl_session_cache_size
.
解决方法
查看 nginx-ingress-controller pod 中文件 /etc/nginx/template
中的 343 行:
bash-5.0$ grep -n 'builtin:' nginx.tmpl
343: ssl_session_cache builtin:1000 shared:SSL:{{ $cfg.SSLSessionCacheSize }};
如您所见,选项 builtin:1000
是 硬编码的 ,无法使用您的方法使用自定义数据进行更改。
但是,有一些方法可以让它工作,你可以直接将模板文件更改到 pod 中,但是如果 pod 由于某种原因死了,这些更改将会丢失......或者你可以 使用自定义模板作为 configMap
安装到 nginx-controller pod 中。
在这种情况下,让我们创建一个 configMap
,其中 nginx.tmpl 内容更改第 343 行的值以获得所需的值。
- 从 nginx-ingress-controller pod 获取模板文件,它会在本地创建一个名为
nginx.tmpl
的文件:
NOTE: Make sure the namespace is correct.
$ 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
文件,其中更改了所需的参数。
让我们继续并使用自定义 nginx.tmpl 文件创建一个 configMap
:
$ kubectl create cm nginx.tmpl --from-file=nginx.tmpl
configmap/nginx.tmpl created
这将在 ingress-nginx
命名空间中创建一个名为 nginx.tmpl
的 configMap
,如果您的入口命名空间不同,请在应用前进行适当的更改。
之后,我们需要编辑 nginx-ingress 部署并向容器规范添加新的 volume
和 volumeMount
。在我的例子中,ingress-nginx
命名空间中的 nginx-ingress 部署名称 ingress-nginx-controller
。
编辑部署文件:
$ 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 控制器 pod,并将 configMap
作为文件安装到 pod 中。
让我们检查更改是否已传播:
$ 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
以及此 doc.
中提到的特定参数
如果你记得在 nginx.tmpl 中,对于 shared:SSL
有一个名为 SSLSessionCache 的变量({{ $cfg.SSLSessionCacheSize }}
),在 source code 可以检查变量是否由选项 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"
Note: Adjust the namespace and configMap name for the equivalent of your environment.
应用此 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:
中添加变量的方法,所以我们将继续使用它 hardcoded 但是此时它将是一个 configMap,您可以根据需要轻松进行更改。
参考文献:
我尝试在入口控制器的配置映射中设置 ssl-session-cache 的值,
问题是,我找不到正确的写法。
我需要在 nginx 配置中进行以下更改:
ssl-session-cache builtin:3000 shared:SSL:100m
ssl-session-timeout: 3000
当我添加
ssl-session-timeout: "3000"
到配置映射,它工作正常 - 几秒钟后我可以在 nginx-config 中看到。
但是我应该如何编写 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"
语法错误 - 无法更改 configmap
ssl-session-cache builtin:"3000 shared:SSL:100m"
语法错误 - 无法更改 configmap
有人知道吗,如何正确设置 configmap 中的 ssl-session-cache?
谢谢!
TL;DR
在我的实验室中深入研究并测试相同的场景后,我找到了如何让它发挥作用。
如您所见here参数ssl-session-cache
需要一个布尔值来指定它是否被启用。
您需要的更改由参数 ssl_session_cache_size
处理并且需要一个字符串,然后假设它可以将值更改为 builtin:3000 shared:SSL:100m
是正确的,但是在复制并深入到 nginx 之后配置,我得出的结论是它不会工作,因为选项 builtin:1000
是 hardcoded.
为了让它按预期工作,我找到了一个解决方案,使用 nginx 模板作为 configMap
作为卷安装到 nginx-controller pod 和其他 configMap
进行更改在参数 ssl_session_cache_size
.
解决方法
查看 nginx-ingress-controller pod 中文件 /etc/nginx/template
中的 343 行:
bash-5.0$ grep -n 'builtin:' nginx.tmpl
343: ssl_session_cache builtin:1000 shared:SSL:{{ $cfg.SSLSessionCacheSize }};
如您所见,选项 builtin:1000
是 硬编码的 ,无法使用您的方法使用自定义数据进行更改。
但是,有一些方法可以让它工作,你可以直接将模板文件更改到 pod 中,但是如果 pod 由于某种原因死了,这些更改将会丢失......或者你可以 使用自定义模板作为 configMap
安装到 nginx-controller pod 中。
在这种情况下,让我们创建一个 configMap
,其中 nginx.tmpl 内容更改第 343 行的值以获得所需的值。
- 从 nginx-ingress-controller pod 获取模板文件,它会在本地创建一个名为
nginx.tmpl
的文件:
NOTE: Make sure the namespace is correct.
$ 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
文件,其中更改了所需的参数。
让我们继续并使用自定义 nginx.tmpl 文件创建一个 configMap
:
$ kubectl create cm nginx.tmpl --from-file=nginx.tmpl
configmap/nginx.tmpl created
这将在 ingress-nginx
命名空间中创建一个名为 nginx.tmpl
的 configMap
,如果您的入口命名空间不同,请在应用前进行适当的更改。
之后,我们需要编辑 nginx-ingress 部署并向容器规范添加新的 volume
和 volumeMount
。在我的例子中,ingress-nginx
命名空间中的 nginx-ingress 部署名称 ingress-nginx-controller
。
编辑部署文件:
$ 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 控制器 pod,并将 configMap
作为文件安装到 pod 中。
让我们检查更改是否已传播:
$ 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
以及此 doc.
如果你记得在 nginx.tmpl 中,对于 shared:SSL
有一个名为 SSLSessionCache 的变量({{ $cfg.SSLSessionCacheSize }}
),在 source code 可以检查变量是否由选项 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"
Note: Adjust the namespace and configMap name for the equivalent of your environment.
应用此 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:
中添加变量的方法,所以我们将继续使用它 hardcoded 但是此时它将是一个 configMap,您可以根据需要轻松进行更改。