NGINX: Remove inline Lua from template. (#11806)
This commit is contained in:
parent
ee61440780
commit
6510535ae0
30 changed files with 361 additions and 233 deletions
|
|
@ -194,6 +194,41 @@ func cleanConf(in, out *bytes.Buffer) error {
|
|||
}
|
||||
}
|
||||
|
||||
/* LuaConfig defines the structure that will be written as a config for lua scripts
|
||||
The json format should follow what's expected by lua:
|
||||
use_forwarded_headers = %t,
|
||||
use_proxy_protocol = %t,
|
||||
is_ssl_passthrough_enabled = %t,
|
||||
http_redirect_code = %v,
|
||||
listen_ports = { ssl_proxy = "%v", https = "%v" },
|
||||
|
||||
hsts = %t,
|
||||
hsts_max_age = %v,
|
||||
hsts_include_subdomains = %t,
|
||||
hsts_preload = %t,
|
||||
*/
|
||||
|
||||
type LuaConfig struct {
|
||||
EnableMetrics bool `json:"enable_metrics"`
|
||||
ListenPorts LuaListenPorts `json:"listen_ports"`
|
||||
UseForwardedHeaders bool `json:"use_forwarded_headers"`
|
||||
UseProxyProtocol bool `json:"use_proxy_protocol"`
|
||||
IsSSLPassthroughEnabled bool `json:"is_ssl_passthrough_enabled"`
|
||||
HTTPRedirectCode int `json:"http_redirect_code"`
|
||||
EnableOCSP bool `json:"enable_ocsp"`
|
||||
MonitorBatchMaxSize int `json:"monitor_batch_max_size"`
|
||||
HSTS bool `json:"hsts"`
|
||||
HSTSMaxAge string `json:"hsts_max_age"`
|
||||
HSTSIncludeSubdomains bool `json:"hsts_include_subdomains"`
|
||||
HSTSPreload bool `json:"hsts_preload"`
|
||||
}
|
||||
|
||||
type LuaListenPorts struct {
|
||||
HTTPSPort string `json:"https"`
|
||||
StatusPort string `json:"status_port"`
|
||||
SSLProxyPort string `json:"ssl_proxy"`
|
||||
}
|
||||
|
||||
// Write populates a buffer using a template with NGINX configuration
|
||||
// and the servers and upstreams created by Ingress rules
|
||||
func (t *Template) Write(conf *config.TemplateConfig) ([]byte, error) {
|
||||
|
|
@ -256,7 +291,6 @@ var funcMap = text_template.FuncMap{
|
|||
"filterRateLimits": filterRateLimits,
|
||||
"buildRateLimitZones": buildRateLimitZones,
|
||||
"buildRateLimit": buildRateLimit,
|
||||
"configForLua": configForLua,
|
||||
"locationConfigForLua": locationConfigForLua,
|
||||
"buildResolvers": buildResolvers,
|
||||
"buildUpstreamName": buildUpstreamName,
|
||||
|
|
@ -383,41 +417,6 @@ func luaConfigurationRequestBodySize(c interface{}) string {
|
|||
return dictKbToStr(size)
|
||||
}
|
||||
|
||||
// configForLua returns some general configuration as Lua table represented as string
|
||||
func configForLua(input interface{}) string {
|
||||
all, ok := input.(config.TemplateConfig)
|
||||
if !ok {
|
||||
klog.Errorf("expected a 'config.TemplateConfig' type but %T was given", input)
|
||||
return "{}"
|
||||
}
|
||||
|
||||
return fmt.Sprintf(`{
|
||||
use_forwarded_headers = %t,
|
||||
use_proxy_protocol = %t,
|
||||
is_ssl_passthrough_enabled = %t,
|
||||
http_redirect_code = %v,
|
||||
listen_ports = { ssl_proxy = "%v", https = "%v" },
|
||||
|
||||
hsts = %t,
|
||||
hsts_max_age = %v,
|
||||
hsts_include_subdomains = %t,
|
||||
hsts_preload = %t,
|
||||
|
||||
}`,
|
||||
all.Cfg.UseForwardedHeaders,
|
||||
all.Cfg.UseProxyProtocol,
|
||||
all.IsSSLPassthroughEnabled,
|
||||
all.Cfg.HTTPRedirectCode,
|
||||
all.ListenPorts.SSLProxy,
|
||||
all.ListenPorts.HTTPS,
|
||||
|
||||
all.Cfg.HSTS,
|
||||
all.Cfg.HSTSMaxAge,
|
||||
all.Cfg.HSTSIncludeSubdomains,
|
||||
all.Cfg.HSTSPreload,
|
||||
)
|
||||
}
|
||||
|
||||
// locationConfigForLua formats some location specific configuration into Lua table represented as string
|
||||
func locationConfigForLua(l, a interface{}) string {
|
||||
location, ok := l.(*ingress.Location)
|
||||
|
|
@ -432,13 +431,21 @@ func locationConfigForLua(l, a interface{}) string {
|
|||
return "{}"
|
||||
}
|
||||
|
||||
return fmt.Sprintf(`{
|
||||
force_ssl_redirect = %t,
|
||||
ssl_redirect = %t,
|
||||
force_no_ssl_redirect = %t,
|
||||
preserve_trailing_slash = %t,
|
||||
use_port_in_redirects = %t,
|
||||
}`,
|
||||
/* Lua expects the following vars
|
||||
force_ssl_redirect = string_to_bool(ngx.var.force_ssl_redirect),
|
||||
ssl_redirect = string_to_bool(ngx.var.ssl_redirect),
|
||||
force_no_ssl_redirect = string_to_bool(ngx.var.force_no_ssl_redirect),
|
||||
preserve_trailing_slash = string_to_bool(ngx.var.preserve_trailing_slash),
|
||||
use_port_in_redirects = string_to_bool(ngx.var.use_port_in_redirects),
|
||||
*/
|
||||
|
||||
return fmt.Sprintf(`
|
||||
set $force_ssl_redirect "%t";
|
||||
set $ssl_redirect "%t";
|
||||
set $force_no_ssl_redirect "%t";
|
||||
set $preserve_trailing_slash "%t";
|
||||
set $use_port_in_redirects "%t";
|
||||
`,
|
||||
location.Rewrite.ForceSSLRedirect,
|
||||
location.Rewrite.SSLRedirect,
|
||||
isLocationInLocationList(l, all.Cfg.NoTLSRedirectLocations),
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue