Skip to content

Commit

Permalink
Add upstream zone directive annotation/configmap
Browse files Browse the repository at this point in the history
  • Loading branch information
vrrs authored and Rulox committed Jul 30, 2019
1 parent e2337bb commit 9739593
Show file tree
Hide file tree
Showing 9 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/configmap-and-annotations.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,6 +166,7 @@ spec:
| `nginx.org/websocket-services` | N/A | Enables WebSocket for services. | N/A | [WebSocket support](../examples/websocket). |
| `nginx.org/max-fails` | `max-fails` | Sets the value of the [max_fails](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#max_fails) parameter of the `server` directive. | `1` | |
| `nginx.org/max-conns` | N\A | Sets the value of the [max_conns](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#max_conns) parameter of the `server` directive. | `0` | |
| `nginx.org/upstream-zone-size` | `upstream-zone-size` | Sets the size of the shared memory [zone](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#zone) for upstreams. For NGINX, the special value `0` disables the shared memory zones. | `256K` | |
| `nginx.org/fail-timeout` | `fail-timeout` | Sets the value of the [fail_timeout](https://nginx.org/en/docs/http/ngx_http_upstream_module.html#fail_timeout) parameter of the `server` directive. | `10s` | |
| `nginx.com/sticky-cookie-services` | N/A | Configures session persistence. | N/A | [Session Persistence](../examples/session-persistence). |
| `nginx.org/keepalive` | `keepalive` | Sets the value of the [keepalive](http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive) directive. Note that `proxy_set_header Connection "";` is added to the generated configuration when the value > 0. | `0` | |
Expand Down
5 changes: 5 additions & 0 deletions internal/configs/annotations.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ var minionInheritanceList = map[string]bool{
"nginx.org/proxy-buffers": true,
"nginx.org/proxy-buffer-size": true,
"nginx.org/proxy-max-temp-file-size": true,
"nginx.org/upstream-zone-size": true,
"nginx.org/location-snippets": true,
"nginx.org/lb-method": true,
"nginx.org/keepalive": true,
Expand Down Expand Up @@ -247,6 +248,10 @@ func parseAnnotations(ingEx *IngressEx, baseCfgParams *ConfigParams, isPlus bool
cfgParams.ProxyBufferSize = proxyBufferSize
}

if upstreamZoneSize, exists := ingEx.Ingress.Annotations["nginx.org/upstream-zone-size"]; exists {
cfgParams.UpstreamZoneSize = upstreamZoneSize
}

if proxyMaxTempFileSize, exists := ingEx.Ingress.Annotations["nginx.org/proxy-max-temp-file-size"]; exists {
cfgParams.ProxyMaxTempFileSize = proxyMaxTempFileSize
}
Expand Down
2 changes: 2 additions & 0 deletions internal/configs/config_params.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ type ConfigParams struct {
ProxyProtocol bool
ProxyHideHeaders []string
ProxyPassHeaders []string
UpstreamZoneSize string
HSTS bool
HSTSBehindProxy bool
HSTSMaxAge int64
Expand Down Expand Up @@ -109,6 +110,7 @@ func NewDefaultConfigParams() *ConfigParams {
SSLPorts: []int{443},
MaxFails: 1,
MaxConns: 0,
UpstreamZoneSize: "256k",
FailTimeout: "10s",
LBMethod: "random two least_conn",
MainErrorLogLevel: "notice",
Expand Down
4 changes: 4 additions & 0 deletions internal/configs/configmaps.go
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,10 @@ func ParseConfigMap(cfgm *v1.ConfigMap, nginxPlus bool) *ConfigParams {
}
}

if upstreamZoneSize, exists := cfgm.Data["upstream-zone-size"]; exists {
cfgParams.UpstreamZoneSize = upstreamZoneSize
}

if failTimeout, exists := cfgm.Data["fail-timeout"]; exists {
cfgParams.FailTimeout = failTimeout
}
Expand Down
1 change: 1 addition & 0 deletions internal/configs/ingress.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,7 @@ func createUpstream(ingEx *IngressEx, name string, backend *extensions.IngressBa
}

ups.LBMethod = cfg.LBMethod
ups.UpstreamZoneSize = cfg.UpstreamZoneSize
return ups
}

Expand Down
4 changes: 4 additions & 0 deletions internal/configs/ingress_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ func createExpectedConfigForCafeIngressEx() version1.IngressNginxConfig {
coffeeUpstream := version1.Upstream{
Name: "default-cafe-ingress-cafe.example.com-coffee-svc-80",
LBMethod: "random two least_conn",
UpstreamZoneSize: "256k",
UpstreamServers: []version1.UpstreamServer{
{
Address: "10.0.0.1",
Expand All @@ -138,6 +139,7 @@ func createExpectedConfigForCafeIngressEx() version1.IngressNginxConfig {
teaUpstream := version1.Upstream{
Name: "default-cafe-ingress-cafe.example.com-tea-svc-80",
LBMethod: "random two least_conn",
UpstreamZoneSize: "256k",
UpstreamServers: []version1.UpstreamServer{
{
Address: "10.0.0.2",
Expand Down Expand Up @@ -478,6 +480,7 @@ func createExpectedConfigForMergeableCafeIngress() version1.IngressNginxConfig {
coffeeUpstream := version1.Upstream{
Name: "default-cafe-ingress-coffee-minion-cafe.example.com-coffee-svc-80",
LBMethod: "random two least_conn",
UpstreamZoneSize: "256k",
UpstreamServers: []version1.UpstreamServer{
{
Address: "10.0.0.1",
Expand All @@ -491,6 +494,7 @@ func createExpectedConfigForMergeableCafeIngress() version1.IngressNginxConfig {
teaUpstream := version1.Upstream{
Name: "default-cafe-ingress-tea-minion-cafe.example.com-tea-svc-80",
LBMethod: "random two least_conn",
UpstreamZoneSize: "256k",
UpstreamServers: []version1.UpstreamServer{
{
Address: "10.0.0.2",
Expand Down
2 changes: 2 additions & 0 deletions internal/configs/version1/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ type Upstream struct {
LBMethod string
Queue int64
QueueTimeout int64
UpstreamZoneSize string
}

// UpstreamServer describes a server in an NGINX upstream.
Expand Down Expand Up @@ -169,6 +170,7 @@ type MainConfig struct {
func NewUpstreamWithDefaultServer(name string) Upstream {
return Upstream{
Name: name,
UpstreamZoneSize: "256k",
UpstreamServers: []UpstreamServer{
{
Address: "127.0.0.1",
Expand Down
1 change: 1 addition & 0 deletions internal/configs/version1/nginx.ingress.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

{{range $upstream := .Upstreams}}
upstream {{$upstream.Name}} {
{{if ne $upstream.UpstreamZoneSize "0"}}zone {{$upstream.Name}} {{$upstream.UpstreamZoneSize}};{{end}}
{{if $upstream.LBMethod }}{{$upstream.LBMethod}};{{end}}
{{range $server := $upstream.UpstreamServers}}
server {{$server.Address}}:{{$server.Port}} max_fails={{$server.MaxFails}} fail_timeout={{$server.FailTimeout}} max_conns={{$server.MaxConns}};{{end}}
Expand Down
1 change: 1 addition & 0 deletions internal/configs/version1/templates_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ const nginxPlusMainTmpl = "nginx-plus.tmpl"

var testUps = Upstream{
Name: "test",
UpstreamZoneSize: "256k",
UpstreamServers: []UpstreamServer{
{
Address: "127.0.0.1",
Expand Down

0 comments on commit 9739593

Please sign in to comment.