我尝试在configmap中为ingress-controller设置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吗?
谢谢!
答案 0 :(得分:1)
在我的实验室中进行挖掘并测试了相同的场景之后,我发现了如何使其工作。
如您所见here,参数ssl-session-cache
需要一个布尔值值来指定是否将其启用。
您所需的更改由参数ssl_session_cache_size
处理,并且需要一个字符串,然后正确地假设它将值更改为builtin:3000 shared:SSL:100m
即可工作,但是在复制并深入到nginx配置之后,我得出结论,由于选项builtin:1000
是 硬编码 。
为了使其按预期工作,我找到了一种解决方案,该解决方案使用nginx模板作为configMap
,并作为卷安装在nginx-controller pod和其他configMap
中,以在参数ssl_session_cache_size
。
在nginx-ingress-controller窗格中的文件/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中。
在这种情况下,我们用nginx.tmpl内容创建一个configMap
,将第343行的值更改为所需的值。
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
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
这将在configMap
命名空间中创建一个称为nginx.tmpl
的{{1}},如果您的入口的命名空间不同,请在应用之前进行适当的更改。
此后,我们需要编辑nginx-ingress部署,并在容器规范中添加新的ingress-nginx
和volume
。就我而言,是volumeMount
命名空间中的nginx-ingress部署名称ingress-nginx-controller
。
编辑部署文件:
ingress-nginx
并在正确的位置添加以下配置:
$ kubectl edit deployment -n ingress-nginx ingress-nginx-controller
保存文件后,将重新创建nginx控制器容器,并将...
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
...
作为文件安装到容器中。
让我们检查一下更改是否已传播:
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
,具有本doc中提到的特定参数。
如果您还记得在nginx.tmpl中,对于configMap
,有一个名为 SSLSessionCache (shared:SSL
)的变量,可以在source code中进行检查该变量由选项{{ $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
注意:调整名称空间和configMap名称,使其与您的环境等效。
应用此kind: ConfigMap
apiVersion: v1
metadata:
name: ingress-nginx-controller
namespace: ingress-nginx
data:
ssl-session-cache-size: "100m"
NGINX将重新加载配置并在配置文件中进行更改。
检查结果:
configMap
它可以按预期工作,很遗憾,我找不到在$ 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;
中添加变量的方法,因此我们将继续使用经过 hardcoded 的方法,但此时它将是一个configMap,可以根据需要轻松进行更改。