概要
nginxは、起動時に転送先の名前解決を行います。
名前解決ができない場合、正常に起動しません。
しかし、proxy_passが複数設定されている場合、そのうちの1つでも名前解決できない(起動していない)とnginxが起動しないのは不便です。
locationの書き方を工夫することで、この状況を回避することができます。
回避方法
変数を使用する
proxy_passで設定する値に変数を使用します。
これにより、nginxは起動時に名前解決を行いません。
resolverを使用する
変数を使用する場合、resolverの使用も必要になります。
dockerの場合、resolverの値は
127.0.0.11
です。
GKEの場合は
kube-dns.kube-system.svc.cluster.local
です。
記述例
location /myservice-1 {
resolver kube-dns.kube-system.svc.cluster.local;
set $path http://myservice-1.namespace.svc.cluster.local:8888;
proxy_pass $path;
}
参考
https://sandro-keil.de/blog/let-nginx-start-if-upstream-host-is-unavailable-or-down/
https://serverfault.com/questions/876308/kubernetes-dns-resolver-in-nginx
https://www.nginx.com/blog/dns-service-discovery-nginx-plus/