helm nginx-ingress chart を使用してnginxイングレスコントローラーをデプロイしたkubernetesクラスターがあります。
Nginx-controller-podで生成されたnginx.confファイルにカスタム構成を追加する必要があり、proxy-buffer-size: "512k"
などの1行のオプションを追加すると、これが反映されるという問題が発生しますnginx.confファイルですべてが期待どおりに機能します。
ただし、同じことを達成するためにスニペットを追加しようとすると:
location-snippet: |
proxy_buffer_size "512k";
これはnginx.confファイルによって無視され、proxy_buffer_size
設定はデフォルト値のままであるかのようです。
http-snippet
、server-snippet
、およびlocation-snippet
オーバーライドを追加できる必要がありますが、それらをConfigMapに追加しようとしても、Ingress.yamlファイル内の注釈としても常に無視されます。
私のイングレスyamlファイル:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/ssl-redirect: "true"
ingress.kubernetes.io/secure-backends: "true"
ingress.kubernetes.io/force-ssl-redirect: "true"
ingress.kubernetes.io/location-snippet: |
proxy_buffer_size 512k; --This does not update the nginx.conf
spec:
tls:
- hosts:
- my.app.co.uk
secretName: tls-secret
rules:
- Host: my.app.co.uk
http:
paths:
- path: /
backend:
serviceName: myappweb-service
servicePort: 80
私のnginx設定マップ:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: nginx-ingress
chart: nginx-ingress-0.28.3
component: controller
heritage: Tiller
release: nginx-ingress
name: nginx-ingress-controller
namespace: default
data:
proxy-buffer-size: "512k" -- this works and updates the nginx.conf
location-snippet: |
proxy_buffers 4 512k; -- this does not update the nginx.conf
server-snippet: | -- this does not update the nginx.conf
location /messagehub {
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_Host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $Host;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
}
私の問題は、私が適用していたスニペットの内容が原因であることがわかりました。実行するたびにkubectl apply -f myconfigmap.yaml
、検証は、nginx.confに適用しようとしている変更に対して実行されます。この検証が失敗すると、黙って失敗し、ターミナルでこれを警告するものは何もありません。
実際、configmap/nginx-ingress-controller configured
メッセージ。
たとえば、これを構成マップに追加すると、nginx.confが期待どおりに更新されます。
http-snippet: |
sendfile on;
ただし、これを追加しても何も変わりません。
http-snippet: |
sendfile on;
tcp_nopush on;
これは検証に失敗したためですが、それを見つける唯一の方法は、nginxイングレスコントローラーポッドのログを調べることです。この場合、私は見ます:
Error: exit status 1
2018/10/16 07:45:49 [emerg] 470#470: "tcp_nopush" directive is duplicate in
/tmp/nginx-cfg468835321:245
nginx: [emerg] "tcp_nopush" directive is duplicate in /tmp/nginx-cfg468835321:245
nginx: configuration file /tmp/nginx-cfg468835321 test failed
そのため、すでに存在するディレクティブを複製していました。
Kubernetes Ingress
を変更する場合、注釈オプションは次のとおりです。
nginx.ingress.kubernetes.io/configuration-snippet
nginxロケーションブロックスニペットの場合nginx.ingress.kubernetes.io/server-snippet
nginx構成サービスブロックのスニペット用その場合、nginx.org/location-snippets:
を使用しているようです。
Nginxの設定例にはYAMLの無効な構文もあり、この example に従ってserver-snippets
のように複数形も使用する必要があります。この執筆時点で docs にタイプミスがあります。開いた このチケット フォローアップする。
次のようになります。
server-snippets: |
location /messagehub {
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_Host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $Host;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
}
これの代わりに:
server-snippet: |
location /messagehub {
proxy_set_header Upgrade $http_upgrade;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-Host $http_Host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $Host;
proxy_set_header Connection "upgrade";
proxy_cache_bypass $http_upgrade;
}
最後の中括弧のインデントに注意してください。