私は4つのSwarmノード(ServiceA)と4つのノードにまたがるNginxサービスを同じSwarm上で実行しています。 Nginxサービスはポート80と443を公開/公開しています。すべてのサービスは同じユーザー定義のオーバーレイネットワークに接続されていますが、最も重要なのはコンテナ内からサービス名(ServiceA)をカール/ピンすることができます。Nginx上流のDocker swarm DNS /サービス名の使用
私の質問は、どのようにサービス名で動作するためにNginx上流を取得するのですか?私は多くを読んで、これをnginx.conf resolver 127.0.0.11 ipv6=off;
に追加しようとしましたが、それは役に立たず、Nginxサービスは開始しません。どのようにNginxを取得するための任意のアイデアは、DockerネットワークのDNS名を参照してください?
これは、上流のコンテナはすでに(DNSエントリが作成された)展開されている場合は、私のnginx.conf resolver
を削除
events {
worker_connections 4096;
}
http {
include /etc/nginx/conf/*.conf;
include /etc/nginx/mime.types;
proxy_intercept_errors off;
proxy_send_timeout 120;
proxy_read_timeout 300;
upstream serviceA {
ip_hash;
server serviceA:8081;
}
server {
listen 80 default_server;
resolver 127.0.0.11 ipv6=off;
keepalive_timeout 5 5;
proxy_buffering off;
underscores_in_headers on;
location ~ ^/serviceA(?<section>.*) {
access_log /var/log/nginx/access.log nginx_proxy_upstream;
proxy_pass http://serviceA/$section$is_args$query_string;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
resolver 127.0.0.11 ipv6=off;
keepalive_timeout 5 5;
proxy_buffering off;
underscores_in_headers on;
# allow large uploads
client_max_body_size 10G;
ssl_certificate /etc/nginx/ssl/myKey.crt;
ssl_certificate_key /etc/nginx/ssl/myKey.key;
location ~ ^/serviceA(?<section>.*) {
access_log /var/log/nginx/access.log nginx_proxy_upstream;
proxy_pass http://serviceA/$section$is_args$query_string;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
'--link'を使ってみましたか?リンクを作成すると、コンテナ内部から解決できるフレンドリ名になります。 – JulioHM
私はdocker swarm(17.03.1-ce)を使用しています。それは群れを使って行うことができますか?私は何も言及していません - スウォームのドキュメントにリンク –
リゾルバを削除してみてください。 – Kane