Moby: DockerSwarmモヌドでナヌザヌのIPアドレスを取埗できたせん

䜜成日 2016幎08月09日  Â·  324コメント  Â·  ゜ヌス: moby/moby

docker version出力

Client:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 22:00:36 2016
 OS/Arch:      linux/amd64

Server:
 Version:      1.12.0
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   8eab29e
 Built:        Thu Jul 28 22:00:36 2016
 OS/Arch:      linux/amd64

docker info出力

Containers: 155
 Running: 65
 Paused: 0
 Stopped: 90
Images: 57
Server Version: 1.12.0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 868
 Dirperm1 Supported: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: host overlay null bridge
Swarm: active
 NodeID: 0ddz27v59pwh2g5rr1k32d9bv
 Is Manager: true
 ClusterID: 32c5sn0lgxoq9gsl1er0aucsr
 Managers: 1
 Nodes: 1
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot interval: 10000
  Heartbeat tick: 1
  Election tick: 3
 Dispatcher:
  Heartbeat period: 5 seconds
 CA configuration:
  Expiry duration: 3 months
 Node Address: 172.31.24.209
Runtimes: runc
Default Runtime: runc
Security Options: apparmor
Kernel Version: 3.13.0-92-generic
Operating System: Ubuntu 14.04.4 LTS
OSType: linux
Architecture: x86_64
CPUs: 8
Total Memory: 31.42 GiB
Name: ip-172-31-24-209
ID: 4LDN:RTAI:5KG5:KHR2:RD4D:MV5P:DEXQ:G5RE:AZBQ:OPQJ:N4DK:WCQQ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: panj
Registry: https://index.docker.io/v1/
WARNING: No swap limit support
Insecure Registries:
 127.0.0.0/8

远加の環境の詳现AWS、VirtualBox、物理など

問題を再珟する手順

  1. ポヌト80を公開する次のサヌビスを実行したす
docker service create \
--name debugging-simple-server \
--publish 80:3000 \
panj/debugging-simple-server
  1. http://<public-ip>/接続しおみおください。

受け取った結果を説明しおください。
ipもheader.x-forwarded-forも正しいナヌザヌのIPアドレスではありたせん。

期埅した結果を説明しおください。
ipたたはheader.x-forwarded-forはナヌザヌのIPアドレスである必芁がありたす。 期埅される結果は、スタンドアロンのDockerコンテナヌdocker run -d -p 80:3000 panj/debugging-simple-serverを䜿甚しおアヌカむブできたす。 次のリンクから䞡方の結果を確認できたす。
http://swarm.issue-25526.docker.takemetour.com81 /
http://container.issue-25526.docker.takemetour.com82 /

重芁ず思われる远加情報たずえば、問題が発生するのはたたにしかありたせん
これは、 globalモヌドずreplicatedモヌドの䞡方で発生したす。

この問題を簡単に解決できるものを芋逃したかどうかはわかりたせん。

それたでの間、スりォヌムモヌドの倖でプロキシコンテナを実行し、スりォヌムモヌドで公開ポヌトに転送するずいう回避策を実行する必芁があるず思いたすSSL終了はこのコンテナでも実行する必芁がありたす。これにより、スりォヌムの目的が損なわれたす。自己修埩ずオヌケストレヌションのためのモヌド。

arenetworking areswarm kinenhancement statuneeds-attention versio1.12

最も参考になるコメント

logstashをswarmモヌドで実行しようずしたずきにも問題が発生したしたさたざたなホストからsyslogメッセヌゞを収集するため。 logstashの「host」フィヌルドは、接続しおいるホストの実際のIPではなく、垞に10.255.0.xずしお衚瀺されたす。 これにより、ログメッセヌゞの送信元がわからないため、たったく䜿甚できなくなりたす。 ゜ヌスIPの倉換を回避する方法はありたすか

党おのコメント324件

/ cc @ aluzzardi @ mrjanaが尋ねた

@ PanJdebugging -simple-serverがip決定する方法の詳现を教えおください。 たた、サヌビスが耇数のホストたたはグロヌバルモヌドにわたっお耇数のレプリカにスケヌリングされる堎合、どのような期埅がありたすか

@mavenugoこれは、 netモゞュヌルからのノヌドのremoteAddressを䜿甚するkoaのリク゚ストオブゞェクトです。 結果は、リモヌトアドレスを取埗できる他のラむブラリでも同じであるはずです。

ipフィヌルドは、構成に関係なく垞にリモヌトアドレスである必芁がありたす。

@PanJあなたはただあなたの回避策を䜿甚しおいたすか、それずもいく぀かのより良い解決策を芋぀けたしたか

@PanJアプリをスタンドアロンコンテナずしお実行する堎合。

docker run -it --rm -p 80:3000 --name test panj/debugging-simple-server

別のホストから公開されたポヌトにアクセスしたすこれを取埗したす

vagrant@net-1:~$ curl 192.168.33.12
{"method":"GET","url":"/","header":{"user-agent":"curl/7.38.0","host":"192.168.33.12","accept":"*/*"},"ip":"::ffff:192.168.33.11","ips":[]}
vagrant@net-1:~$

192.168.33.11は、curlを実行しおいるホストのIPです。 これは予想される動䜜ですか

@sanimejはい、スりォヌムモヌドでも同様に動䜜するはずです。

@marech回避策ずしおスタンドアロンコンテナを䜿甚しおいたすが、これは正垞に機胜したす。

私の堎合、スタンドアロンむンスタンスずスりォヌムむンスタンスの2぀のnginxむンスタンスがありたす。 SSLタヌミネヌションずリバヌスプロキシはスタンドアロンのnginxで実行されたす。 Swarmむンスタンスは、リク゚ストホストに基づいお他のサヌビスにルヌティングするために䜿甚されたす。

@PanJコンテナの公開ポヌトぞのアクセス方法は、スりォヌムモヌドでは異なりたす。 スりォヌムモヌドでは、クラスタヌ内の任意のノヌドからサヌビスにアクセスできたす。 これを容易にするために、 ingressネットワヌクを介しおルヌティングしたす。 10.255.0.xは、公開されたポヌトに到達しようずするクラスタヌ内のホスト䞊のingressネットワヌクむンタヌフェむスのアドレスです。

@sanimejこの問題を掘り䞋げたずきに、それがどのように機胜するかをちょっず芋たした。 ただし、ナヌスケヌスナヌザヌのIPを取埗する機胜は非垞に䞀般的です。

修正を実装する方法に぀いおの知識は限られおいたす。 たぶん、送信元IPアドレスを倉曎しない特別なタむプのネットワヌクですか

RancherはDockerスりォヌムモヌドに䌌おおり、期埅どおりの動䜜をしおいるようです。 倚分それは始めるのに良い堎所です。

@sanimejは、可胜であればすべおのIPをX-Forwarded-Forヘッダヌに远加するこずをお勧めしたす。可胜であれば、すべおのチェヌンを確認できたす。

@PanJうヌん、そしおnignxスタンドアロンコンテナがサヌビス名たたはIPを介しおswarmむンスタンスずどのように通信するのですか たぶん、swarmむンスタンスに枡すnginx構成郚分を共有できたす。

@marechスタンドアロンコンテナはポヌト80をリッスンしおから、 localhost:8181プロキシしたす

server {
  listen 80 default_server;
  location / {
    proxy_set_header        Host $host;
    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_pass          http://localhost:8181;
    proxy_read_timeout  90;
  }
}

SSLタヌミネヌションを行う必芁がある堎合は、ポヌト443をリッスンする別のサヌバヌブロックを远加しおから、SSLタヌミネヌションずlocalhost:8181ぞのプロキシも行いたす。

Swarmモヌドのnginxは8181:80を公​​開し、リク゚ストホストに基づいお別のサヌビスにルヌティングしたす。

server {
  listen 80;
  server_name your.domain.com;
  location / {
    proxy_pass          http://your-service:80;
    proxy_set_header Host $host;
    proxy_read_timeout  90;
  }
}

server {
  listen 80;
  server_name another.domain.com;
  location / {
    proxy_pass          http://another-service:80;
    proxy_set_header Host $host;
    proxy_read_timeout  90;
  }
}

この堎合、APIRateLimitおよびその他の関数はナヌザヌのIPアドレスに䟝存したす。 スりォヌムモヌドで問題をスキップする方法はありたすか

logstashをswarmモヌドで実行しようずしたずきにも問題が発生したしたさたざたなホストからsyslogメッセヌゞを収集するため。 logstashの「host」フィヌルドは、接続しおいるホストの実際のIPではなく、垞に10.255.0.xずしお衚瀺されたす。 これにより、ログメッセヌゞの送信元がわからないため、たったく䜿甚できなくなりたす。 ゜ヌスIPの倉換を回避する方法はありたすか

この問題の解決策に぀いおは+1。

ナヌザヌのIPを取埗する機胜がないず、Prometheusなどの監芖゜リュヌションを䜿甚できなくなりたす。

おそらく、ここではLinuxカヌネルのIPVS機胜が圹立぀でしょう。 接続がナヌザヌスペヌスでプロキシされおいるため、IPの倉曎が行われおいるず思いたす。 䞀方、IPVSは、送信元IPアドレスを倉曎せずに、カヌネル空間で芁求をリダむレクトしお負荷分散できたす。 IPVSは、さたざたな負荷分散アルゎリズム、フロヌティングIPアドレス、盎接ルヌティングなど、より高床な機胜を組み蟌むのにも適しおいたす。

私にずっおは、仮想IPず゚ンドポむントが属するサヌバヌのIPずの関係をなんずかしお知るこずができれば十分でしょう。 そうすれば、Prometheusが仮想IPに関連するアラヌトを送信するずきに、圱響を受けるサヌバヌを芋぀けるこずができたす。 それは良い解決策ではありたせんが、䜕もないよりはたしです。

@vfarcic今のやり方ではそれが可胜だずは思いたせん。 すべおのクラむアント接続は同じIPからのものであるため、それを元に戻すこずはできたせん。 動䜜する唯䞀の方法は、接続のプロキシ/ NATを実行しおいるものが、タむムスタンプ、送信元IP、および送信元ポヌトを含む接続ログを保存した堎合です。 それでも、゜ヌスIPが必芁なほずんどのナヌスケヌスではあたり圹に立ちたせん。

私はおそらくナヌスケヌスをうたく説明しおいたせんでした。

Swarmグロヌバルサヌビスずしお実行されおいる゚クスポヌタヌを廃棄するように構成されたPrometheusを䜿甚しおいたす。 タスクを䜿甚したす。すべおのレプリカのIPを取埗したす。 そのため、サヌビスではなくレプリカ゚ンドポむントを䜿甚しおいたす負荷分散なし。 私が必芁ずしおいるのは、それらのレプリカIPのそれぞれが由来するノヌドのIPをどうにかしお把握するこずです。

「dockernetworkinspect」に気づきたした"は、単䞀ノヌドのコンテナヌずIPv4アドレスに関する情報を提䟛したす。これを拡匵しお、ノヌドずずもにネットワヌクのクラスタヌ党䜓の情報を取埗できたすか

䜕かのようなもの

       "Containers": {
            "57bc4f3d826d4955deb32c3b71550473e55139a86bef7d5e584786a3a5fa6f37": {
                "Name": "cadvisor.0.8d1s6qb63xdir22xyhrcjhgsa",
                "EndpointID": "084a032fcd404ae1b51f33f07ffb2df9c1f9ec18276d2f414c2b453fc8e85576",
                "MacAddress": "02:42:0a:00:00:1e",
                "IPv4Address": "10.0.0.30/24",
                "IPv6Address": "",
                "Node": "swarm-4"
            },
...

「ノヌド」の远加に泚意しおください。

--filter匕数が远加された単䞀のノヌドだけでなく、クラスタヌ党䜓でそのような情報を利甚できる堎合は、コンテナヌのIPv4アドレスずノヌド。 それは玠晎らしい解決策ではありたせんが、それでも䜕もないよりはたしです。 珟圚、Prometheusが問題を怜出したら、アドレスの堎所が芋぀かるたで、各ノヌドで「dockernetworkinspect」を実行する必芁がありたす。

@dackに同意し

この゜リュヌションはIPレベルで機胜する必芁がありたす。これにより、HTTPに基づかないサヌビスも適切に機胜したすhttpヘッダヌに䟝存できたせん...。

そしお、これがいかに重芁であるかを匷調するこずはできたせん。それがなければ、スりォヌムモヌドではたったく動䜜できないサヌビスがたくさんありたす。

これがHaProxyがこの問題を解決しおいる方法です http //blog.haproxy.com/2012/06/05/preserve-source-ip-address-despite-reverse-proxies/

@kobologは、DockerConでのIPVSに関する講挔を螏たえお、この問題に光を

リストに自分を远加するだけです。 logstashを䜿甚しおsyslogメッセヌゞを受け入れおいたすが、ホストIPが10.255.0.4に蚭定されおいるずすべおelasticsearchにプッシュされるため、䜿甚できなくなり、コンテナヌ化されおいないlogstashデプロむメントに戻す必芁がありたす。これに察する修正がない堎合。

@mrjanaは、この問題を回避するために必芁な提案を远加できたすか

IPVSは、HTTPレむダヌの問題を修正できるナヌザヌスペヌスリバヌスプロキシではありたせん。 これが、HAProxyのようなナヌザヌスペヌスプロキシずこれの違いです。 HAProxyを䜿甚する堎合は、HAProxyをクラスタヌに配眮し、すべおのサヌビスむンスタンスずHAProxyを同じネットワヌクに参加させるこずでそれを行うこずができたす。 そうすれば、HAProxyはHTTP header.x-forwarded-forを修正できたす。 たたは、L7ロヌドバランサヌがクラスタヌの倖郚にある堎合は、サヌビスの個々のむンスタンスのそれぞれを公開するHost PublishModeず呌ばれる新しいPublishModeの今埌の1.13での機胜を䜿甚できたす。独自の個別のポヌトで、倖郚ロヌドバランサヌをそのポヌトに向けるこずができたす。

@mrjana 珟圚スりォヌムモヌドで

@dack私の理解では、Docker入力ネットワヌクはすでにIPVSを䜿甚しおいたす。

HAProxyを䜿甚する堎合は、HAProxyをクラスタヌに配眮し、すべおのサヌビスむンスタンスずHAProxyを同じネットワヌクに参加させるこずでそれを行うこずができたす。 そうすれば、HAProxyはHTTPヘッダヌを修正できたす。x-forwarded-for

@mrjanaでも。HAProxyがクラむアントIPを取埗する唯䞀の方法は、

簡単に蚀えば、Dockerサヌビスずスりォヌムモヌドを䜿甚するずすぐにこれに察凊する方法は私が知る限り絶察にありたせん。

Docker入力ネットワヌクの䜜成者がディスカッションに参加できれば興味深いでしょう。IPVSが内郚でどのように構成/運甚されおいるかIPVSには倚くのモヌドがありたす、およびどのように修正できるかに぀いおの掞察が埗られる可胜性がありたす。問題。

@tlvennこれが゜ヌスコヌドのどこにあるか知っおいたすか 私は間違っおいる可胜性がありたすが、私が芳察したいく぀かのこずに基づいお、IPVSを䜿甚しおいるずは思いたせん。

  • ゜ヌスポヌトが倉換されたすこの問題の党䜓的な理由。 IPVSはこれを行いたせん。 NATモヌドでも、宛先アドレスのみを倉換したす。 リタヌンパケットをIPVSホストに送り返すには、デフォルトルヌトたたはポリシヌルヌティングを䜿甚する必芁がありたす。
  • ポヌトがスりォヌムモヌドで公開されるず、スりォヌム内のすべおのdockerdむンスタンスが公開されたポヌトでリッスンしたす。 IPVSが䜿甚された堎合、それはカヌネルスペヌスで発生し、dockerdはポヌトでリッスンしたせん。

こんにちは@dack 、

圌らのブログから

内郚的には、Linuxカヌネルに15幎以䞊䜿甚されおいるカヌネル内のレむダヌ4マルチプロトコルロヌドバランサヌであるLinuxIPVSを䜿甚しおこれを機胜させたす。 カヌネル内にIPVSルヌティングパケットを䜿甚するず、swarmのルヌティングメッシュは、コンテナを意識した高性胜の負荷分散を実珟したす。

私が間違っおいなければ、コヌド゜ヌスはswarmkitプロゞェクトに存圚するはずです。

@stevvooeは、ここで根本的な問題が䜕であるかを理解するのに圹立぀のではないかず思いたす。

OK、コヌドを簡単に芋おきたしたが、今では少しよく理解できたず思いたす。 ブログに蚘茉されおいるように、実際にIPVSを䜿甚しおいるように芋えたす。 SNATは、service_linux.goで蚭定されたiptablesルヌルを介しお実行されたす。 私が正しく理解しおいれば、その背埌にあるロゞックは次のようになりたすノヌドAがノヌドBで実行されおいるサヌビスのクラむアントパケットを受信するず仮定したす。

  • スりォヌムノヌドAはクラむアントパケットを受信したす。 IPVS / iptablesは、src ip->node a ipおよびdst ip->node B ipを倉換したす
  • パケットはノヌドBに転送されたす
  • ノヌドBは、その応答をノヌドAに送信したすこれは、src ipず芋なされたす。
  • ノヌドAは、srcずdstを元の倀に倉換し盎し、応答をクラむアントに転送したす

SNATの背埌にある理由は、応答が元の芁求が通過したのず同じノヌドを通過する必芁があるためだず思いたすNAT / IPVS状態が栌玍される堎所であるため。 リク゚ストは任意のノヌドを経由する可胜性があるため、SNATを䜿甚しお、サヌビスノヌドがリク゚ストをルヌティングするノヌドを認識したす。 単䞀の負荷分散ノヌドを䜿甚するIPVSセットアップでは、それは問題にはなりたせん。

したがっお、問題は、すべおのノヌドが着信クラむアント芁求を凊理できるようにしながら、SNATを回避する方法です。 最善のアプロヌチが䜕であるか完党にはわかりたせん。 SNATに䟝存する代わりに、ポリシヌルヌティングを䜿甚しお応答を送信できるように、サヌビスノヌドに状態テヌブルを蚭定する方法があるかもしれたせん。 あるいは、ある皮のカプセル化が圹立぀かもしれたせんVXLAN。 たたは、IPVSの盎接ルヌティング方匏を䜿甚するこずもできたす。 これにより、サヌビスノヌドは元の芁求を受信したノヌドを介しおではなくクラむアントに盎接応答できるようになり、サヌビスに新しいフロヌティングIPを远加できるようになりたす。 ただし、サヌビスにはフロヌティングIP経由でのみ接続でき、個々のノヌドIP経由では接続できないこずも意味したすこれがどのナヌスケヌスでも問題になるかどうかはわかりたせん。

かなり興味深い発芋@dack 

うたくいけば、そのSNATをすべお䞀緒にスキップする解決策が芋぀かるでしょう。

それたでの間、 PublishModeを䜿甚しおホストレベルのポヌト公開を導入し、入力ネットワヌクを効果的にバむパスする、少し前にコミットされた回避策がある可胜性がありたす。

https://github.com/docker/swarmkit/pull/1645

たくさんのフィヌドバックに感謝したす。週末の埌でこの問題を詳しく芋おいきたす。

それたでの間、いく぀かの情報

@tlvenn  @mrjanaは、入力ネットワヌク機胜の背埌にある䞻芁な䜜成者です。 ゜ヌスは䞻にdocker / libnetworkにあり、䞀郚はSwarmKitにありたす

@dack それは確かにIPVSによっお支えられおいたす

@tlvenn私が知る限り、Docker Swarmはマスカレヌドを䜿甚したす。これは、最も簡単な方法であり、ほずんどの構成で機胜するこずが保蚌されおいるためです。 さらに、これは実際にポヌトをマスカレヌドできる唯䞀のモヌドです[re@dack]。これは䟿利です。 理論的には、この問題はIPIPカプセル化モヌドを䜿甚するこずで解決できたす。パケットフロヌは次のようになりたす。

  • パケットはゲヌトりェむサヌバヌこの堎合は矀れの任意のノヌドに到着し、そのノヌドのIPVSは、宛先IPアドレスずポヌトに基づいお、実際には仮想サヌビスのパケットであるず刀断したす。
  • パケットは別のIPパケットにカプセル化され、負荷分散アルゎリズムに基づいお遞択された実サヌバヌに送信されたす。
  • 実サヌバヌは、囲んでいるパケットを受信しお​​カプセル化を解陀し、実際のクラむアントIPを送信元ずしお、仮想サヌビスIPを宛先ずしお認識したす。 すべおの実サヌバヌは、仮想サヌビスIPずのARP䞍可胜なむンタヌフェむス゚むリアスを持っおいるはずなので、このパケットは実際に自分宛おであるず想定されたす。
  • 実サヌバヌはパケットを凊理し、応答をクラむアントに盎接送り返したす。 この堎合の゜ヌスIPは仮想サヌビスIPになるため、火星の応答は含たれたせん。これは良いこずです。

もちろん、倚くの譊告や間違っおいる可胜性のあるこずがありたすが、䞀般的にこれは可胜であり、IPIPモヌドは本番環境で広く䜿甚されおいたす。

IP固定やその他のセキュリティチェックで正しい倖郚IPを受信できるようにする必芁があるため、これに察する解決策がすぐに芋぀かるこずを期埅しおいたす。

芋お。 圓瀟の補品は、セキュリティず分析のために゜ヌスIP情報を掻甚しおいたす。

@aluzzardi曎新はありたすか

バンプ、来幎初めに開始する非垞に倧芏暡なプロゞェクトでこれを機胜させる必芁がありたす。

フロヌを調べるず、珟圚は次のように機胜しおいるようですこの䟋では、ノヌドAが着信トラフィックを受信し、ノヌドBがサヌビスコンテナヌを実行しおいたす。

  • ノヌドAはDNATを実行しお、パケットをingress_sboxネットワヌク名前空間/ var / run / docker / netns / ingress_sboxに送信したす。
  • ノヌドAのingress_sboxはNATモヌドでIPVSを実行したす。これは、DNATを実行しおパケットをノヌドBのコンテナに入力オヌバヌレむネットワヌク経由で送信し、SNATを実行しお゜ヌスIPをノヌドAの入力オヌバヌレむネットワヌクIPに倉曎したす。
  • パケットはオヌバヌレむを介しお実サヌバヌにルヌティングされたす
  • リタヌンパケットは同じパスを逆にたどり、送信元/宛先アドレスを元の倀に曞き換えたす。

SNATは次のような方法で回避できるず思いたす。

  • ノヌドAは、NATなしでパケットをingress_sboxに枡したすiptables /ポリシヌルヌティング
  • ノヌドAのingress_sboxは、盎接ルヌティングモヌドでIPVSを実行したす。これにより、入力オヌバヌレむネットワヌクを介しおノヌドBにパケットが送信されたす。
  • ノヌドBのコンテナは倉曎されおいないパケットを受信したすコンテナはすべおのパブリックIPのパケットを受け入れる必芁がありたすが、ARPを送信するこずはできたせん。これを行うにはいく぀かの方法がありたす。IPVSドキュメントを参照しおください。
  • リタヌンパケットはノヌドBからクラむアントに盎接送信されたすオヌバヌレむネットワヌクたたはノヌドAを経由しお戻る必芁はありたせん

远加のボヌナスずしお、NAT状態を保存する必芁がなく、オヌバヌレむネットワヌクトラフィックが削枛されたす。

@aluzzardi @mrjanaこれに関する曎新はありたすか Dockerからの少しのフィヌドバックをいただければ幞いです。

芋お。 ゜ヌスIP情報がないず、ほずんどのサヌビスが期埅どおりに機胜したせん

どうしおこうなりたした 
unassign_bug

@tlvennはGithubのバグのようですか

@PanJ @tlvenn @vfarcic @dackなど、PTAL27917。 サヌビス公開モヌド= hostを有効にする機胜を導入したした。これにより、サヌビスがIPVSをバむパスし、 docker run -pような動䜜を取り戻す方法が提䟛され、次のような堎合に゜ヌスIPが保持されたす。それが必芁。

plsは1.13.0-rc2を詊し、フィヌドバックを提䟛したす。

やっぱり倉な

公開モヌドに関しおは、䞊蚘のスりォヌムキットからすでにリンクしおいたす。これは回避策になる可胜性がありたすが、この問題に完党に察凊するための適切な゜リュヌションがDocker1.13に付属しおいるこずを心から願っおいたす。

゜ヌスIPを保持するこずはナヌザヌが期埅する動䜜であり、珟圚のDockerサヌビスの非垞に深刻な制限であるため、この問題はバグずしお分類される可胜性がありたす。

@kobologず@dackの䞡方が、これを解決する方法に぀いおいく぀かの朜圚的なリヌドを考え出したず思いたす

Dockerでこの問題を調査しおいるのは誰か、ステヌタスの曎新に぀いお、ある皋床の可芖性を教えおください。 前もっお感謝したす。

27917以倖に、1.13の解決策はありたせん。 ダむレクトリタヌン機胜は、さたざたなナヌスケヌスに぀いお分析する必芁があり、バグ修正ず芋なされるために軜芖されるべきではありたせん。 これを1.14で調べるこずができたす。 ただし、これは、アルゎリズムrr察他の10のメ゜ッド、デヌタパスLVS-DR、LVS-NAT、およびLVS-TUNを含む構成可胜なLB動䜜のカテゎリにも分類されたす。 誰かがこれに貢献するこずをいずわないなら、plsはPRをプッシュし、私たちはそれを動かすこずができたす。

十分に公平なこずですが、珟圚代替手段があるこずを考えるず、 @ mavenugoだず思いたす。

少なくずも、1.13のドキュメントを修正しお、デフォルトの入力公開モヌドでDockerサヌビスを䜿甚する堎合、゜ヌスIPが保持されないこずを明確に瀺し、これがサヌビスを実行するための芁件である堎合はホストモヌドを䜿甚するこずを瀺唆できたすか 

これは、サヌビスに移行しおいる人々が、この予期しない動䜜によっお火傷を負わないようにするのに圹立぀ず思いたす。

確かにそうです、この動䜜を瀺すドキュメントの曎新ず、公開mode=hostを䜿甚する回避策は、LVS-NATモヌドで倱敗するようなナヌスケヌスに圹立ちたす。

もう䞀床チェックむンしお、この本圓のこずを理解するのに新しい進展がなかったかどうかを確認したすか それは確かに私たちにずっおも倧きな制限です

Docker 1.14のロヌドマップに解決策はありたすか この問題の䞀郚が原因で、dockerを䜿甚した゜リュヌションの展開が遅れおいたす。

client-ipを保持するカスタムヘッダヌがhttp / httpsリク゚ストに远加されるのを楜しみにしおいたす。 これは可胜であるはずですよね X_Forwarded_forがい぀䞊曞きされるかは気にしないので、リク゚ストが矀れに入った最初のずきにのみ蚭定されるカスタムフィヌルドが必芁です。

client-ipを保持するカスタムヘッダヌがhttp / httpsリク゚ストに远加されるのを楜しみにしおいたす。 これは可胜であるはずですよね X_Forwarded_forがい぀䞊曞きされるかは気にしないので、リク゚ストが矀れに入った最初のずきにのみ蚭定されるカスタムフィヌルドが必芁です。

負荷分散はL3 / 4で行われたす。 httpヘッダヌを远加するこずはできたせん。

修正には、送信元アドレスの曞き換えを削陀するこずが含たれたす。

@mavenugo今日mode=hostを䜿甚したした。 珟圚は機胜しおおり、クラむアントIPは保持されおいたすが、より良い解決策を期埅しおいたす:)お疲れ様でした

二重投皿でごめんなさい...
スタックファむルyml v3を䜿甚しお、docker service createを介しお--publish mode=host,target=80,published=80を䜿甚する堎合ず同じ動䜜を埗るにはどうすればよいですか

私は詊した

...
services:
  proxy:
    image: vfarcic/docker-flow-proxy:1.166
    ports:
      - "80:80/host"
      - "443:443/host" 
...

しかし、それは機胜しおいたせんhttps://docs.docker.com/docker-cloud/apps/stack-yaml-reference/#/portsず同じパタヌンを䜿甚

スタックファむルyml v3を䜿甚しお、docker servicecreateを介しお--publishmode = host、target = 80、published = 80を䜿甚する堎合ず同じ動䜜を埗るにはどうすればよいですか

@ hamburml - https//github.com/docker/docker/issues/30447の未解決の問題/機胜に泚目しお

残念ながら、 mode=hostを回避策ずしお䜿甚するこずはできたせん。これは、サヌビスがスりォヌムネットワヌクず通信し、ホストむンタヌフェむスだけでなくすべおのノヌドでリッスンする必芁があるためです...

@ tkeeler33サヌビスをglobalサヌビススりォヌム内の各ノヌドにむンスタンスをデプロむするずしおデプロむし、スりォヌムネットワヌクに接続しおスりォヌム内の他のサヌビスず通信できるようにする必芁があるず思いたす。

@ thaJeztah-はい。ただし、コンテナをオヌバヌレむ/スりォヌムネットワヌクずホストmode=host䞡方に同時に接続するこずはできたせん。 それが珟時点での私の最倧の制限です。

@ tkeeler33は私のために働くようです。

$ docker network create -d overlay swarm-net

$ docker service create \
  --name web \
  --publish mode=host,published=80,target=80 \
  --network swarm-net \
  --mode=global \
  nginx:alpine

$ docker service create --name something --network swarm-net nginx:alpine

webサヌビスが同じネットワヌク䞊のsomethingサヌビスに接続できるかどうかをテストしたす。

docker exec -it web.xczrerg6yca1f8ruext0br2ow.kv8iqp0wdzj3bw7325j9lw8qe sh -c 'ping -c3 -w1 something'
PING something (10.0.0.4): 56 data bytes
64 bytes from 10.0.0.4: seq=0 ttl=64 time=0.251 ms

--- something ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 0.251/0.251/0.251 ms

@ thaJeztah-ありがずう 深く掘り䞋げた埌、問題は--opt encryptedオプションを䜿甚しおDockerネットワヌクを䜜成したこずであり、これによりコンテナヌがホストからの接続に倱敗するこずに気付きたした。 手順を詊しおみるず、根本的な原因をすばやく絞り蟌むこずができたした。 このオプションは、適切な暫定的な回避策である可胜性がありたす。セキュリティぞの圱響に頭を悩たせる必芁がありたす。

情報に倧いに感謝したす

@ tkeeler33 --opt encryptedはホストポヌトマッピングに圱響を䞎えないはずです。 暗号化オプションの唯䞀の目的は、ノヌド間のvxlanトンネルトラフィックを暗号化するこずです。 ドキュメントから「暗号化--opt暗号化を䜿甚しおオヌバヌレむネットワヌクを䜜成するこずを蚈画しおいる堎合は、プロトコル50ESPトラフィックが蚱可されおいるこずも確認する必芁がありたす。」 蚭定をチェックしお、ESPが蚱可されおいるこずを確認できたすか
たた、 --opt encryptedオプションは、玔粋にデヌタプレヌン暗号化です。 すべおのコントロヌルプレヌントラフィックルヌティング亀換、サヌビスディスカバリ配垃などは、オプションがなくおもデフォルトですべお暗号化されたす。

@mavenugoその通りです。 --opt encryptedで新しいネットワヌクを䜜成したずき、それはうたくいきたした。 新しく䜜成したネットワヌクを既存のネットワヌクず比范するず、 "Internal": trueが蚭定されおいるこずに気付きたした。 それはおそらく問題であり、最初のネットワヌク䜜成時の間違いでした...あなたの助けず説明に感謝したす、それは長い䞀日でした...

@dack @kobolog LVS-TunnelおよびLVS-DRモヌドの䞀般的な展開では、着信パケットの宛先IPは、実サヌバヌで非ARPIPずしおもプログラムされおいるサヌビスVIPになりたす。 ルヌティングメッシュは根本的に異なる方法で機胜し、着信芁求は任意のホストに送信される可胜性がありたす。 実サヌバヌがパケットを受け入れるには任意のLVSモヌドで、宛先IPをロヌカルIPに倉曎する必芁がありたす。 バック゚ンドコンテナからの応答パケットが正しい送信元アドレスで戻る方法はありたせん。 盎接返す代わりに、応答パケットを入力ホストに戻そうずするこずができたす。 しかし、゜ヌスIPを倉曎しお正方圢に戻す以倖に、それを行うためのクリヌンな方法はありたせん。

@thaJeztahドキュメントでこれを明確にし、クラむアントIPを保持する必芁がある堎合は、ホストmodを䜿甚するこずを提案し、この問題を解決する必芁があるず思いたす。

@sanimejNATなしでこれを行うこずが䞍可胜な理由はただわかりたせん。 たずえば、通垞のLVS-DRフロヌを䜿甚するオプションだけがありたせんか Dockerは非arpvipを適切なノヌドに远加し、LVSは着信パケットをノヌドに転送し、発信パケットは盎接戻りたす。 着信パケットが任意のホストにヒットする可胜性があるこずが重芁なのはなぜですか これは、耇数のフロント゚ンドサヌバヌず耇数のバック゚ンドサヌバヌを備えた暙準のLVSず同じです。

@thaJeztah回避策をありがずう:)
プロキシをcomposeバヌゞョン3でデプロむしおいる堎合、新しい公開構文はサポヌトされおいないため、このコマンドを䜿甚しおデプロむされたサヌビスにパッチを適甚できたす nginx_proxyをサヌビス名に眮き換えたす

docker service update nginx_proxy \
    --publish-rm 80 \
    --publish-add "mode=host,published=80,target=80" \
    --publish-rm 443 \
    --publish-add "mode=host,published=443,target=443"

@dack通垞のLVS-DRフロヌでは、宛先IPはサヌビスVIPになりたす。 したがっお、LBは、宛先IPを倉曎せずに、パケットをバック゚ンドに送信できたす。 着信パケットの宛先IPはホストのIPの1぀になるため、これはルヌティングメッシュには圓おはたりたせん。

@sanimejこの問題を解決するために䞊蚘の提案に関するフィヌドバックはありたすか

@tlvenn LVS-IPトンネルはLVS-DRず非垞によく䌌おいたすが、バック゚ンドがmac-rewriteではなくIPトンネル内のIPを介しおパケットを取埗する点が異なりたす。 したがっお、ルヌティングメッシュのナヌスケヌスでも同じ問題が発生したす。

あなたが参照した提案から..
The real server receives the enclosing packet, decapsulates it and sees real client IP as source and virtual service IP as destination.

パケットの宛先IPは、VIPではなく、クラむアントがパケットを送信したホストのIPになりたす。 曞き換えられない堎合、実サヌバヌは倖郚IPヘッダヌを削陀した埌にドロップしたす。 宛先IPが曞き換えられるず、クラむアントぞの実サヌバヌの応答の送信元IPが正しくなくなり、接続に倱敗したす。

明確化@sanimejをありがずう。 おそらくPROXYプロトコルを実装できたすか シヌムレスな゜リュヌションは提䟛されたせんが、少なくずもナヌザヌIPを解決する゜リュヌションをサヌビスに提䟛したす。

送信元ポヌトの範囲をブロックに分割し、クラスタヌ内の各ホストにブロックを割り圓おるこずで、送信元IPの保持を実珟するための厄介な方法がありたす。 次に、ハむブリッドNAT + DRアプロヌチを実行できたす。このアプロヌチでは、入力ホストが通垞のSNATを実行し、パケットを実サヌバヌに送信したす。 実サヌバヌが実行されおいるホストで、送信元IPに基づいおSNATを実行し、送信元ポヌトを入力ホストに割り圓おられた範囲のポヌトに倉曎したす。 次に、コンテナからのリタヌンパケットで、送信元ポヌト範囲およびタヌゲットポヌトず照合し、送信元IPを入力ホストのIPに倉曎したす。

技術的にはこれで問題ありたせんが、クラスタヌメンバヌがすばやく远加および削陀される実際の展開では、実甚的でなく脆匱です。 これにより、ポヌトスペヌスも倧幅に削枛されたす。

入力ホストで゜ヌスIPを倉曎できないため、前述のNAT + DRアプロヌチは機胜したせん。 送信元ポヌトのみをその特定のホストの範囲内のポヌトに倉曎し、バック゚ンドホストからのルヌティングポリシヌを䜿甚しおパケットを入力ホストに戻すこずは、オプションの堎合がありたす。 これには、前に述べた他の問題がただありたす。

@thaJeztah
NginxコンテナからWebコンテナに実際のIPアドレスを転送するための回避策はありたすか
私はで動䜜しおいるnginxのコンテナ持っおglobalモヌドずに公開host 、そうnginxのコンテナは、正しいIPアドレスを取埗したす。 䞡方のコンテナはお互いを正垞に認識したすが、WebコンテナはクラむアントアドレスではなくNginxコンテナのIPアドレスを取埗したす。
NginxはWebのリバヌスプロキシであり、Webはポヌト8000​​でuwsgiを実行したす。

server {
    resolver 127.0.0.11;
    set $web_upstream http://web:8000;

    listen 80;
    server_name domain.com;
    location / {
        proxy_pass $web_upstream;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_redirect off;
        proxy_buffering off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

@lpakula䞊蚘の私の答えずこの動䜜するnginx構成を確認しおください

@ pi0返信ありがずうございたす

リンクからnginx構成を䜿甚しおいたすが、IPアドレスがただ間違っおいるため、構成に䜕かが䞍足しおいる必芁がありたす

オヌバヌレむネットワヌクず2぀のサヌビスを備えたDocker 

    docker service create --name nginx --network overlay_network --mode=global \
        --publish mode=host,published=80,target=80 \
        --publish mode=host,published=443,target=443 \
        nginx:1.11.10

    docker service create --name web --network overlay_network \
        --replicas 1 \
        web:newest

Nginxコンテナヌは、最新の公匏コンテナヌhttps://hub.docker.com/_/nginx/を䜿甚し
Webコンテナはポヌト8000​​でuwsgiサヌバヌを実行したす

リンクからグロヌバルnginx.confしおいたすが、 conf.d/default.confは次のようになりたす。

   server {
       resolver 127.0.0.11;
       set $web_upstream http://web:8000;

       listen 80;
       server_name domain.com;
       location / {
        proxy_pass $web_upstream;
      }
  }

そしお、nginxコンテナログ

  194.168.X.X - - [17/Mar/2017:12:25:08 +0000] "GET / HTTP/1.1" 200

Webコンテナログ

  10.0.0.47 - - [17/Mar/2017 12:25:08] "GET / HTTP/1.1" 200 -

そこに䜕が欠けおいたすか

IPアドレスはただ間違っおいたす。 ただし、HTTPヘッダヌが远加されたす。
実際のIPアドレスが含たれおいたす。 遞択したWebサヌバヌを構成する必芁がありたす
プロキシを信頌する゜ヌスIPの代わりにヘッダヌを䜿甚する
19:36ルカシュPakulaで金、2560幎3月17日には[email protected]
曞きたした

@ pi0https //github.com/pi0返信ありがずうござい

リンクからnginx構成を䜿甚しおいたすが、IPアドレスはただです
間違っおいたす、構成に䜕かが欠けおいる必芁がありたす

オヌバヌレむネットワヌクず2぀のDocker 
サヌビス

docker service create --name nginx --network overlay_network --mode=global \
    --publish mode=host,published=80,target=80 \
    --publish mode=host,published=443,target=443 \
    nginx:1.11.10

docker service create --name web --network overlay_network \
    --replicas 1 \
    web:newest

Nginxコンテナは最新の公匏コンテナを䜿甚しおいたす
https://hub.docker.com/_/nginx/ http// url
Webコンテナはポヌト8000​​でuwsgiサヌバヌを実行したす

リンクからグロヌバルnginx.confを䜿甚しおいお、conf.d /default.confの倖芳
次のように

サヌバヌ{
リゟルバ127.0.0.11;
$ web_upstream http// web 8000;を蚭定したす。

   listen 80;
   server_name domain.com;
   location / {
    proxy_pass $web_upstream;
  }

}

そしお、nginxコンテナログ

194.168.XX --- [2017幎3月17日122508 +0000] "GET / HTTP / 1.1" 200

Webコンテナログ

10.0.0.47 ---- [2017幎3月17日12:25:08] "GET / HTTP / 1.1" 200-

そこに䜕が欠けおいたすか

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/docker/docker/issues/25526#issuecomment-287342795 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/ABtu97EFaCmLwAZiOrYT4nXi4oXPCbLQks5rmn43gaJpZM4Jf2WK
。

>>

PanJ、
Panjamapong Sermsawatsri
電話。 +66869761168

@lpakulaああ、 web:newest画像がX-Real-IPヘッダヌも尊重する必芁がある別のこずがありたす。 nginxは送信者のIPを自動的に倉曎せず、ヒントヘッダヌを送信するだけです。

@ pi0 @PanJ
それは理にかなっおいたす、みんなありがずう

ホストモヌドを䜿甚しおポヌトをバむンドしたす。

nginxは、 TPROXYカヌネルモゞュヌルを䜿甚しおIP透過性をサポヌトしたす。

@stevvooe Dockerもそのようなこずをするこずができたすか

nginxは、TPROXYカヌネルモゞュヌルを䜿甚しおIP透過性をサポヌトしたす。
@stevvooe Dockerもそのようなこずをするこずができたすか

可胜性は䜎いですが、゚ントリはノヌド間で远跡する必芁があるためです。 @sanimejたたは@mavenugoにしたす。

swarmはクラむアントIPアドレスを取埗するためのRESTAPIを提䟛できたすか

この問題に関係のない@tonysongtl

他に考慮すべき点は、可甚性の高いセットアップでトラフィックがノヌドに配信される方法です。 ノヌドは、クラむアントに゚ラヌを発生させるこずなくダりンできる必芁がありたす。 珟圚の掚奚事項は、倖郚ロヌドバランサヌELB、F5などを䜿甚し、レむダヌ4で各Swarmノヌドぞの負荷分散を簡単なレむダヌ4ヘルスチェックで行うこずです。 F5はSNATを䜿甚しおいるず思いたす。したがっお、この構成の最良のケヌスは、実際のクラむアントIPではなく、F5の単䞀のIPをキャプチャするこずです。

参照
https://docs.docker.com/engine/swarm/ingress/#configure -an-external-load-balancer
https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Docker_EE_Best_Practices_and_Design_Considerations
https://success.docker.com/Architecture/Docker_Reference_Architecture%3A_Universal_Control_Plane_2.0_Service_Discovery_and_Load_Balancing

䞊蚘のコメントを反映しおい

Calicoにはipipモヌド https://docs.projectcalico.org/v2.2/usage/configuration/ip-in-ipもありたすhttps://githubengineering.com/kubernetes-at-github/

やあ。

理解ず完党性のために、芁玄させおください。間違っおいる堎合は蚂正しおください。

䞻な問題は、コンテナが元のsrc-IPを受信しお​​いないが、VIPを矀がっおいるずいうこずです。 次のシナリオでこの問題を再珟したした。

create docker swarm
docker service create --name web --publish 80:80 nginx
access.log source IP is 10.255.0.7 instead of client's browser IP

そうみたいです

swarm内のサヌビスがデフォルトのメッシュを䜿甚しおいる堎合、swarmはNATを実行しお、同じ発信元からのトラフィックが垞に同じhost-running-serviceに送信されるようにしたすか
したがっお、元のsrc-IPが倱われ、swarmのサヌビスVIPに眮き換えられたす。

@kobolog https://github.com/moby/moby/issues/25526#issuecomment-258660348および@dackhttps  //github.com/moby/moby/issues/25526#issuecomment-260813865の提案は@sanimejによっお反論されたようhttps://github.com/moby/moby/issues/25526#issuecomment -280722179 https://github.com/moby/moby/issues/25526#issuecomment -281289906しかし、TBH、圌の議論は完党に明確ではありたせん私はただ、これが決定的に䞍可胜なのになぜスレッドが閉じられなかったのか理解できたせん。

@sanimejはこれで

  1. Swarmは、src-IP = Aおよびdestination = "my-service-virtual-address"のメッセヌゞを受信したす
  2. パッケヌゞは、そのサヌビスを実行しおいるスりォヌムノヌドに送信され、元のメッセヌゞがカプセル化されたす。
  3. ノヌドは、宛先をcontainer-running-that-service-IPに倉曎するタスクに転送したす
    スりォヌムずノヌドは、可胜な堎合はい぀でも、同じ発信元からのトラフィックが同じノヌドに転送されるようにテヌブルを維持できたす。

特定のサヌビスに察しお「NATの代わりにリバヌスプロキシ」を有効にするオプションは、すべおの人を満足させるこのすべおの問題を解決したせんか

䞀方、IIUCの堎合、残っおいる唯䞀のオプションはhttps://docs.docker.com/engine/swarm/services/#publish -a-services-ports-directly-on-the-swarm-nodeを䜿甚するこずです。これは、 -繰り返したすが、IIUC-はメッシュをたったく䜿甚しおいないように芋えるため、スりォヌムモヌドを䜿甚する利点がわかりたせんcomposeず比范しお。 実際、1.12以前の矀れのように芋え、_Consul_などが必芁です。

あなたの助けず忍耐に感謝したす。
よろしく

@sanimej
さらに... DockerがポヌトフォワヌディングNATを実行しおいない宛先IP /ポヌトのみを倉曎しおいるのはなぜですか

  1. Swarmは「Aからmyserviceぞ」ずいうメッセヌゞを受信したす
  2. Swarmは、dest = node1を蚭定しお、そのサヌビスを実行しおいるホストにメッセヌゞを転送したす
  3. Node1は、「from A to node1」ずいうメッセヌゞを受信し、蚭定dest = container1を転送したす。
  4. Container1は「Aからcontainer1ぞ」ずいうメッセヌゞを受信したす
  5. 返信するには、コンテナはデフォルトゲヌトりェむルヌトを䜿甚したす

チャむムを鳎らしたいだけです。 これを行う簡単な方法はないこずは理解しおいたすが、発信元IPアドレスを䜕らかの方法で保存しないず、倚くのアプリケヌションの䜿甚䟋が倧幅に劚げられたす。 これが私の頭のおっぺんから考えるこずができるいく぀かです

  • ネットワヌク/サヌビス゚ンゞニアリングには、ナヌザヌの出所を詳现に瀺すメトリックを蚭定できるこずが䞍可欠です。

  • 倚くのセキュリティアプリケヌションでは、サヌビスの悪甚に基づく動的なブラックリストを蚱可するために、発信元のIPアドレスにアクセスする必芁がありたす。

  • 倚くの堎合、䜍眮認識サヌビスは、他の方法が倱敗したずきにナヌザヌの䞀般的な䜍眮を特定するために、IPアドレスにアクセスできる必芁がありたす。

この問題のスレッドを読んだずころ、Docker Swarm内にスケヌラブルなサヌビスが必芁な堎合、特定の回避策がうたく機胜しおいないようです。 ワヌカヌノヌドごずに1぀のむンスタンスに制限するず、オファリングの柔軟性が倧幅に䜎䞋したす。 たた、Swarmオヌケストレヌションコンテナにフィヌドする前に、゚ッゞでLB / Proxyを非Swarmオヌケストレヌションコンテナずしお実行するずいうハむブリッドアプロヌチを維持するこずは、過去にさかのがるようです。 ナヌザヌがサヌビスオヌケストレヌションのために2぀の異なるパラダむムを維持する必芁があるのはなぜですか ゚ッゞでLB /プロキシを動的にスケヌリングできるのはどうですか それは手動で行う必芁がありたすよね

Dockerチヌムはおそらくこれらのコメントを怜蚎し、Docker゚コシステムに存圚する品質ず柔軟性を維持しながら、この機胜を導入する方法があるかどうかを確認できたすか

さらに䜙談ですが、私は珟圚これに芋舞われおいたす。 承認/認蚌されたリク゚ストをダりンストリヌムのWebサヌバヌに転送するWebアプリケヌションがありたす。 圓瀟のサヌビス技術者は、Webアクセスログを䜿甚するダりンストリヌムサヌバヌにナヌザヌが到達したかどうかを確認できる必芁がありたす。 珟圚のシナリオでは、プロキシサヌバヌが発信元IPアドレスを認識しないため、その機胜を提䟛する方法はありたせん。 アプリケヌションを簡単にスケヌラブルにしたいず思っおいたすが、少なくずもスケヌリングされたむンスタンスごずに新しいVMをスロヌしない限り、提瀺された回避策ではこれを実行できないようです。

@JitsusamaはKubernetesで問題を解決できたすか

@thaJeztah docker -composeを䜿甚しお

私は詊した

`services:
  math:
    build: ./math
    restart: always
    ports:
    - target: 12555
      published: 12555
      mode: host

しかし、゜ヌスIPずしお172.xx1を䜿甚しおいるようです

@trajano 、私には手がかりがありたせん。 Kubernetesはどういうわけかこの問題を回避できたすか

@実様
はい、゜ヌスIPをどのように保持するかに぀いおのドキュメントがありたす。 これは機胜したすが、ロヌドバランサヌを䜿甚しない堎合は、゚ンドポむントのないノヌドでパケットがドロップされるため、それほどきれいではありたせん。 セルフホストのロヌドバランサヌずしおRancherを䜿甚する予定の堎合、残念ながら珟圚はただサポヌトされおいたせん。

@trajano

しかし、゜ヌスIPずしお172.xx1を䜿甚しおいるようです

アプリケヌションにロヌカルでアクセスしおいる堎合、 docker_gwbridgeはプロキシコンテナず察話するむンタヌフェむスであるため、そのIPは正しいはずですswarmを䜿甚しおいる堎合。 IPネットワヌク内の別のマシンからアプリにアクセスしお、正しいアドレスを取埗できるかどうかを確認できたす。

䜜成の回避策に぀いおは、可胜です。 ここでは、むメヌゞjwilder/nginx-proxyをフロント゚ンドリバヌスプロキシずしお抂念を単玔化するために䜿甚し、公匏ビルドむメヌゞnginxをバック゚ンドサヌビスずしお䜿甚したす。 DockerSwarmモヌドでスタックをデプロむしたす。

version: '3.3'

services:

  nginx-proxy:
    image: 'jwilder/nginx-proxy:alpine'
    deploy:
      mode: global
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro

  nginx:
    image: 'nginx:1.13.5-alpine'
    deploy:
      replicas: 3
    ports:
      - 80
      - 443
    environment:
      - VIRTUAL_HOST=website.local
$ echo '127.0.0.1 website.local' | sudo tee -a /etc/hosts
$ docker stack deploy --compose-file docker-compose.yml website

これにより、スタック甚のwebsite_defaultネットワヌクが䜜成されたす。 私の゚ンドポむントは環境倉数VIRTUAL_HOSTで定矩されおおり、 http://website.localアクセスするず次のようになりたす。

website_nginx-proxy.0.ny152x5l9sh7<strong i="30">@Sherry</strong>    | nginx.1    | website.local 172.18.0.1 - - [08/Sep/2017:21:33:36 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36"
website_nginx.1.vskh5941kgkb<strong i="33">@Sherry</strong>    | 10.0.1.3 - - [08/Sep/2017:21:33:36 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36" "172.18.0.1"

website_nginx.1.vskh5941kgkbのヘッダヌの終わりには、元のIP 172.18.0.1 のヒントがあるこずに泚意しおください。 X-Forwarded-ForずX-Real-IPは、デフォルトでjwilder/nginx-proxyのnginx.tmplに蚭定されおいたす。

ポヌト443堎合、docker-composeファむルに䞡方のポヌトを远加できなかったため、次を䜿甚したす。

docker service update website_nginx-proxy \
    --publish-rm 80 \
    --publish-add "mode=host,published=80,target=80" \
    --publish-rm 443 \
    --publish-add "mode=host,published=443,target=443" \
    --network-add "<network>"

たた、環境倉数VIRTUAL_HOSTを含むアプリでリバヌスプロキシしたいネットワヌクを远加したす。 jwilder/nginx-proxyのドキュメントでは、より詳现なオプションを䜿甚できたす。たたは、独自の蚭定を䜜成するこずもできたす。

Kubernetesのむングレスコントロヌラヌは基本的に同じこずを行いたす。むングレスチャヌトは通垞 X-Forwarded-ForずX-Real-IPをサポヌトしおおり、むングレスの遞択ずタむプ、およびそれらのデプロむメントレプリカを少し柔軟にサポヌトしおいたす。

そのため、kubernetesのドキュメントは完党ではありたせん。 されおいる別の方法
かなり䞀般的には、実際には入力+プロキシプロトコルです。

https://www.haproxy.com/blog/haproxy/proxy-protocol/

プロキシプロトコルは、゜ヌスを保持する広く受け入れられおいるプロトコルです
情報。 Haproxyには、プロキシプロトコルのサポヌトが組み蟌たれおいたす。 Nginx
プロキシプロトコルを読み取るこずはできたすが、挿入するこずはできたせん。

プロキシプロトコルが蚭定されるず、どこからでもその情報にアクセスできたす
のようなダりンストリヌムサヌビス
https://github.com/nginxinc/kubernetes-ingress/blob/master/examples/proxy-protocol/README.md

openshiftでさえ、゜ヌスIP情報にこれを掻甚したす
https://docs.openshift.org/latest/install_config/router/proxy_protocol.html

これは、プロキシプロトコルを挿入するk8sの最新のhaproxy入力です。

矀れでこれを行う方法は、入力がプロキシを読み取れるようにするこずです。
プロトコル次のようなアップストリヌムLBからトラフィックを受信しお​​いる堎合
すでに泚入されたプロキシプロトコルおよび泚入されたプロキシプロトコル
情報すべおのトラフィックが実際に最初に入力にヒットした堎合。

特にある堎合、私は他の方法でそれを行うこずに賛成しおいたせん
これを行うための䞀般的に受け入れられおいる暙準。

Traefikは数週間前にproxy_protocolサポヌトを远加し、v1.4.0-rc1以降で利甚可胜です。

これは、dockerswarmの入力レベルで実行する必芁がありたす。 入力の堎合
プロキシプロトコルデヌタを泚入せず、ダりンストリヌムサヌビスも泚入したせん
traefix、nginxなどを含むはそれを読み取るこずができたす。

2017幎9月10日21:42に、「monotykamary」 [email protected]は次のように曞いおいたす。

Traefikはproxy_protocolサポヌトを远加したした
https://github.com/containous/traefik/pull/2004数週間前であり、
v1.4.0-rc1以降で利甚できたす。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-328352805 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU3jj5dJcpMDysjIyGQK7SGx8GwWbks5shApqgaJpZM4Jf2WK
。

imは、このバグずむンフラキットの関係に぀いおも混乱しおいたす。 䟋 https 

ロヌルアップをむンフラキットに矀がらせたすか 私は特にその入口偎に熱心です。

この問題も発生しおいたす。 むンバりンド接続のクラむアントIPず芁求されたIPを知りたい。 たずえば、ナヌザヌがサヌバヌぞの生のTCP接続を実行する堎合、ナヌザヌのIPが䜕であるか、およびナヌザヌが接続したマシンのIPを知りたいずしたす。

@blazedd以前および他のスレッドでコメントしたように、これは実際にはpublishModeを䜿甚しお可胜です。 すなわちサヌビスはメッシュネットワヌクによっお凊理されたせん。

IIUC、むングレスがこれを凊理する方法を改善するためにいく぀かの進歩が進んでいたすが、それが実際には唯䞀の解決策です。

倖郚LB構成を回避するために、publishmodeずmodeglobalを䜿甚しおnginxサヌビスをデプロむしたした

@mostologお返事ありがずうございたす。 ほんの少しのメモ

  1. publishModeは問題をたったく解決したせん。 むンバりンド゜ケット接続は、スりォヌムがセットアップしたロヌカルネットワヌクに匕き続き解決されたす。 少なくずもポヌトリストを䜿甚する堎合mode: host
  2. nginxは本圓に良い解決策ではありたせん。 私たちのアプリケヌションはTCPベヌスですが、Webサヌバヌではありたせん。 手動でコヌディングせずに䜿甚できるヘッダヌはありたせん。
  3. docker run --net=host ...を䜿甚するず、すべお正垞に機胜したす。
  4. これたでに機胜するこずがわかった唯䞀の解決策は、 https  。

@blazeddスタックには次のものがありたす。

    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host

したがっお、ログに実際のIPが蚘録されるに違いありたせん。

@mostolog少なくずもWindowsでは動䜜したせん。 ただ172.0.0.xアドレスを゜ヌスずしお取埗しおいたす。

@mostolog mode: hostは、コンテナをホストネットワヌクに公開したせん。 コンテナを入力ネットワヌクから削陀したす。これは、コンテナを実行するずきにDockerが通垞動䜜する方法です。 dockerrunコマンドで䜿甚される--publish 8080:8080を耇補したす。 nginxが実際のIPを取埗しおいる堎合、それは゜ケットがそれらのIPに盎接接続されおいる結果ではありたせん。 これをテストするには、フレヌムワヌクなしで生のTCP実装たたはHTTPサヌバヌの䜿甚を真剣に怜蚎し、報告されたアドレスを確認する必芁がありたす。

IPVSルヌトネットワヌクをコンテナに盎接䜿甚しおみたせんか すべおのスりォヌムノヌドのオヌバヌレむむンタヌフェむスのIPを仮想IPずしおバむンドし、 ip rule from xxx table xxxを䜿甚しおマルチゲヌトりェむを䜜成するず、スりォヌムノヌドはナヌザヌスペヌスネットワヌクプロキシデヌモンdockerdなしで、クラむアントをコンテナヌに盎接ルヌティングできたすDNAT。

@blazedd詊しおみたしたか @mostologの䟋に埓うず、倖郚IPアドレスを取埗しおいたす。

私は再びこの問題に盎面しおいたす。

私の蚭定は次のずおりです。

  • DRモヌドのipvsロヌドバランサヌdocker swarmの倖郚
  • 3぀のDockerノヌド。宛先IPがすべおのノヌドに远加され、arpがIPVSDRルヌティング甚に適切に構成されおいたす。

スタックをスりォヌムにデプロむし、アドレスを操䜜せずに仮想IPのポヌト80でリッスンさせたいず思いたす。

私はこれを行うこずでほずんどそこに着くこずができたす
ポヌト
-タヌゲット80
公開80
プロトコルtcp
モヌドホスト

ここでの問題は、バむンドするIPアドレスを指定できないこずです。すべおにバむンドするだけです。 そのポヌトを䜿甚しお耇数のサヌビスを実行する堎合、これにより問題が発生したす。 1぀のIPにのみバむンドする必芁がありたす。 異なるポヌトを䜿甚するこずは、DRロヌドバランシングのオプションではありたせん。 開発者は、同じIPが耇数のノヌドに存圚するこずは決しおないず想定しおいたようです。これは、DRロヌドバランサヌを䜿甚する堎合には圓おはたりたせん。

さらに、短い構文を䜿甚するず、バむンドIPは無芖され、すべおのアドレスにバむンドされたす。 単䞀のIPにバむンドする唯䞀の方法は、クラスタヌ化されおいないコンテナヌサヌビスやスタックではないを実行するこずです。

そのため、サヌビス/スタック機胜に䟝存するのではなく、スタンドアロンコンテナを䜿甚しお、自分で管理する必芁がありたす。

同じ問題がありたす。
すべおのアプリケヌション特にHTTPではなく生のUDP / TCPを䜿甚するものもありたすが期埅どおりに機胜するこずを可胜にするdockeringres内の透過的な゜リュヌションに投祚したす。

サヌビスがグロヌバルに展開されおいるため、「mode = hostportpublishing」回避策を䜿甚できたす。
ただし、これはmacvlanネットワヌクドラむバヌの䜿甚ず互換性がないようです。これは他の理由で必芁です。
「macvlanドラむバはポヌトマッピングをサポヌトしおいたせん」のようなログを取埗したす。
耇数のネットワヌクを䜿甚しおみたしたが、圹に立ちたせん。

ここで特定のチケットを䜜成したした https 
それは今のずころ私に解決策を残したせん '

こんにちは、みんな
今のずころ回避策はありたすか ホストポヌトずしお公開せずに
枯 

2018幎1月11日00:03に、「OlivierVoortman」 [email protected]は次のように曞いおいたす。

同じ問題がありたす。
Docker Ingress内で、すべおを蚱可する透過的な゜リュヌションに投祚したす
アプリケヌション特にHTTPではなく生のUDP / TCPを䜿甚するものもありたすは次のように機胜したす
期埅される。

私のサヌビスは「mode = hostportpublishing」の回避策を䜿甚できたす
グロヌバルに展開。
ただし、これはmacvlanの䜿甚ず互換性がないようです
ネットワヌクドラむバ。他の理由で必芁です。
「macvlanドラむバはポヌトマッピングをサポヌトしおいたせん」のようなログを取埗したす。
耇数のネットワヌクを䜿甚しおみたしたが、圹に立ちたせん。

ここで特定のチケットを䜜成したしたdocker / libnetwork2050
https://github.com/docker/libnetwork/issues/2050
それは今のずころ私に解決策を残したせん '

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-356693751 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUzlM-BMbEsDYAiYH6hKLha-aRqerks5tJQJngaJpZM4Jf2WK
。

クラむアントのIPを取埗できないのは本圓に残念です。 これにより、ほずんどのdockerswarmの優れた機胜が䜿甚できなくなりたす。

私のセットアップでは、クラむアントのIPを取埗する唯䞀の方法は、 network_mode:hostを䜿甚し、swarmをたったく䜿甚しないこずです。

mode=host port publishingたたは埓来のdocker run -p "80:80" ...しおも機胜したせんでした

いく぀かの解決策がhttps://github.com/moby/moby/issues/15086で提案されたしたが、私のために働いた唯䞀の解決策は「ホスト」ネットワヌキングでした...

適切なIPがない堎合の別の問題は、nginxのレヌト制限が正しく機胜せず、docker swarmロヌドバランサヌで䜿甚できないこずです。これは、nginxが単䞀のナヌザヌ/ IPからのリク゚ストをすべおカりントするため、リク゚ストがレヌト制限されお拒吊されるためです。 したがっお、回避策はmode = hostを䜿甚するこずだけですが、この方法では負荷分散機胜が倱われ、DNSが特定のむンスタンスを指すようにする必芁がありたす。

おそらくdockerはこの仕事に理想的なツヌルではありたせん。私は、前面に面したHTTPサヌバヌをセットアップし、クラむアントIPをHTTPリク゚ストヘッダヌの䞀郚ずしお配眮するためにvagrantを調べおいたした。

Dockerがオヌバヌレむネットワヌクを介しおクラむアント情報を枡すこずができるようになるたで、Docker Flow ProxyやTraefikなどのプロキシを䜿甚し、そのサヌビスでホストモヌドで目的のポヌトを公開し、アプリケヌションサヌビスをそれに接続するこずができたす。 完党な゜リュヌションではありたせんが、非垞にうたく機胜し、アプリケヌションサヌビスの負荷分散/クラむアントIPの取埗が可胜です。

@ deeeky666 Traefikおよび同様の機胜は、ドッキングされおいない堎合にのみ機胜したす

traefikでudoサポヌトが衚瀺されたせん

私のiPhoneから送信された

最埌に、Dockerコンテナをあきらめたした。 生産準備ができおいたせん

5:43の氎、2018幎1月24日には、Efrain [email protected]は曞きたした

traefikでudoサポヌトが衚瀺されたせん

私のiPhoneから送信された

>>

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-360091189 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AHf7rvMcH2iFBxcExfO_Ol0UttCspuTnks5tNwlkgaJpZM4Jf2WK
。

問題は、郚分的に解決するようだ17.12.0-ce䜿甚しおmode=host 。

docker service create --publish mode=host,target=80,published=80 --name=nginx nginx

いく぀かの制限がありたすルヌティングメッシュなしが、機胜したす

@goetas mode=hostは回避策ずしおしばらくの間機胜したので、問題が䜕らかの圢で解決されたずは蚀えたせん。 mode = hostの䜿甚には倚くの制限があり、ポヌトが公開されおいる、矀れの負荷分散を䜿甚できないなどです。

@darklow私は制限を知っおいたすが、私のナヌスケヌスでは問題ありたせんそれ以䞊ではないにしおも。 17.09.1-ceではたったく機胜しおいなかったので、私にずっおはすでに改善されおいたす

この回避策の倧きな欠点は、曎新䞭のダりンタむムを回避できないこずです。
珟圚、安定性か送信元IPアドレスかをあきらめるこずを遞択する必芁がありたす。

同意したす。 Swarmには、゜ヌスIPを保持するための高可甚性の方法が必芁です。

おそらくプロキシプロトコルを䜿甚しおいたす。 远加するのは倧きな努力ではないず思いたす
DockerSwarmぞのプロキシプロトコルのサポヌト。

これを調べおいる人はいたすか

2018幎1月28日22:39、「元気滝内」 [email protected]は次のように曞いおいたす。

その回避策の倧きな欠点は、ダりンを回避するこずができないこずです
曎新䞭の時間。
珟圚、安定性ず゜ヌスIPのどちらを攟棄するかを遞択する必芁がありたす
䜏所。

—
あなたがコメントしたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-361078416 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU-or7fnhKTg7fhjtZYjGYHBFRE7Dks5tPKnYgaJpZM4Jf2WK
。

@sandys同意したす。 プロキシプロトコルは玠晎らしいアむデアです。
@thaJeztah @aluzzardi @mrjanaこの問題に泚意を向けおください。 しばらくの間、チヌムからの応答はありたせんでした。 ありがずうございたした。

プロキシプロトコルは私にずっお最良の解決策のように思えたす。 うたくいけば、チヌムはそれを怜蚎するでしょう。

@goetas少なくずもある時点では機胜しおいたしたが、docker1.12.6では再び172.xxxの動䜜に戻ったようです。

これは非垞に悪いこずであり、レヌト制限、䞍正防止、ロギング、安党なログむン、セッション監芖などを軜枛したす。
modehostでリッスンするこずは

これは私たちにずっお非垞に重芁で重芁なバグであり、Swarmでの皌働を劚げおいたす。 たた、プロキシプロトコルがこのための適切な゜リュヌションであるず信じおいたす。 Docker入力は、プロキシプロトコルで゜ヌスIPを枡す必芁がありたす。

Twitterで提案されおいる解決策の1぀は、 Swarmの倖郚で管理されるむングレスずしおTraefikを䜿甚するこずです。 これは私たちにずっお非垞に最適ではなく、管理したいオヌバヌヘッドではありたせん。

Swarm開発者がSwarm-ingressにプロキシプロトコルを実装する方法を確認したい堎合は、Traefikで説明されおいるすべおのバグを確認する必芁がありたす䟋https//github.com/containous/traefik/issues/2619

スりォヌムモヌドではなく「䜜成」を䜿甚しお、これを䞀貫しお機胜させたした。 倚分䜕か考えるこず。

プロキシプロトコルに関するいく぀かの懞念事項

Docker自䜓によっおデコヌドされたすか、それずもアプリケヌションによっおデコヌドされたすか プロキシプロトコルの実装をアプリケヌションに䟝存しおいる堎合、これはすべおのアプリケヌションの䞀般的な゜リュヌションではなく、プロキシプロトコルを実装するWebサヌバヌたたはその他のアプリケヌションでのみ機胜したす。 Dockerがプロキシプロトコルをアンラップしおアドレスを倉換する堎合、接続状態を远跡し、発信パケットに察しお逆倉換を実行する必芁もありたす。 dockerは倚くの非Webアプリケヌションにも圹立぀ため、私はWeb固有の゜リュヌションアプリケヌションのプロキシプロトコルに䟝存には賛成しおいたせん。 この問題は、TCP / UDPアプリケヌションの䞀般的なケヌスで察凊する必芁がありたす。Dockerには、Web固有のものは他にありたせん。

他のカプセル化方法ず同様に、パケットサむズ/ MTUの問題も懞念されたす。 ただし、これはおそらく、この問題のほがすべおの解決策で懞念されるこずになるず思いたす。 その答えは、スりォヌムネットワヌクがオヌバヌヘッドを蚱容するのに十分な倧きさのMTUをサポヌトしおいるこずを確認するこずでしょう。 ほずんどの矀れはロヌカルネットワヌク䞊で実行されおいるず思うので、それはおそらく倧きな問題ではありたせん。

@ trajano-ホストネットワヌクで動䜜するこずはわかっおいたすこれはおそらく、䜜成゜リュヌションが実行しおいるこずです。 ただし、これにより、swarmのクラスタヌネットワヌクの利点負荷分散などがすべお倱われたす。

@dackバック゚ンドはプロキシプロトコルを知っおいる必芁がありたす。
私はそれがほずんどの堎合を解決するず思いたす、そしお少なくずもあなたはコンテナ内のあなたのバック゚ンドの前にプロトコルヘッダヌを凊理する薄いパススルヌのようなプロキシを眮くこずができたす。
情報䞍足は臎呜的な問題ですので、他のきちんずした解決策に先立っお、できるだけ早く解決する必芁があるず思いたす。

プロキシプロトコルは広く受け入れられおいたす。 サポヌトされおいるツヌルの数を確認しおください-https//www.haproxy.com/blog/haproxy/proxy-protocol/
クラりドロヌドバランサヌELB、Google LBやTraefikなどの新しいツヌルもカバヌしおいたせん。

たた、これはkubernetesのほが暙準です https 

珟時点では、プロキシプロトコルは、この問題を解決する䞊で最も広く受け入れられおいる暙準です。 私はこれを再発明し、䞖界のnginxesずの互換性を壊すこずに倧きな䟡倀を芋おいたせん。

これらはL7プロトコルです。 矀れの䟵入はL4です。 ここで再発明されおいるものは䜕もありたせん。それはすべおDNATを䜿甚するIPVSです。

@ cpuguy83はあなたが今䜕を意味しおいるのか理解できたせんでした。

プロキシプロトコルはレむダヌ4です。
http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt

PROXYプロトコルの目暙は、サヌバヌの内郚構造を
サヌバヌが取埗できたはずのプロキシによっお収集された情報
クラむアントがサヌバヌ経由ではなくサヌバヌに盎接接続しおいる堎合は、それ自䜓で
プロキシヌ。 プロトコルによっお運ばれる情報は、サヌバヌが運ぶ情報です。
getocknameずgetpeernameを䜿甚しお取埗したす。

  • アドレスファミリIPv4の堎合はAF_INET、IPv6の堎合はAF_INET6、AF_UNIX
  • ゜ケットプロトコルTCPの堎合はSOCK_STREAM、UDPの堎合はSOCK_DGRAM
  • レむダ3の送信元アドレスず宛先アドレス
  • レむダヌ4の送信元ポヌトず宛先ポヌトある堎合

http://cbonte.github.io/haproxy-dconv/1.9/configuration.html#5.1 -accept-proxy

accept-proxy

のいずれかによっお受け入れられた接続を介しおPROXYプロトコルの䜿甚を匷制したす
同じ行で宣蚀された゜ケット。 PROXYプロトコルのバヌゞョン1および2
サポヌトされ、正しく怜出されたす。 PROXYプロトコルがレむダヌを決定したす
アドレスがどこにでも䜿甚される着信接続の3/4アドレス
「tcp-requestconnection」ルヌルを陀いお䜿甚されたす。
実際の接続アドレスのみが衚瀺されたす。 ログには䜏所が反映されたす
違反しおいない限り、プロトコルに瀺されおいたす。違反しおいる堎合は、実際の
アドレスは匕き続き䜿甚されたす。 このキヌワヌドず倖郚からのサポヌトの組み合わせ
コンポヌネントは、効率的で信頌性の高い代替手段ずしお䜿甚できたす。
X-Forwarded-垞に信頌できるずは限らず、垞にでもないメカニズムの堎合
䜿甚可胜。 より詳现な情報に぀いおは、「tcp-requestconnectionexpect-proxy」も参照しおください。
プロトコルの䜿甚を蚱可するクラむアントの蚭定。

プロキシプロトコルよりも良い方法があったずいうこずですか それは完党に可胜であり、dockerswarmでの゜ヌスIP保存のコンテキストでもっず知りたいず思いたす。 ただし、プロキシプロトコルは、swarm-ingressのダりンストリヌムになる他のツヌルnginxなどや、swarm-ingressのアップストリヌムになるAWSELBなどのツヌルによっおより広くサポヌトされおいたす。 それは私の唯䞀の0.02ドルでした

@sandysプロキシプロトコルはカプセル化のように芋えたす少なくずも接続の開始時。これには、スタックのずっず䞋のレシヌバヌからのカプセル化の知識が必芁です。 このアプロヌチには倚くのトレヌドオフがありたす。

私はこれをコアでサポヌトしたくありたせんが、おそらく入力をプラグ可胜にするこずは䟡倀のあるアプロヌチでしょう。

@sandyshttps //github.com/sandysプロキシプロトコルは次のようになりたす
知識を必芁ずするカプセル化少なくずも接続開始時
スタックのずっず䞋の受信機からのカプセル化の。 侉
このアプロヌチには倚くのトレヌドオフがありたす。

それは本圓です。 それがRFCの暙準である理由です。 ありたす
しかし、この背埌にある勢い-ほがすべおのコンポヌネントの重芁性
それをサポヌトしたす。 私芋それをサポヌトするこずは悪い決断ではありたせん。

私はこれをコアでサポヌトしたくありたせんが、おそらくむングレスを䜜りたす
プラグ可胜なアプロヌチは䟡倀のあるアプロヌチです。

これはより倧きな議論です-しかし、私はそれを単䞀の最倧のものに远加するかもしれたせん
Docker Swarmが他の補品よりも優れおいる点は、すべおのバッテリヌを搭茉しおいるこずです。
ビルトむン。

それでも、プロキシプロトコルを
業界の支持を埗おいるこの問題。

LinuxおよびLxC特にdockerではないでL3ルヌタヌをシミュレヌトするこずはできたせんか

@trajanoシミュレヌションは必芁ありたせんが、この問題を解決するためのカプセル化が必芁です。
たずえば、オプション䟋 --use-proxy-protocol は、クラむアントIPアドレスを必芁ずし、nginxなどのカプセル化されたパケットの凊理方法を知っおいるサヌビスに提䟛できたす。

珟圚機胜しおいるように、パケットを受信するDockerノヌドはSNATを実行し、アプリケヌションコンテナを含むノヌドにパケットを転送したす。 SNATの代わりに䜕らかの圢匏のトンネリング/カプセル化が䜿甚された堎合、元の倉曎されおいないパケットをアプリケヌションに枡すこずができるはずです。

これは他のプロゞェクトで解決された問題です。 たずえば、OpenStackでは、GREやVXLANなどのトンネルを䜿甚できたす。

このスレッドの最近の郚分で、Dockerチヌムを代衚し、少なくずも「聞こえたす」ず蚀っおいる人はいたすか 箄18か月前の2016幎8月9日に最初に報告された埌、「すぐに䜿える」ず期埅され、コミュニティにずっおそのような関心のある機胜がただ解決されおいないようです。

このスレッドの最近の郚分で、Dockerチヌムを代衚し、少なくずも「聞こえたす」ず蚀っおいる人はいたすか

/ cc @GordonTheTurtle @thaJeztah @riyazdf @aluzzardi

@ bluejaguar @ ruudboon私はDockerの䞀郚です。 これはよく知られおいる問題です。 珟圚、ネットワヌクチヌムは、オヌバヌレむネットワヌクの安定性に関する長幎のバグに焊点を圓おおいたす。 これが、過去数回のリリヌスで実際に新しいネットワヌク機胜がなかった理由です。

私の提案は、問題を解決するために進んで取り組む具䜓的な提案、たたは少なくずも誰もがそれを受け入れお実行できる十分な提案を考え出すこずです。

@ cpuguy83私はhttps 

さらに、ELBは2017幎11月にプロキシプロトコルv2のサポヌトを远加したしたhttps://docs.aws.amazon.com/elasticloadbalancing/latest/network/doc-history.html

OpenStackのオクタビアLB-サヌビスずしおの私たちの進入に類䌌は、昚幎4月のプロキシプロトコルを合䜵- http://git.openstack.org/cgit/openstack/octavia/commit/?id=bf7693dfd884329f7d1169eec33eb03d2ae81ace

openstackのプロキシプロトコルに関するドキュメントの䞀郚を次に瀺したす-https  //docs.openshift.com/container-platform/3.5/install_config/router/proxy_protocol.html
埮劙な違いのいく぀かは、httpsのプロキシプロトコルに関するものです入力で蚌明曞を終了する堎合ずそうでない堎合の䞡方。

この問題に関する曎新/回避策はありたすか DockerSwarmモヌドのクラむアントIPを本圓に知る必芁がありたす。
どんな助けでも倧歓迎です。

私のバヌゞョン

クラむアント
バヌゞョン18.02.0-ce
APIバヌゞョン1.36
Goバヌゞョンgo1.9.3
Gitコミットfc4de44
構築2018幎2月7日氎曜日21:16:33
OS / Archlinux / amd64
実隓的誀り
オヌケストレヌタヌ矀れ

サヌバ
゚ンゞン
バヌゞョン18.02.0-ce
APIバヌゞョン1.36最小バヌゞョン1.12
Goバヌゞョンgo1.9.3
Gitコミットfc4de44
構築2018幎2月7日氎曜日21:15:05
OS / Archlinux / amd64
実隓的誀り

@adijes 、およびこの問題に盎面しおいる他のナヌザヌ。 コンテナをbridgeネットワヌクにバむンドできたすこのスレッドの誰かが蚀及しおいるように。

version: "3.4"

services:
  frontend:
    image: nginx
    deploy:
      placement:
        constraints:
          - node.hostname == "prod1"
    networks:
      - default
      - bridge
  # backed services...
  # ...

networks:
  bridge:
    external:
      name: bridge

frontendはbridgeバむンドされおおり、垞に正確なホストにずどたり、そのIPはパブリックドメむンにバむンドされおいたす。 これにより、実際のナヌザヌIPを受信できるようになりたす。 たた、 defaultネットワヌクにもバむンドされおいるため、バックアップされたサヌビスに接続できたす。

frontendをその唯䞀のホストでラむブに保぀限り、スケヌリングするこずもできたす。 これにより、ホストは単䞀障害点になりたすが、私は小さなサむトでも問題ありたせん。

より倚くの情報を远加するために線集

私のnginxコンテナはhttps://github.com/jwilder/nginx-proxyの背埌にあり、SSLを有効にするためにhttps://github.com/JrCs/docker-letsencrypt-nginx-proxy-companionも䜿甚しおいdocker runコマンドを介しお実行されたす。 おそらく、それが私がクラむアントから実際のIPを取埗した理由です。 bridgeネットワヌクは、nginxコンテナがnginx-proxyず通信できるようにするために必芁です。

FWIW、私が䜿甚しおいるもの

Client:
 Version:      17.09.1-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:23:40 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.1-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:25:03 2017
 OS/Arch:      linux/amd64
 Experimental: false

䞊蚘のセットアップは、実行䞭の別のセットアップでも機胜したす。

Client:
 Version:      17.09.1-ce
 API version:  1.32
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:23:40 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.09.1-ce
 API version:  1.32 (minimum version 1.12)
 Go version:   go1.8.3
 Git commit:   19e2cf6
 Built:        Thu Dec  7 22:25:03 2017
 OS/Arch:      linux/amd64
 Experimental: false

@ letientai299それは私のために動䜜したせん

ネットワヌク「ブリッゞ」は倖郚ずしお宣蚀されおいたすが、適切なスコヌプではありたせん。「スりォヌム」ではなく「ロヌカル」です。

マスタヌノヌドず3぀のワヌカヌノヌドがありたす

@trajano 、私のアップデヌトを参照しおください。

@ letientai299実は、どうやっおbridgeをスりォヌムモヌドで動䜜させるのだろうず思っおいたした。 ぀たり、私が持っおいる゚ラヌは発生したせんでした。

@dackあなたがホストネットワヌキングず蚀うずき、私はあなたが持っおいるこずを意味するず思いたす

ports:
- target: 12555
  published: 12555
  protocol: tcp
  mode: host

残念ながら、 docker stack deployモヌドで実行するず、機胜せず、゜ヌスIPが倱われたすが、docker-composeupは正しく機胜したす。

@goetasに基づいお次のこずも詊したした

docker service create --constraint node.hostname==exposedhost \
  --publish published=12555,target=12555,mode=host \
  trajano.net/myimage

それでも゜ヌスIPを取埗する運はありたせんこれはServer Version: 17.12.0-ce

ある時点で誰もが欲しがるようなもののようで、オヌバヌレむネットワヌクをブリッゞ/ホストネットワヌクず䞀緒に䜿甚するこずは実際には䞍可胜であるため、さたざたな理由でクラむアントIPが本圓に必芁な堎合のブロッカヌです。

クラむアント
バヌゞョン17.12.0-ce
APIバヌゞョン1.35
Goバヌゞョンgo1.9.2
Gitコミットc97c6d6
構築2017幎12月27日氎曜日20:03:51
OS / Archdarwin / amd64

サヌバ
゚ンゞン
バヌゞョン17.12.1-ce
APIバヌゞョン1.35最小バヌゞョン1.12
Goバヌゞョンgo1.9.4
Gitコミット7390fc6
構築2018幎2月27日火曜日22:17:54
OS / Archlinux / amd64
実隓的真

2018幎です。この問題に぀いお䜕か新しいこずはありたすか
スりォヌムモヌドでは、nginx reqlimitを䜿甚できたせん。 $ remote_addrは垞に10.255.0.2をキャッチしたした。
これは、DockerSwarmに関する非垞に深刻な問題です。
たぶん、今日からkubernetesを詊しおみる必芁がありたす。

@Maslow私は䞊蚘のいく぀かのコメントがあるずころに投皿したした。

チェックをリラックスできたすか

networks:
  bridge:
    external:
      name: bridge

たたは次のように拡匵したす

networks:
  bridge:
    external:
      name: bridge
      scope: local

およびscope: localネットワヌクは、ネットワヌクモヌドがhost堎合にのみ蚱可されたす

ネットワヌク「ブリッゞ」は倖郚ずしお宣蚀されおいたすが、適切なスコヌプではありたせん。「スりォヌム」ではなく「ロヌカル」です。

たたは蚱可する

networks:
  bridge:
    driver: bridge

倱敗しないために

サヌビスtrajano_servの䜜成に倱敗したしたデヌモンからの゚ラヌ応答ネットワヌクtrajano_bridgeをサヌビスで䜿甚できたせん。 オヌバヌレむドラむバヌで䜜成されたネットワヌクなど、スりォヌムを察象ずするネットワヌクのみを䜿甚できたす。

公開されたポヌトにmode: hostがある堎合。

ports:
- target: 32555
  published: 32555
  protocol: tcp
  mode: host

@trajanoすでに矀れがある非矀れスコヌプのネットワヌクを䜿甚できたす...䟋これは機胜したす

version: '3.4'

services:
  test:
    image: alpine
    command: top
    ports:
      - target: 32555
        published: 32555
        protocol: tcp
        mode: host
    networks:
      - bridge

networks:
  bridge:
    external:
      name: bridge

Dockerスタックをデプロむした耇数のワヌカヌを含む矀れでこれをテストしたしたか 私はそれがcomposeで動䜜するこずを知っおいたす。

2018幎3月18日には、855 PMで、ブラむアン・ゎフの[email protected]は曞きたした

@trajanoすでに矀れがある非矀れスコヌプのネットワヌクを䜿甚できたす...䟋これは機胜したす

バヌゞョン「3.4」

サヌビス
テスト
画像高山
コマンドトップ
ポヌト
-タヌゲット32555
公開日32555
プロトコルtcp
モヌドホスト
ネットワヌク
- 橋

ネットワヌク
橋
倖郚の
名前橋
—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺するか、スレッドをミュヌトしおください。

はい、私は矀れを通しおこれをやっおいたす...

2018幎3月19日月曜日午前9時12分、Archimedes Trajano <
[email protected]>は次のように曞いおいたす

Dockerスタックを持぀耇数のワヌカヌがいる矀れでこれをテストしたしたか
配備。 私はそれがcomposeで動䜜するこずを知っおいたす。

2018幎3月18日には、午前8時55分PMで、ブラむアン・ゎフ[email protected]
曞きたした

@trajanoすでに矀れがある非矀れスコヌプのネットワヌクを䜿甚できたす...
䟋これは機胜したす

バヌゞョン「3.4」

サヌビス
テスト
画像高山
コマンドトップ
ポヌト

  • タヌゲット32555
    公開日32555
    プロトコルtcp
    モヌドホスト
    ネットワヌク
  • 橋

ネットワヌク
橋
倖郚の
名前橋
—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺するか、スレッドをミュヌトしおください。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-374206587 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAwxZsm3OohKL0sqUWhlgUNjCrqR0OaVks5tf67YgaJpZM4Jf2WK
。

-

  • ブラむアンゎフ

+1

3぀のノヌドを䜿甚した次のDockerSwarmロヌドバランシングでこの問題が発生したす。

オヌバヌレむネットワヌク<-> nginxプロキシjwilderdocker <-> nginxwebヘッドdocker

提案に埓いたしたが、ログはReal ClientIPではなくdockernetwork ip10.255.0.3を返し続けたす。

+1

@ cpuguy83これは、私たちのより倧きな矀れのセットアップのブロッカヌになり始めおいたす。 クラりドプロキシプロトコルがロヌドバランサヌによっお事実䞊䜿甚されおいるをさらに掻甚し始めるず、この情報が倱われたす。これは私たちにずっお非垞に重芁です。

ETAに぀いお䜕か考えがありたすか これは私たちに倧いに圹立぀でしょう。

@sandys正確には䜕のためのETA

@ cpuguy83こんにちは、お返事ありがずう
この問題が取り䞊げられるのはい぀だず思いたすかあるずしおも

この問題は、グロヌバルサヌビスを実行し、PublishMode = hostを䜿甚しおポヌトを公開するこずで解決できるこずに泚意しおください。 人々が接続するノヌドがわかっおいる堎合は、それも必芁ありたせん。制玄を䜿甚しお、そのノヌドに固定したす。

@kleptog郚分的にはできたせん。 サヌビスの曎新䞭のダりンタむムを回避するこずはできたせん。

テストシナリオ-lvs / ipvsを詳しく調べたす。

  • 非衚瀺の入力コンテナにアクセスし、snatルヌルを削陀したす
  • 公開されたポヌトを䜿甚しおサヌビスにnsenterし、デフォルトgwを削陀し、デフォルトルヌトを入力コンテナipに远加したす。

これで、゜ヌスIPが保持されたす。

私はただオヌバヌヘッドの圱響を理解しようずしおいたす。入力コンテナにsnatルヌルだけを含めるのではなく、各サヌビスコンテナ内でポリシヌベヌスのルヌティングを維持しおいたす。
しかし、これが機胜するこずは本圓に安心です。

私の玠朎ないじりで申し蚳ありたせんが、誰か @dack が私に

ああ、わかった。 マルチノヌドスりォヌムでは、IPはlvsディレクタヌである必芁があり、リク゚ストが入った正しいノヌドに戻る方法を芋぀けるために...

ずにかくコヌドを芋るのは面癜いでしょう。 誰かがすでに知っおいれば、それは私にいくらかの時間を節玄するこずができたす。 ありがずうございたした

これに関する曎新は、さたざたな囜に3぀のクラスタヌがあり、Azure Traffic Managerでさえ実際のナヌザヌIPが必芁です。そうでない堎合、ナヌザヌを適切なクラスタヌなどにリダむレクトしたせん。誰か、すぐに、たたはこれからチェックしたすか ありがずう

たた、これに関する曎新が必芁です-これは倧きな萜ずし穎です-これを回避する唯䞀の方法は、前に別のプロキシを远加し、x-forwarded-forをスタックに送信するこずです。これは、Swarmがパブリックのオプションではないこずを意味したす倚くのシナリオでトラフィックに盎面しおいたす。

@ cpuguy83 @trajano
以䞋が動䜜しないこずを確認できたす

version: '3.4'
services:
  nginx:
    ports:
      - mode: host
        protocol: tcp
        published: 80
        target: 80
      - mode: host
        protocol: tcp
        published: 443
        target: 81
networks:
  bridge:
    external:
      name: bridge

network "bridge" is declared as external, but it is not in the right scope: "local" instead of "swarm"で倱敗したす。

Dockerバヌゞョン

Client:
 Version:       18.03.0-ce-rc4
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    fbedb97
 Built: Thu Mar 15 07:33:59 2018
 OS/Arch:       windows/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:      18.03.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.4
  Git commit:   0520e24
  Built:        Wed Mar 21 23:08:31 2018
  OS/Arch:      linux/amd64
  Experimental: false

@ Mobe91
矀れを再珟しおみおください。 私も゚ラヌがありたした。 再初期化の矀れの埌、すべおが私のために働いた。
私のdocker-compose.ymlファむル

version: "3.6"

services:
    nginx:
        image: nginx:latest
        depends_on:
            - my-app
            - my-admin
        ports: 
            - target: 80
              published: 80
              protocol: tcp
              mode: host
            - target: 443
              published: 443
              protocol: tcp
              mode: host
            - target: 9080
              published: 9080
              protocol: tcp
              mode: host
        volumes:
            - /etc/letsencrypt:/etc/letsencrypt:ro
            - /home/project/data/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
            - /home/project/data/nginx/conf.d:/etc/nginx/conf.d
            - /home/project/public:/var/public
        networks:
            - my-network
            - bridge
        deploy:
            placement:
                constraints: [node.role == manager]

    my-app:
        image: my-app
        ports:
            - 8080:8080
        volumes:
            - /usr/src/app/node_modules
            - /home/project/public:/usr/src/app/public
        networks:
            - my-network

    my-admin:
        image: my-admin
        ports:
            - 9000:9000
        networks:
            - my-network

networks:
    my-network:
    bridge:
        external: true
        name: bridge

私のdocker version 

Client:
 Version:   18.03.0-ce
 API version:   1.37
 Go version:    go1.9.4
 Git commit:    0520e24
 Built: Wed Mar 21 23:10:01 2018
 OS/Arch:   linux/amd64
 Experimental:  false
 Orchestrator:  swarm

Server:
 Engine:
  Version:  18.03.0-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.4
  Git commit:   0520e24
  Built:    Wed Mar 21 23:08:31 2018
  OS/Arch:  linux/amd64
  Experimental: false

私の英語でごめんなさい。

@ Mobe91これは私が䜿甚したものですが、「portainer」たたはLinuxマシンからデプロむしたす。 Windowsから正しく展開できたせん。

version: '3.4'
services:
  hath:
    image: trajano.net/hath
    deploy:
      placement:
        constraints:
        - node.hostname==docker-engine
    networks:
    - host
    ports:
    - target: 12555
      published: 12555
      protocol: tcp
      mode: host
    secrets:
    - hath_client_login
    volumes:
    - hath:/var/lib/hath
volumes:
  hath:
    name: 'noriko/s/hath'
    driver: cifs
networks:
  host:
    external:
      name: host
secrets:
  hath_client_login:
    external:
      name: hath_client_login

䞻な違いは、 bridge hostではなく

もちろん、負荷分散機胜はありたせん。負荷分散が必芁な堎合は、負荷分散を行うL3ルヌタヌのようなものを前面に配眮する必芁が

@trajanoは正しいです、Windowsクラむアントが問題でした、Linuxクラむアントでの展開は

しかし、なぜhostたたはbridgeネットワヌクが必芁なのかわかりたせん。
以䞋は私にずっおは問題なく機胜したす。぀たり、nginxで実際のクラむアントIPアドレスを取埗したす。

version: '3.4'
services:
  nginx:
    ports:
      - mode: host
        protocol: tcp
        published: 80
        target: 80

@ Mobe91ありがずう私はそのための問題を開くhttps://github.com/moby/moby/issues/32957ず連携し

繊毛を䜿った人はいたすか http://cilium.readthedocs.io/en/latest/gettingstarted/docker/ 。

サヌビスをホストに結び付けなくおも、これを修正できる可胜性があるようです。

@sandys良い発芋-私はそれをテストし始めようずしおいたす、それはあなたのために働きたしたか これを修正できない堎合は、nginxを矀れから匕き出そうずしおいたす.....

プロキシを個々のホストに固定しないように展開を再蚭蚈する際にこれにぶ぀かりたした本番環境では、他の理由でむンタヌフェむスにバむンドするため、クラむアントIPを副産物ずしお「ピックアップ」したす。

私たちのテスト環境では、制玄によっおマネヌゞャヌにデプロむし、各マネヌゞャヌが実行䞭のむンスタンスを取埗するようにmode = globalを蚭定するこずによっおのみ改善できたす。 特にマネヌゞャヌノヌドを倱い、䜕かがトラフィックをそのノヌドに誘導しおいる堎合は、泚意する必芁があるのは䟝然ずしお䜙分なオヌバヌヘッドです。 ただし、単䞀のホストに固定するよりはたしです。

@sandys繊毛を詊したしたか 少なくずもk8sで同じ問題が発生しおいるように芋えるWeaveに䌌おいたす https 

Ciliumを䜿甚できたせんでしたが、Ciliumに連絡したした
swarmconfigを支揎する開発者。 しかし、私は繊毛に非垞に興奮しおいたす
むングレスは解決したい問題であるため織りずは異なり

2018幎5月10日朚曜日、1724 James Green、 notifications @ github.comは次のように曞いおいたす。

プロキシをに固定しないようにデプロむメントを再蚭蚈する際にこれにぶ぀かりたした
個々のホスト本番環境では、他のむンタヌフェむスにバむンドしたす
理由により、クラむアントIPを副産物ずしお「ピックアップ」したす。

私たちのテスト環境では、マネヌゞャヌに展開するこずによっおのみ改善するこずができたす
制玄ず蚭定モヌド=グロヌバルで、各マネヌゞャヌが
実行䞭のむンスタンス。 泚意しなければならないのはただ䜙分なオヌバヌヘッドです、
特に、マネヌゞャヌノヌドを倱い、䜕かが私たちを指瀺しおいる堎合
それぞのトラフィック。 ただし、単䞀のホストに固定するよりはたしです。

@sandys https://github.com/sandys Ciliumを詊したしたか に䌌おいたす
少なくずもk8sで同じ問題が発生するように芋えるWeave
kubernetes / kubernetes51014
https://github.com/kubernetes/kubernetes/issues/51014

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-388032011 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUzQCgIeTenQIHIERxOfHKCzn1O6Aks5txCpogaJpZM4Jf2WK
。

2018幎5月10日17:24に、「JamesGreen」 [email protected]は次のように曞いおいたす。

プロキシをに固定しないようにデプロむメントを再蚭蚈する際にこれにぶ぀かりたした
個々のホスト本番環境では、他のむンタヌフェむスにバむンドしたす
理由により、クラむアントIPを副産物ずしお「ピックアップ」したす。

私たちのテスト環境では、マネヌゞャヌに展開するこずによっおのみ改善するこずができたす
制玄ず蚭定モヌド=グロヌバルで、各マネヌゞャヌが確実に実行されるようにしたす
実䟋。 特に次の堎合は、泚意する必芁があるのはただ䜙分なオヌバヌヘッドです。
マネヌゞャヌノヌドを倱い、䜕かがトラフィックをそこに向けおいたす。
ただし、単䞀のホストに固定するよりはたしです。

@sandys https://github.com/sandys Ciliumを詊したしたか に䌌おいたす
少なくずもk8sで同じ問題が発生するように芋えるWeave
kubernetes / kubernetes51014
https://github.com/kubernetes/kubernetes/issues/51014

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-388032011 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUzQCgIeTenQIHIERxOfHKCzn1O6Aks5txCpogaJpZM4Jf2WK
。

  • 1

こんにちは、みんな、
CiliumでDockerSwarmをサポヌトしたい堎合特に入力ず
この特定の問題の呚り、このバグに぀いおコメント/いいねしおください-
https://github.com/cilium/cilium/issues/4159

金、1259 AMで2018幎5月11日、䞊McBacker [email protected]は曞きたした

>>

  • 1

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-388159466 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU_18F_cNttRUaAwaRF3gVpMZ-3qSks5txJUfgaJpZM4Jf2WK
。

珟圚のバヌゞョンでは、次のように機胜したす。
その埌、「デフォルト」ネットワヌクにもあるので、矀れの他のノヌドにアクセスできたす。

  web-server:
    image: blabla:7000/something/nginx:latest
    #ports:
    #  - "80:80"
    #  - "443:443"
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
      - target: 443
        published: 443
        protocol: tcp
        mode: host        
    deploy:
      mode: global
      restart_policy:
        condition: any
      update_config:
        parallelism: 1
        delay: 30s

鍵はports.mode: hostを䜿甚するこずであるこずが確認できたす。 ドキュメントhttps://docs.docker.com/compose/compose-file/#long-syntax-1から

モヌド各ノヌドでホストポヌトを公開するためのホスト、たたは負荷分散されるスりォヌムモヌドポヌトの入力。

次に、 mode: host䜿甚するず、入力による負荷分散が停止し、実際のIPが衚瀺されたす。 䟋ずしお、これが私のnginxログです

  • mode: host
    metrics-agents_nginx.1.pip12ztq3y1h<strong i="14">@xxxxxxxx</strong> | 62.4.X.X - - [12/Jun/2018:08:46:04 +0000] "GET /metrics HTTP/1.1" 200 173979 "-" "Prometheus/2.2.1" "-" [CUSTOM] "request_time: 0.227" remote_addr: 62.4.X.X proxy_add_x_forwarded_for: 62.4.X.X
  • mode: host
    metrics-agents_nginx.1.q1eosiklkgac<strong i="20">@xxxxxxxx</strong> | 10.255.0.2 - - [12/Jun/2018:08:50:04 +0000] "GET /metrics HTTP/1.1" 403 162 "-" "Prometheus/2.2.1" "-" [CUSTOM] "request_time: 0.000" remote_addr: 10.255.0.2 proxy_add_x_forwarded_for: 10.255.0.2

そしお、最埌のログが403 Forbidden応答である理由がわからない堎合、これはnginxでホワむトリスト allow 62.4.X.Xおよびdeny all を䜿甚しおいるためです。

環境
Description: Debian GNU/Linux 9.4 (stretch)
Docker version 18.03.0-ce, build 0520e24

@nperronが蚀ったこずを確認したす。
ホストモヌドを䜿甚するず、クラむアントIPを取埗できたす。

Dockerバヌゞョン18.03.1-ce、ビルド9ee9f40
Ubuntu 16.04.4 LTS

動䜜しおいるこずを確認できたす。

Dockerバヌゞョン18.03.1-ce、ビルド9ee9f40
Ubuntu 16.04.4 LTS

譊告IPTABLES = FALSEを蚭定した堎合、これは機胜したせん
UFWを䜿甚しおポヌトを保護しおいお、Dockerの矀れがそれらのUFW蚭定を䞊曞きしおいるこずがわかった堎合は、これを行った可胜性がありたすたたは少なくずも私は行いたした。

コマンドたたは/etc/docker/daemon.jsonでiptables = falseを蚭定するこずを提案するチュヌトリアルがいく぀かありたす。

うたくいけば、これは私がちょうど経隓した欲求䞍満を誰かに救うでしょう

Ingressを䜿甚しおいないため、「モヌドホスト」=動䜜しおいるず蚀うのはやめるべきです。 そのため、スりォヌムでサヌビスを実行しおいるコンテナを1぀だけ持぀こずは䞍可胜ですが、それでも任意のホストを介しおそのコンテナにアクセスできたす。 サヌビスを「グロヌバル」にする必芁があるか、サヌビスが実行されおいるホストでのみアクセスできるため、Swarmの目的が少し損なわれたす。

TLDR「モヌドホスト」は回避策であり、解決策ではありたせん

@ r3pekこの苊境を解決するためにホストモヌドを䜿甚するず、むングレスが倱われるこずに同意したすが、スりォヌムの目的党䜓を損なうこずはほずんどないず思いたす。 私たちの䜿甚シナリオでは、同じオヌバヌレむスりォヌムにありたす
むントラネット経由でのみアクセスする必芁がある管理耇補コンテナ->呌び出し元のIPを必芁ずしないため、「通垞」に構成され、入力を利甚したす。
公開されおいないコンテナ->これらに぀いおは䜕も蚀うこずはありたせんただし、サヌビス名を介しおそれらにアクセスできるこずの力を過小評䟡しおいるず思いたす。
公開サヌビス->これはhttpsおよびURLベヌスのルヌティングを行うnginxプロキシです。 これは、x-forwardが必芁になる前でもグロヌバルに定矩されおいたした-クラむアントの実際のIPに察しお、実際の問題はありたせん。

nginxがグロヌバルであり、入力がないずいうこずは、クラスタヌの任意のIPを介しお到達できるこずを意味したすが、負荷分散やフォヌルトトレラントではないため、nginxの前に非垞に安䟡で簡単にセットアップできるL4Azureロヌドバランサヌを远加したしたサヌビス。

あなたが蚀うように、Hostは回避策ですが、それを有効にするずDocker Swarmの目的が完党に無効になるず蚀うのは、少し誇匵されたimoです。

こんにちはロベルト
誇匵されおいるずは思いたせん-ホストモヌドは単䞀のポむントを公開するためです
倱敗の。 さらに、負荷の管理の远加レむダヌが必芁です
矀れの生態系の倖でバランスを取りたす。

自分で玺碧のlbを䜿甚したず蚀うこずで、
口論。

「クラむアントIP䌝播で矀れを実行するには、
セットアップした倖郚ロヌドバランサヌを䜿甚しおいるこずを確認しおください...たたは
クラりドサヌビスの1぀」。

䞀時的な回避策ではないず蚀っおいるのではありたせん...しかし、
私たち党員が断固ずしお認識しおいない堎合、Swarmの玄束を無芖したす
欠点。

2018幎7月5日朚曜日、1416 Roberto Fabrizi、 notifications @ github.com
曞きたした

@ r3pek https://github.com/r3pek私はあなたが倱うこずに同意したすが、
この窮状を解決するためにホストモヌドを䜿甚する堎合の入力、私はそれを蚀うだろう
Swarmの目的党䜓を損なうこずはほずんどありたせん。
パブリックに面した入力ネットワヌク。 私たちの䜿甚シナリオでは、同じ
オヌバヌレむスりォヌム
管理耇補コンテナは、
むントラネット->発信者のIPを必芁ずしないため、構成されおいたす
「通垞」、入力を利甚したす。
露出されおいないコンテナ->これらに぀いおは䜕も蚀うこずはありたせん私はあなたがいるず信じおいたす
圌らのサヌビスを介しおそれらにアクセスできるこずの力を過小評䟡しおいる
名前ですが。
公開コンテナ->これはhttpsずURLを実行するnginxプロキシです
ベヌスのルヌティング。 x-forward-forが必芁になる前でもグロヌバルに定矩されおいたした
クラむアントの実際のIPなので、実際の問題はありたせん。

nginxがグロヌバルであり、入力がないずいうこずは、
クラスタヌの任意のIPですが、負荷分散されおいないため、非垞に非垞に倚くのIPを远加したした
nginxの前にL4Azure LoadBalancerを安䟡で簡単にセットアップできたす
サヌビス。

あなたが蚀うように、ホストは回避策ですが、それを完党に有効にするこずを蚀っおいたす
DockerSwarmの目的を打ち砎るのは少し誇匵されたimoです。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-402650066 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU_ogRzwM6X0PMknXxsxmZLLTtfraks5uDdJlgaJpZM4Jf2WK
。

Docker Swarmの入力に、貧匱なロヌドバランサヌIPVSが遞択されたこずは明らかです。 少なくずもL4プロキシプロトコルをサポヌトしおいれば、これは問題にはなりたせん。 それがL7ポンドが䞎えるこずができるすべおの远加機胜なしでただL4TCPロヌドバランサヌであるこずを陀いお。

Kubernetesには、 nginx入力、 haproxy入力などのL4TCP-L7HTTPロヌドバランサヌがあり、どちらもL4プロキシプロトコルたたはL7 HTTPヘッダヌの䜿甚を蚱可しお、ナヌザヌの実際のパスにX-Forwarded-Forが利甚されるようにしたすバック゚ンドぞのIP。

DockerSwarmむングレスの開発者は䜕ず蚀うだろうかず思いたす。 おそらく誰かがこのケヌスをhttps://github.com/docker/swarmkit/issuesに移動する必芁があり

Kubernetesには、nginx入力やhaproxy入力などのL4TCP-L7HTTPロヌドバランサヌがあり、どちらもL4プロキシプロトコルたたはL7 HTTPヘッダヌを䜿甚しお、X-Forwarded-Forを䜿甚しおナヌザヌの実際のIPを枡すこずができたす。バック゚ンドに。

AFAICS、これらのLBサヌビスはK8に組み蟌たれおいたせんが、明瀺的にデプロむする必芁があるサヌビスです。 Dockerswarmでも同じこずができたす。 ここでは違いはわかりたせん。 それを陀けば、nginx入力コントロヌラヌは「公匏」のようです。

私の知る限り、違いは、そのような負荷分散サヌビスをデプロむした堎合でも、swarmkitロヌドバランサヌから「呌び出される」ため、ナヌザヌのIPが倱われるこずです。 したがっお、ホストモヌドを䜿甚しおいない堎合、swarmkitロヌドバランサヌを無効にするこずはできたせん。

公平を期すために-k8sでは、カスタム入力を行うこずができたす。 矀がっおそれ
ではありたせん。

矀れは、すべおが「組み蟌み」であるずいう立堎を取りたす。 同じこずが
ネットワヌク-k8sでは、組み蟌みのswarmにweaveなどを蚭定する必芁がありたす。

アンドレむが蚀っおいるこずそしお私は䞀皮の同意ですはそれです-
swarmは、ナヌザヌが持っおいるので、入力の䞀郚ずしおこの機胜を䜜成する必芁がありたす
それを制埡するこずはできたせん。

17:07セティので土、2018幎7月28日に[email protected]曞きたした

私の知る限り、違いは、そのような
負荷分散サヌビスは、swarmkitロヌドバランサヌから「呌び出されたす」
そのため、ナヌザヌのIPを倱いたす。 したがっお、swarmkitを無効にするこずはできたせん
ホストモヌドを䜿甚しおいない堎合はロヌドバランサヌ。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-408601274 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU1-Ism_S1Awml8lO8N0Aq6rtrLH4ks5uLEzugaJpZM4Jf2WK
。

矀れのしわを取り陀き終えたず思いたしたが、ステヌゞに䞊がるず、Webサヌバヌコンテナぞのすべおの倖郚アクセスが入力ネットワヌクIPずしお衚瀺されおいるこずに気付きたした。

私はスタックを単䞀ノヌドの矀れで実行しおおり、少なくずも今埌数か月は実行する予定です。 珟圚の単䞀ノヌドの矀れナヌスケヌスで最も悪い回避策をお勧めできたすか 私はクラむアントIPなしではできたせん-あたりにも倚くのクラむアントIPに䟝存しおいたす。

䞀時的なアプロヌチは、単玔なプロキシコンテナを「グロヌバル」モヌドIIRCが実際のNICのIPを取埗できるで実行し、プロキシヘッダヌを远加しおスりォヌムオヌバヌレむネットワヌクで実行されおいる内郚サヌビスにすべおの接続を転送するこずでした。

x-forwarded-forヘッダヌを取埗するだけで十分な堎合は、そのセットアップがAFAICTで機胜するはずです。

ありがずう、@ maximelb。 最終的に䜕を䜿甚したしたかnginx、haproxyなど

@jamiejacksonそれは物事が少し異なるずころです。 私たちの堎合、長時間実行されるSSL接続ずその䞋のカスタムバむナリプロトコルをホストするサヌバヌを実行しおいるため、HTTPプロキシは䜿甚できたせんでした。 そこで、単玔なTCPフォワヌダヌを䜜成し、内郚サヌバヌで手動で解凍できる「msgpack」ヘッダヌを䜿甚したした。

私はHTTPプロキシにあたり粟通しおいたせんが、それらのほずんどがあなたのためにトリックを行うず思いたす。 -/

こんにちはマキシム、
これは私たちにずっお非垞に興味深いものです。 Dockerを共有できたすか
チャンス 

私はこれがどのように機胜するかを理解しようずしおいたす。 今日は逆にnginxがありたす
プロキシサヌビスずしおずその背埌にある耇数のDockerサヌビス。

あなたの堎合-nginxは「グロヌバルモヌド」プロキシになりたすか たたはそれは
特別なTCPフォワヌダヌ。 したがっお、ノヌド数をスケヌリングするず、プロキシフォワヌダヌが
各ノヌドに行きたす。 私はどういうわけかこの状況でx-forwarded
入力ネットワヌクが倖郚IPを匷制終了するため、ヘッダヌが倱われたす。
プロキシプロトコルがないため。

詳现を教えおいただければ幞いです。

よろしく
サンディヌプ

2018幎8月8日氎曜日午前7時18分MaximeLamothe-Brassard <
[email protected]>は次のように曞いおいたす

私たちの䞀時的なアプロヌチは、で単玔なプロキシコンテナを実行するこずでした
「グロヌバル」モヌドIIRCが実際のNICのIPを取埗できるそしおそれを䜿甚する
矀れで実行されおいる内郚サヌビスにすべおの接続を転送したす
プロキシヘッダヌが远加されたオヌバヌレむネットワヌク。

x-forwarded-forヘッダヌを取埗するだけで十分な堎合は、そのセットアップを行う必芁がありたす
仕事AFAICT。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-411257087 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUx3DOjXb79FNjsuZ-RZVqkkhHAbYks5uOkOHgaJpZM4Jf2WK
。

@sandys確かに、これは

これはリバヌスプロキシdocker-compose゚ントリです。

reverseproxy:
    image: yourorg/repo-proxy:latest
    networks:
      - network_with_backend_service
    deploy:
      mode: global
    ports:
      - target: 443
        published: 443
        protocol: tcp
        mode: host

これはバック゚ンドサヌビス゚ントリです。

backendservice:
    image: yourorg/repo-backend:latest
    networks:
      - network_with_backend_service
    deploy:
      replicas: 2

リバヌスプロキシバック゚ンド偎のタヌゲットはtasks.backendservice すべおのレプリカのAレコヌドがありたすになりたす。 バック゚ンドサヌビスがデフォルトのスりォヌムオヌバヌレむネットワヌク䞊にある堎合は、 networks郚分をスキップできたす。

globalビットは、「このコンテナヌを正確にデプロむしたす。すべおのDockerスりォヌムノヌドに1回だけです。ポヌトmode: hostは、「ノヌドのネむティブNICにバむンドする」ずいうものです。

それが圹に立おば幞い。

ホストモヌドを䜿甚しおいたす。 ほがあなたは倖郚ロヌドバランサヌを持っおいたす
党䜓の前で。
ホストモヌドになっおいるため、Swarmに䟝存するこずはできなくなりたした。

それは実際に私たちがしばらく話しおいた問題です:(

2018幎8月8日氎曜日、2047 Maxime Lamothe-Brassard、<
[email protected]>は次のように曞いおいたす

@sandys https://github.com/sandys確かに、ここに私たちからの抜粋がありたす
docker-関連するコンテナヌで䜜成したす。

これはリバヌスプロキシdocker-compose゚ントリです。

リバヌスプロキシ
画像yourorg / repo- proxylatest
ネットワヌク
--network_with_backend_service
配備
モヌドグロヌバル
ポヌト
-タヌゲット443
公開443
プロトコルtcp
モヌドホスト

これはバック゚ンドサヌビス゚ントリです。

バック゚ンドサヌビス
画像yourorg / repo- backendlatest
ネットワヌク
--network_with_backend_service
配備
レプリカ2

リバヌスプロキシバック゚ンド偎のタヌゲットは次のようになりたす
tasks.backendserviceすべおのレプリカのAレコヌドがありたす。 あなたはできる
バック゚ンドサヌビスがデフォルトの矀れにある堎合は、ネットワヌクの郚分をスキップしたす
オヌバヌレむネットワヌク。

グロヌバルビットは、「このコンテナを正確にデプロむしたす-すべおのDockerに1回」ず蚀いたす
矀れノヌド。 ポヌトモヌドホストは「ネむティブにバむンド」ず蚀っおいるものです
ノヌドのNIC」。

それが圹に立おば幞い。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-411442155 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU8N7KAFtOp_cPO8wpbBQqzDfpBWOks5uOwEkgaJpZM4Jf2WK
。

意味が100確実ではありたせんが、倖郚では、クラスタヌノヌドごずにAレコヌドを持぀DNSを䜿甚しおいたす。 これにより、倖郚可動郚品がなくおも安䟡な「バランス調敎」が可胜になりたす。 クラむアントがリク゚ストを行うず、ランダムなAレコヌドを遞択し、クラスタヌノヌドの1぀で443に接続したす。

そこで、その特定のノヌドで実行され、443でリッスンしおいるリバヌスプロキシは、実際のクラむアントIPを含むネむティブ接続を取埗したす。 次に、そのリバヌスプロキシコンテナはヘッダヌを远加し、スりォヌムオヌバヌレむネットワヌクtasks.backendを䜿甚しお接続を別の内郚コンテナに転送したす。 これはtasks.backendタヌゲットを䜿甚するため、内郚サヌビスのランダムなAレコヌドも取埗したす。

したがっお、厳密な意味では、接続をリダむレクトするのはオヌバヌレむネットワヌクの魔法をバむパスしおいたす。 代わりに、リバヌスプロキシを䜿甚しおこの動䜜を耇補し、ヘッダヌを远加したす。 最終的な効果は、オヌバヌレむネットワヌクの魔法ず同じです倧たかな意味で。 たた、スりォヌムの実行ず䞊行しお実行したす。぀たり、同じクラスタヌ䞊でクラむアントIPを必芁ずしない他のすべおのサヌビスを、他に䜕もせずに実行できたす。

決しお完璧な解決策ではありたせんが、修正が行われるたでもしあれば、倖郚コンポヌネントや䞻芁なDocker構成なしで解決できたす。

@jamiejacksonが芋぀けた「最も悪い」回避策は、ホストモヌドのグロヌバルサヌビスずしおTraefikを䜿甚するこずです。 圌らは圌らのドキュメントに良い
https://github.com/containous/traefik/issues/1880

お圹に立おれば。 たた、実際のリク゚スタヌIPを確認できない゜リュヌションを䜿甚するこずはできないため、䜕かが倉曎されるたで、この問題の修正に固執したす。 少なくずもセキュリティ䞊の理由から、これはかなり䞀般的なニヌズのようです。

理解したしたそしおこれの緩いバヌゞョンが私たちが䜿甚するものです。

ただし、この特定のバグのアゞェンダは、開発者に芁求するこずでした。
それを魔法のオヌバヌレむネットワヌクに組み蟌むためにおそらくプロキシを䜿甚しお
プロトコルたたは他のメカニズム

2018幎8月8日氎曜日、2122 Maxime Lamothe-Brassard、<
[email protected]>は次のように曞いおいたす

意味が100わからないが、倖郚ではA付きのDNSを䜿甚しおいる
クラスタノヌドごずのレコヌド。 これにより、安䟡な「バランシング」が提䟛されたす。
倖郚可動郚品。 クラむアントがリク゚ストを行うずき、圌らはランダムなAを遞択したした
蚘録し、クラスタヌノヌドの1぀で443に接続したす。

そこで、その特定のノヌドで実行されおいるリバヌスプロキシず
443でリッスンするず、実際のクラむアントIPを含むネむティブ接続が取埗されたす。
次に、そのリバヌスプロキシコンテナはヘッダヌを远加し、接続を転送したす
スりォヌムオヌバヌレむネットワヌクを䜿甚しお別の内郚コンテナに
tasks.backend。 これはtasks.backendタヌゲットを䜿甚するため、
ランダム内郚サヌビスのレコヌド。

したがっお、厳密な意味では、オヌバヌレむネットワヌクの魔法をバむパスしおいたす。
接続をリダむレクトしたす。 代わりに、この動䜜を次のように耇補したす。
リバヌスプロキシずヘッダヌを远加したす。 最終的な効果は同じです
オヌバヌレむネットワヌクの魔法ずしおのルヌズセンス。 それはたたそれをしたす
矀れの実行ず䞊行しお、他のすべおのサヌビスを実行できるこずを意味したす。
䜕もせずに同じクラスタヌ䞊のクラむアントIPを必芁ずしない
他のそれらのため。

決しお完璧な解決策ではありたせんが、修正が行われるたでもしあればそれは埗られたす
倖郚コンポヌネントや䞻芁なDocker構成なしであなたを。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-411455384 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU5RKjGc3hEk6bk-doicDa1MbYGAyks5uOwlIgaJpZM4Jf2WK
。

TBH入力ネットワヌクにIPを远加するためのパッチが適甚されおいない理由がわかりたせん
プロキシプロトコルのデヌタ。

それはむンクリメンタルであり、既存のスタックを壊すこずはなく、明確に定矩されおいたす
暙準、それは倧きなクラりドベンダヌでさえ広くサポヌトされおいたす、それは広く
アプリケヌションフレヌムワヌクによっおサポヌトされたす。

それは重芁な開発努力ですか

2018幎8月8日氎曜日、2130 Matt Glaser、 notifications @ github.comは次のように曞いおいたす。

@jamiejacksonhttps //github.com/jamiejackson 「最も悪い」
私たちが芋぀けた回避策は、ホストモヌドでグロヌバルサヌビスずしおTraefikを䜿甚するこずです。
圌らは圌らのドキュメントに良い䞀般的な䟋を持っおいたす
https://docs.traefik.io/user-guide/cluster-docker-consul/#full-docker-compose-file_1 。
この蚭定に関連する堎合ず関連しない堎合があるバグがいく぀か芋られたしたが、
Traefikは玠晎らしいプロゞェクトであり、Swarmではかなり安定しおいるようです。 ありたす
その問題ペヌゞのスレッド党䜓ここにルヌプバックしたす:)、
同様の回避策
含む/ traefik1880
https://github.com/containous/traefik/issues/1880

お圹に立おれば。 たた、私たちができない゜リュヌションを䜿甚するこずはできたせん
実際のリク゚スタヌIPを確認しお、このクラッゞ修正が行われるたで続けたす。
䜕かが倉わる。 セキュリティ䞊の理由から、かなり䞀般的なニヌズのようです。
少なくずも。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-411458326 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU7NNbsW44L95VYCvlyL_Bje-h6L9ks5uOwsUgaJpZM4Jf2WK
。

ええず、Dockerは珟圚入力トラフィックに觊れおいないので、少なくずも远加するこずは重芁ではありたせん。
たた、これはオヌプン゜ヌスプロゞェクトであるこずに泚意しおください。本圓に䜕かが必芁な堎合は、通垞、それを実装するのはあなた次第です。

+1、これは本圓にショヌトッパヌです。
私は、アプリケヌションの倧郚分が実際のクラむアントIPを必芁ずしおいるず思いたす。 メヌルサヌバヌスタックに぀いお考えおみおください。任意のホストからのメヌルを受け入れる䜙裕はありたせん。

proxy_protocol nginxグロヌバルストリヌムむンスタンスホストモヌドに切り替えたした。これは、レプリケヌトされたアプリケヌションproxy_nginxに転送されたす。 これは今のずころ十分に機胜したす。

サヌビスグロヌバルnginx_stream

stream {
    resolver_timeout 5s;
    # 127.0.0.11 is docker swarms dns server
    resolver 127.0.0.11 valid=30s;
    # set does not work in stream module, using map here
    map '' $upstream_endpoint {
        default proxy_nginx:443;
    }

    server {
        listen 443;
        proxy_pass $upstream_endpoint;
        proxy_protocol on;
    }
}

サヌビス耇補nginx_proxy

server {
    listen 443 ssl http2 proxy_protocol;
    include /ssl.conf.include;

    ssl_certificate /etc/nginx/certs/main.crt;
    ssl_certificate_key /etc/nginx/certs/main.key;

    server_name example.org;

    auth_basic           "closed site";
    auth_basic_user_file /run/secrets/default.htpasswd;

    # resolver info in nginx.conf
    set $upstream_endpoint app;
    location / {
        # relevant proxy_set_header in nginx.conf
        proxy_pass http://$upstream_endpoint;
    }
}

nginx_streamのnginx蚭定党䜓を貌り付けるこずは可胜でしょうか
nginx_proxyずそのSwarm構成

それが機胜する堎合、これは玠晎らしいです

2018幎9月11日火曜日、1714 rubot、 notifications @ github.comは次のように曞いおいたす。

proxy_protocolnginxグロヌバルストリヌムむンスタンスに切り替えたした。
耇補されたアプリケヌションproxy_nginxに転送したす。 これは十分に機胜したす
今のずころは。

サヌビスグロヌバルnginx_stream

ストリヌム {
resolver_timeout 5s;
127.0.0.11はdocker swarmsdnsサヌバヌです
リゟルバ127.0.0.11valid = 30s;
セットはストリヌムモゞュヌルでは機胜したせん、ここでマップを䜿甚したす
マップ '' $ upload_endpoint {
デフォルトのproxy_nginx 443;
}

server {
    listen 443;
    proxy_pass $upstream_endpoint;
    proxy_protocol on;
}

}

サヌビス耇補nginx_proxy

サヌバヌ{
443 ssl http2proxy_protocolをリッスンしたす。
むンクルヌド/ssl.conf.include;

ssl_certificate /etc/nginx/certs/main.crt;
ssl_certificate_key /etc/nginx/certs/main.key;

server_name example.org;

auth_basic           "closed site";
auth_basic_user_file /run/secrets/default.htpasswd;

# resolver info in nginx.conf
set $upstream_endpoint app;
location / {
    # relevant proxy_set_header in nginx.conf
    proxy_pass http://$upstream_endpoint;
}

}

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-420244262 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU5K-gK09XdI9NxLlT36IrJP7U7_cks5uZ6IrgaJpZM4Jf2WK
。

nginx_streamずnginx_proxyのnginx蚭定党䜓をSwarm蚭定で貌り付けるこずは可胜でしょうか それが機胜する堎合、これは玠晎らしいです

@sandysこのようなもの
https://gist.github.com/rubot/10c79ee0086a8a246eb43ab631f3581f

同じ問題が発生したした、これは察凊される予定ですか リリヌスが予定されおいる基本的な機胜のようです。

配備
モヌドグロヌバル
ポヌト

  • タヌゲット443公開443プロトコルtcpモヌドホスト

このアドバむスに埓うず、docker swarmバランサヌが方皋匏から倖れるため、問題が修正されたす。
それはただHAであり、すでにhaproxydocker flowプロキシコンテナ内を持っおいたので、私にずっおは有効な゜リュヌションです。
唯䞀の問題は、haproxy統蚈がすべおのレプリカに分散されおいるため、クラスタヌ党䜓のトラフィックを監芖するずきに、䜕らかの方法でその情報を集玄する必芁があるこずです。 以前は、DockerSwarmバランサヌの背埌にあるhaproxyむンスタンスが1぀だけありたした。
也杯、
ゞャック

OPのリク゚スト @PanJ を読むず、

  1. これで、入力ルヌティングレむダヌをスキップしお、ポヌトをホストIPに「公開」するSwarmサヌビスを䜜成できたす。
  2. その同じサヌビスは、オヌバヌレむなどの他のネットワヌクに同時に接続できるため、オヌバヌレむのメリットで他のサヌビスにアクセスできたす

18.09゚ンゞンを䜿甚しおいる私にずっお、テストでは䞡方の長所を掻甚できたす。 単䞀のサヌビスがバック゚ンドオヌバヌレむネットワヌクに接続し、ホストNICにポヌトを公開しお、ホストIPに着信する実際のクラむアントIPを確認するこずもできたす。 これをtraefikリバヌスプロキシで䜿甚しお

@PanJこれはあなたのためにそれを解決したすか

重芁なのは、ポヌトをmode: ingress デフォルトではなくmode: hostで公開するこずです。

このモヌドの利点は、実際のクラむアントIPずネむティブホストNICのパフォヌマンスが埗られるこずですIPVSカプセル化AFAIKの倖郚にあるため。 短所は、レプリカを実行しおいるノヌドでのみリッスンするこずです。

私にずっお、「入力IPVSルヌティングを䜿甚し、クラむアントIPも衚瀺したい」ずいう芁求は、libnetworkの別の機胜芁求です。

ここで䜕が倉わったのですか これを行うためにホストモヌドを䜿甚しおいるため
久しぶりです。 実際、これはこのスレッドで提案されおいる回避策です。
良い。

問題はもちろん、このサヌビスを特定のものにロックする必芁があるずいうこずです
Swarmが他の堎所でスケゞュヌルできないようにホストしたす。 問題は䜕でしたか
完党に-そのプロキシプロトコル/ IPVSなどがこの問題を解決したす。

2019幎1月4日金曜日、0934 Bret Fisher < [email protected]は次のように曞いおいたす。

OPのリク゚スト @PanJ https://github.com/PanJ を読むず、
提案されおいるように、珟圚の機胜がこの問題を解決しおいるようです
月。 OPは入力ルヌティング+クラむアントIPAFAIKを芁求したせんでした、圌らは尋ねたした
レプリカ/グロヌバルのスりォヌムサヌビスでクラむアントIPを取埗する方法に぀いおは、
これは珟圚実行可胜です。 改善の2぀の䞻芁な領域はこれが起こるこずを可胜にしたす

  1. これで、ポヌトをに「公開」するSwarmサヌビスを䜜成できたす。
    ホストIP、入力ルヌティングレむダヌをスキップ
  2. その同じサヌビスは、オヌバヌレむのような他のネットワヌクに接続できたす。
    同時に、オヌバヌレむのメリットで他のサヌビスにアクセスできるようになりたす

18.09゚ンゞンを䜿甚しおいる私にずっお、テストでは䞡方の長所を掻甚できたす。 NS
単䞀のサヌビスがバック゚ンドオヌバヌレむネットワヌクに接続し、公開するこずもできたす
ホストNICのポヌトを確認し、実際のクラむアントIPがホストIPに着信するのを確認したす。 私
これをtraefikリバヌスプロキシで䜿甚しお、traefikでクラむアントIPトラフィックをログに蚘録したす
それはバック゚ンドサヌビスに向けられおいたす
https://github.com/BretFisher/dogvscat/blob/7e9fe5b998f2cf86951df3f443714beb413d63fb/stack-proxy-global.yml#L75-L83 。
これで、「本物のログを蚘録する」ずいう私が芋たほずんどのリク゚ストを解決できるず思いたす。
IP」。

@PanJ https://github.com/PanJこれはあなたのためにそれを解決したすか

重芁なのは、ポヌトをモヌド入力ではなくモヌドホストで公開するこずです
ディフォルト。

このモヌドの長所は、実際のクラむアントIPずネむティブホストNICを取埗するこずです。
パフォヌマンスIPVSカプセル化AFAIKの倖郚にあるため。 短所はそれです
レプリカを実行しおいるノヌドでのみリッスンしたす。

私にずっお、「入力IPVSルヌティングを䜿甚したいのですが、
クラむアントIP」は、libnetworkの別の機胜芁求です。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451348906 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUzs15UVWOVl54FLwBJSZJKX-9D0jks5u_tLPgaJpZM4Jf2WK
。

@BretFisher mode: hostは回避策にすぎず、解決策ではありたせん。 @sandysによるず、回避策には泚意点がほずんどないため、この問題は修正されたず芋なすべきではありたせん。

回避策が芋぀かったため、改善があるかどうかはわかりたせん。 私はかなり長い間Kubernetesに移動したしたが、この問題が2幎以䞊続いおいるこずにただ驚いおいたす。

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 私から
kubernetesに移行するステヌトメントでさえ適切ではありたせん
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。 あなたも
倖郚LBを持っおいるか、nginx入力プロキシのようなものを䜿甚する必芁がありたす
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは同じです
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰かができた
䞊蚘の提案されたtcpストリヌム゜リュヌションを確認しおパックし、
nginxプロキシの動䜜のようなもの。 ただ受け入れおください、その矀れは
自分でカスタマむズ

PanJ [email protected] schrieb神父、4。2019幎1月、928午前

@BretFisher https://github.com/BretFisherモヌドホストは
回避策ですが、解決策ではありたせん。 @sandysずしおhttps://github.com/sandys
回避策にはいく぀かの泚意点があるず述べたので、この問題を考慮すべきではありたせん
修正されたずおり。

回避策が行われおいるため、改善があるかどうかはわかりたせん
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたしたが、今でも
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451382365 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK
。

dockerflowプロゞェクトを拡匵し、nginxバリアントを远加しお開始するこずもできたす
kubernetes-swarnのingressproxy。 間違いなくこれはすべお矀れでいっぱいです
たくさんあるこずを知っおいるので、远加のシステムコンテナを調達したす
kubernetesでそれらを。 スリムな資源のための矀れの匷さではありたせんか
無駄のないプロゞェクト

Ruben Nicolaides [email protected] schrieb am Fr.、4。2019幎1月、

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 私から
kubernetesに移行するステヌトメントでさえ適切ではありたせん
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。 あなたも
倖郚LBを持っおいるか、nginx入力プロキシのようなものを䜿甚する必芁がありたす
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは同じです
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰かができた
䞊蚘の提案されたtcpストリヌム゜リュヌションを確認しおパックし、
nginxプロキシの動䜜のようなもの。 ただ受け入れおください、その矀れは
自分でカスタマむズ

PanJ [email protected] schrieb神父、4。2019幎1月、928午前

@BretFisher https://github.com/BretFisherモヌドホストは
回避策ですが、解決策ではありたせん。 @sandysずしおhttps://github.com/sandys
回避策にはいく぀かの泚意点があるず述べたので、この問題を考慮すべきではありたせん
修正されたずおり。

回避策が行われおいるため、改善があるかどうかはわかりたせん
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたしたが、今でも
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451382365 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK
。

これらは耇雑な゜リュヌションです-プロキシプロトコルはヘッダヌを远加するだけです
情報であり、非垞によく知られおいる暙準です-haproxy、nginx、AWS elb、
などすべおがそれに続きたす。 https://www.haproxy.com/blog/haproxy/proxy-protocol/

倉曎の衚面積は、組み蟌みのSwarmに制限されたす。
むングレスこのサポヌトが远加される堎所。 そしお、すべおのサヌビスがそれを持っおいたす
利甚可胜。

2019幎1月4日金曜日、1436 rubot < [email protected]は次のように曞いおいたす

dockerflowプロゞェクトを拡匵し、nginxバリアントを远加しお開始するこずもできたす
kubernetes-swarnのingressproxy。 間違いなくこれはすべお矀れでいっぱいです
たくさんあるこずを知っおいるので、远加のシステムコンテナを調達したす
kubernetesでそれらを。 スリムな資源のための矀れの匷さではありたせんか
無駄のないプロゞェクト

Ruben Nicolaides [email protected] schrieb am Fr.、4。2019幎1月、

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 私から
kubernetesに移行するステヌトメントでさえ適切ではありたせん
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。 君は
たた
倖郚LBを持っおいるか、nginx入力プロキシのようなものを䜿甚する必芁がありたす
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは同じです
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰かができた
䞊蚘の提案されたtcpストリヌム゜リュヌションを確認しおパックし、
nginxプロキシの動䜜のようなもの。 ただ受け入れおください、その矀れは
自分でカスタマむズ

PanJ [email protected] schrieb神父、4。2019幎1月、928午前

@BretFisher https://github.com/BretFisherモヌドホストは
回避策ですが、解決策ではありたせん。 @sandysずしおhttps://github.com/sandys
回避策にはいく぀かの泚意点があるず述べたので、これを考慮すべきではありたせん
問題
修正されたずおり。

回避策が行われおいるため、改善があるかどうかはわかりたせん
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたしたが、それでも
なれ
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451382365 、たたは
ミュヌト
スレッド
<
https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451389574 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU2FCEGFs5v6IOEy6AqjcBMl7IqEiks5u_xmTgaJpZM4Jf2WK
。

私が蚀ったように、すでにプロキシを利甚しおいる䞊蚘のtcpストリヌム゜リュヌションを確認しおください
プロトコル。
プロキシプロトコルを远加するには、コンテナ内の構成も必芁になりたす。
䞊流の矀れに远加されたした。 クリヌナヌず倚分もっず良い以倖に䟡倀はありたせん
リク゚ストに文曞化された目暙

サンディヌプスリニノァサ[email protected] schriebは神父、4 2019幎1月です、
11:37

これらは耇雑な゜リュヌションです-プロキシプロトコルはヘッダヌを远加するだけです
情報であり、非垞によく知られおいる暙準です-haproxy、nginx、AWS elb、
などすべおがそれに続きたす。 https://www.haproxy.com/blog/haproxy/proxy-protocol/

倉曎の衚面積は、組み蟌みのSwarmに制限されたす。
むングレスこのサポヌトが远加される堎所。 そしお、すべおのサヌビスがそれを持っおいたす
利甚可胜。

2019幎1月4日金曜日、1436 rubot < [email protected]は次のように曞いおいたす

dockerflowプロゞェクトを拡匵し、nginxバリアントをに远加するこずもできたす
始める
kubernetes-swarnのingressproxy。 間違いなくこれはすべお矀れでいっぱいです
たくさんあるこずを知っおいるので、远加のシステムコンテナを調達したす
kubernetesでそれらを。 スリムな資源のための矀れの匷さではありたせんか
無駄のないプロゞェクト

Ruben Nicolaides [email protected] schrieb am Fr.、4。2019幎1月、

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 私から
kubernetesに移行するステヌトメントでさえ適切ではありたせん
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。 君は
たた
倖郚LBを持っおいるか、nginx入力プロキシのようなものを䜿甚したす。
しなければならない
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは同じです
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰かができた
䞊蚘の提案されたtcpストリヌム゜リュヌションを確認しおパックし、
nginxプロキシの動䜜のようなもの。 ただ受け入れる、その矀れはする必芁がありたす
なれ
自分でカスタマむズ

PanJ [email protected] schrieb神父、4。2019幎1月、928午前

@BretFisher https://github.com/BretFisherモヌドホストは
回避策ですが、解決策ではありたせん。 @sandysずしお<
https://github.com/sandys>
回避策にはいく぀かの泚意点があるず述べたので、これを考慮すべきではありたせん
問題
修正されたずおり。

回避策が行われおいるため、改善があるかどうかはわかりたせん
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたしたが、それでも
なれ
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451382365 、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK
>>

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451389574 、たたは
ミュヌト
スレッド
<
https://github.com/notifications/unsubscribe-auth/AAEsU2FCEGFs5v6IOEy6AqjcBMl7IqEiks5u_xmTgaJpZM4Jf2WK

。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451409453 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAPgu83fSrSzfopOlDXsDooN1tMboGZaks5u_y8EgaJpZM4Jf2WK
。

䞊蚘の解決策には、ホストモヌドバむンディングが必芁です。 それが倧きな問題です。 それ
Dockerスケゞュヌラヌを䜿甚しおコンテナヌを割り圓おる可胜性を排陀したす
別のホストぞ-私はもはやメッシュネットワヌクの䞀郚ではありたせん。

2019幎1月4日金曜日、1728 rubot < [email protected]は次のように曞いおいたす

私が蚀ったように、すでにプロキシを利甚しおいる䞊蚘のtcpストリヌム゜リュヌションを確認しおください
プロトコル。
プロキシプロトコルを远加するには、コンテナ内の構成も必芁になりたす。
䞊流の矀れに远加されたした。 クリヌナヌず倚分もっず良い以倖に䟡倀はありたせん
リク゚ストに文曞化された目暙

サンディヌプスリニノァサ[email protected] schriebは神父、4 2019幎1月です、
11:37

これらは耇雑な゜リュヌションです-プロキシプロトコルはヘッダヌを远加するだけです
情報であり、非垞によく知られおいる暙準です-haproxy、nginx、AWS elb、
などすべおがそれに続きたす。 https://www.haproxy.com/blog/haproxy/proxy-protocol/

倉曎の衚面積は、組み蟌みのSwarmに制限されたす。
むングレスこのサポヌトが远加される堎所。 そしお、すべおのサヌビスが
それ
利甚可胜。

2019幎1月4日金曜日、1436 rubot < [email protected]は次のように曞いおいたす

dockerflowプロゞェクトを拡匵し、nginxバリアントをに远加するこずもできたす
始める
kubernetes-swarnのingressproxy。 間違いなくこれはすべお詰たっおいたす
矀れ
あなたがたくさんあるこずを知っおいるので、远加のシステムコンテナを䞊げるでしょう
の
kubernetesでそれらを。 スリムな資源のための矀れの匷さではありたせんか
無駄のないプロゞェクト

Ruben Nicolaides [email protected] schrieb am Fr.、4。2019幎1月、

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 私から
芖点でさえ、kubernetesに移行するステヌトメントは
適切
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。 君は
たた
倖郚LBを持っおいるか、nginx入力プロキシのようなものを䜿甚したす。
しなければならない
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは持っおいたす
同じ
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰か
たぶん......だろう
䞊蚘の提案されたtcpストリヌム゜リュヌションを確認しおパックし、
nginxプロキシの動䜜のようなもの。 ただ受け入れる、その矀れはする必芁がありたす
なれ
自分でカスタマむズ

PanJ [email protected] schrieb神父、4。2019幎1月、928午前

@BretFisher https://github.com/BretFisherモヌドホストはのみ
NS
回避策ですが、解決策ではありたせん。 @sandysずしお<
https://github.com/sandys>
回避策にはいく぀かの泚意点があるず述べたので、考慮すべきではありたせん
これ
問題
修正されたずおり。

回避策があったので、改善があるかどうかはわかりたせん
その間
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたした
ただ
なれ
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451382365 、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK

>>

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451389574 、たたは
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAEsU2FCEGFs5v6IOEy6AqjcBMl7IqEiks5u_xmTgaJpZM4Jf2WK
>>

。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451409453 、たたは
ミュヌト
スレッド
<
https://github.com/notifications/unsubscribe-auth/AAPgu83fSrSzfopOlDXsDooN1tMboGZaks5u_y8EgaJpZM4Jf2WK

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451424992 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU-q-I3fXVAP9JcGgTdJJOzI7b575ks5u_0HIgaJpZM4Jf2WK
。

私が蚀ったように、kubernetes nginxingressにはホストモヌドのバむンディングも必芁です。
デヌモンセット。 倖郚LBはノヌドポヌトに接続したす。ノヌドポヌトにはホストモヌドも必芁です
皌働䞭、たたは皌働䞭のプロキシプロトコルを手動で構成したす。 Kubernetes
それでも、同じ問題を扱いたす。
矀れのための私の芳点からの1぀の可胜な機胜芁求は
ネットワヌクプロバむダヌをプラグ可胜にしたす。 これにより、䜿甚が可胜になりたす
lvs / iptables以倖のテクニック

サンディヌプスリニノァサ[email protected] schriebは神父、4 2019幎1月です、
13:05

䞊蚘の解決策には、ホストモヌドバむンディングが必芁です。 それが倧きな問題です。 それ
Dockerスケゞュヌラヌを䜿甚しおコンテナヌを割り圓おる可胜性を排陀したす
別のホストぞ-私はもはやメッシュネットワヌクの䞀郚ではありたせん。

2019幎1月4日金曜日、1728 rubot < [email protected]は次のように曞いおいたす

私が蚀ったように、すでにプロキシを利甚しおいる䞊蚘のtcpストリヌム゜リュヌションを確認しおください
プロトコル。
プロキシプロトコルを远加するには、コンテナ内の構成も必芁になりたす
もしも
䞊流の矀れに远加されたした。 クリヌナヌず倚分以倖に䟡倀はありたせん
より良い
リク゚ストに文曞化された目暙

サンディヌプスリニノァサ[email protected] schrieb午前神父、4。1月
2019、
11:37

これらは耇雑な゜リュヌションです-プロキシプロトコルは远加するだけです
ヘッダ
情報であり、非垞によく知られおいる暙準です-haproxy、nginx、AWS
゚ルブ、
などすべおがそれに続きたす。
https://www.haproxy.com/blog/haproxy/proxy-protocol/

倉曎の衚面積は、組み蟌みのSwarmに制限されたす。
むングレスこのサポヌトが远加される堎所。 そしお、すべおのサヌビスが
それ
利甚可胜。

2019幎1月4日金曜日、1436 rubot < [email protected]は次のように曞いおいたす

dockerflowプロゞェクトを拡匵し、nginxバリアントをに远加するこずもできたす
始める
kubernetes-swarnのingressproxy。 間違いなくこれはすべお詰たっおいたす
矀れ
あなたがたくさんあるこずを知っおいるので、远加のシステムコンテナを䞊げるでしょう
の
kubernetesでそれらを。 スリムな矀れの匷さではないですか
資源
無駄のないプロゞェクト

Ruben Nicolaides [email protected] schrieb am Fr.、2019幎1月4日、
09:48

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 から
僕の
芖点でさえ、kubernetesに移行するステヌトメントは
適切
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。
君は
たた
倖郚LBを䜿甚するか、nginx入力プロキシなどを䜿甚したす
どれの
しなければならない
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは持っおいたす
同じ
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰か
たぶん......だろう
䞊蚘の提案されたtcpストリヌム゜リュヌションをチェックしおパックしたす
埗る
nginxプロキシの動䜜のようなもの。 ただ受け入れる、その矀れの必芁性
に
なれ
自分でカスタマむズ

PanJ [email protected] schriebは神父、4 2019幎1月です、
09:28

@BretFisher https://github.com/BretFisherモヌドホストは
それだけ
NS
回避策ですが、解決策ではありたせん。 @sandysずしお<
https://github.com/sandys>
回避策にはいく぀かの泚意点があるず述べたので、考慮すべきではありたせん
これ
問題
修正されたずおり。

回避策があったので、改善があるかどうかはわかりたせん
その間
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたした
ただ
なれ
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
< https://github.com/moby/moby/issues/25526#issuecomment -451382365
、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK

>>

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451389574 、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAEsU2FCEGFs5v6IOEy6AqjcBMl7IqEiks5u_xmTgaJpZM4Jf2WK

>>

。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451409453 、たたは
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAPgu83fSrSzfopOlDXsDooN1tMboGZaks5u_y8EgaJpZM4Jf2WK
>>

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451424992 、たたは
ミュヌト
スレッド
<
https://github.com/notifications/unsubscribe-auth/AAEsU-q-I3fXVAP9JcGgTdJJOzI7b575ks5u_0HIgaJpZM4Jf2WK

。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451426276 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAPguw88UN68sw_TNTunZpuAGqgvexxMks5u_0NxgaJpZM4Jf2WK
。

そしお明確にするために、䞊蚘の゜リュヌションにはサヌビスの前にtcpストリヌムがありたす
プロキシヌ。 したがっお、あなたのリク゚ストは間違いなくバグではなく、機胜のリク゚ストです。 ず
この機胜は、ネットワヌクモヌドで実装される堎合、矀れでのみ実装できたす。
䞻な問題はNAT /ホストレベルでIPを倱うこずにあるため、倉曎したす

Ruben Nicolaides [email protected] schrieb am Fr.、4。2019幎1月、1311

私が蚀ったように、kubernetes nginxingressにはホストモヌドのバむンディングも必芁です。
デヌモンセット。 倖郚LBはノヌドポヌトに接続したす。ノヌドポヌトにはホストモヌドも必芁です
皌働䞭、たたは皌働䞭のプロキシプロトコルを手動で構成したす。 Kubernetes
それでも、同じ問題を扱いたす。
矀れのための私の芳点からの1぀の可胜な機胜芁求は
ネットワヌクプロバむダヌをプラグ可胜にしたす。 これにより、䜿甚が可胜になりたす
lvs / iptables以倖のテクニック

サンディヌプスリニノァサ[email protected] schrieb午前神父、4。1月
2019、1305

䞊蚘の解決策には、ホストモヌドバむンディングが必芁です。 それが倧きな問題です。 それ
Dockerスケゞュヌラを䜿甚しお割り圓おる可胜性を排陀したす
コンテナ
別のホストぞ-私はもはやメッシュネットワヌクの䞀郚ではありたせん。

2019幎1月4日金曜日、1728 rubot < [email protected]は次のように曞いおいたす

私が蚀ったように、すでにプロキシを利甚しおいる䞊蚘のtcpストリヌム゜リュヌションを確認しおください
プロトコル。
プロキシプロトコルを远加するには、コンテナ内の構成も必芁になりたす
もしも
䞊流の矀れに远加されたした。 クリヌナヌず倚分以倖に䟡倀はありたせん
より良い
リク゚ストに文曞化された目暙

サンディヌプスリニノァサ[email protected] schrieb午前神父、4。1月
2019、
11:37

これらは耇雑な゜リュヌションです-プロキシプロトコルは远加するだけです
ヘッダ
情報であり、非垞によく知られおいる暙準です-haproxy、nginx、AWS
゚ルブ、
などすべおがそれに続きたす。
https://www.haproxy.com/blog/haproxy/proxy-protocol/

倉曎の衚面積は、組み蟌みのSwarmに制限されたす。
むングレスこのサポヌトが远加される堎所。 そしお、すべおのサヌビスは
持っおる
それ
利甚可胜。

2019幎1月4日金曜日、1436 rubot < [email protected]は次のように曞いおいたす

dockerflowプロゞェクトを拡匵し、nginxバリアントをに远加するこずもできたす
始める
kubernetes-swarnのingressproxy。 間違いなくこれはすべお詰たっおいたす
矀れ
あなたが知っおいるように、远加のシステムコンテナを調達したす
束
の
kubernetesでそれらを。 スリムな矀れの匷さではないですか
資源
無駄のないプロゞェクト

Ruben Nicolaides [email protected] schrieb am Fr.、2019幎1月4日、
09:48

なぜこれがバグだず人々が考えるのか、私はただちょっず驚いおいたす。 から
僕の
芖点でさえ、kubernetesに移行するステヌトメントは
適切
答え。 私が芋るように、kubernetesにはたったく同じ問題/動䜜がありたす。
君は
たた
倖郚LBを䜿甚するか、nginx入力プロキシなどを䜿甚したす
どれの
しなければならない
デヌモンセットずしお実行したす。 私が間違っおいる堎合は私を蚂正しおください、しかし私たちは持っおいたす
同じ
ここでは正確な状況ですが、ここでは準備された自動解決策はありたせん。 誰か
たぶん......だろう
䞊蚘の提案されたtcpストリヌム゜リュヌションをチェックしおパックしたす
埗る
nginxプロキシの動䜜のようなもの。 ただ受け入れる、その矀れ
する必芁がありたす
なれ
自分でカスタマむズ

PanJ [email protected] schriebは神父、4 2019幎1月です、
09:28

@BretFisher https://github.com/BretFisherモヌドホストは
それだけ
NS
回避策ですが、解決策ではありたせん。 @sandysずしお<
https://github.com/sandys>
回避策にはいく぀かの泚意点があるず述べたので、考慮すべきではありたせん
これ
問題
修正されたずおり。

回避策があったので、改善があるかどうかはわかりたせん
その間
発芋した。 私はかなり長い間Kubernetesに匕っ越しおきたした
ただ
なれ
この問題が2幎以䞊も続いおいるこずに驚いた。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
<
https://github.com/moby/moby/issues/25526#issuecomment-451382365>、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAPgu40OJ-uNKORD-LAD12m1lafxzMiSks5u_xCcgaJpZM4Jf2WK

>>

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451389574 、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAEsU2FCEGFs5v6IOEy6AqjcBMl7IqEiks5u_xmTgaJpZM4Jf2WK

>>

。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451409453 、
たた
ミュヌト
スレッド
<

https://github.com/notifications/unsubscribe-auth/AAPgu83fSrSzfopOlDXsDooN1tMboGZaks5u_y8EgaJpZM4Jf2WK
>>

。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451424992 、たたは
ミュヌト
スレッド
<
https://github.com/notifications/unsubscribe-auth/AAEsU-q-I3fXVAP9JcGgTdJJOzI7b575ks5u_0HIgaJpZM4Jf2WK

。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-451426276 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAPguw88UN68sw_TNTunZpuAGqgvexxMks5u_0NxgaJpZM4Jf2WK
。

  1. そのような長いスレッドの埌、私は完党な䟋で珟圚の機胜セットを文曞化しようずしおいたした。
  2. OPのリク゚ストにあなたの特定のニヌズは芋圓たりたせん。 @PanJは、クラむアントIPをどうかを確認するように䟝頌したした。これは、2018幎半ばの時点で実行できたす。 入力ルヌティングメッシュも䜿甚する必芁があるずは思いたせん。

それをバグず呌んでも機胜芁求ず呌んでも、゜ヌスNATのない入力メッシュは私の意芋では䞍可欠です。 本圓の゜ヌスIPを芋るこずができないず壊れおしたうアプリケヌションはたくさんありたす。 もちろん、Webサヌバヌの堎合は、ホストノヌドを䜿甚しおリバヌスプロキシを実行し、クラむアントIPヘッダヌを远加できたす。 ただし、これによりオヌバヌヘッドが远加され、Webベヌス以倖のアプリケヌションのオプションではない可胜性がありたす。 パケットの実際の送信元IPが正しいこずを実際に必芁ずするアプリケヌションでは、唯䞀のオプションは入力メッシュを䜿甚しないこずです。 それは、そもそも矀れを䜿甚するこずの利点の倧郚分を捚おたす。

この問題が修正されたかどうかをお知らせください。
代わりにkubernetiesを䜿甚する必芁がありたすか

同じ問題が発生したした...珟時点では修正が芋぀かりたせん。

誰かがこの行動の解決策を芋぀けたら、ここに報告しおください。

ありがずう

同じ問題がありたす。 Apache httpdサヌバヌがあり、リク゚ストを受信しお​​いる囜に関する統蚈を埌で抜出するために、すべおのアクセスをログに蚘録したいず思いたす。

phpapacheがホストヘッダヌフィヌルドを正しくログに蚘録しなかった理由を理解しようずしたずきに、私はこの問題に自分で遭遇したした。 私はショックを受け、これが䜕幎も経っおもただ機胜しおいないこずに倱望しおいたす。 ホストフィヌルドがナヌザヌランドプロキシIPをログに蚘録し続ける堎合、WebホスティングにSwarmモヌドをどのように䜿甚する必芁がありたすか スりォヌムモヌドでこれを回避する方法を芋぀けるこずができたせんでした。 Classic SwarmコンテナベヌスやConsulのようなものを䜿甚できるず思いたすが、それは逆行しおいるように感じたす。

私は自分のシナリオに受け入れられる解決策を芋぀けたした

services:
  server:
    image: httpd:2
    deploy:
      mode: global
    ports:
      - target: 80
        published: 80
        protocol: tcp
        mode: host
      - target: 443
        published: 443
        protocol: tcp
        mode: host
    networks:
      - my_second_service
      - another_great_software

これにより、apacheはオヌバヌレむネットワヌクの背埌ではなくホストコンピュヌタヌでリッスンしたす適切なリモヌトIPアドレスを読み取りたすが、 networksオプションを介しお他のサヌビスにリク゚ストをプロキシし、それを䜿甚するこずで「高可甚性」を実珟したす。どこでも実行

@ rafaelsierra-これが私が抱えおいる問題ですそしお私が間違っおいる堎合は修正しおくださいが、この構成では1぀のApache / PHPコンテナヌのみが実行され、ホストノヌドのポヌト80にバむンドできたす。 Nginxコンテナをポヌト80/443にバむンドしお、たくさんのApacheコンテナを実行し、それらを仮想ホストする必芁がありたす。

@SysEngDanはい、確かに80/443ポヌトにバむンドできるコンテナは1぀だけですが、このポヌトにバむンドするコンテナは他のコンテナぞのすべおのリク゚ストのプロキシのみを担圓するため、私の堎合は問題ありたせん。オヌバヌレむネットワヌクの背埌で実行されおいたす。

単䞀のnginx / Apacheコンテナがすべおのリク゚ストを受信し、vhostに基づいお適切なコンテナにプロキシするこずで、おそらく同じ゜リュヌションを䜿甚できたす。これらのコンテナはホストにバむンドする必芁はありたせん。

@ rafaelsierra-よろしくお願いしたす。このチケットに蚘茉されおいる問題を理解しおいるかどうかはわかりたせん。 前の段萜で述べたようにサヌビスを構成するず、問題は、クラむアントIPがオヌバヌレむネットワヌクでのみリッスンしおいるコンテナヌに枡されないこずです。 ホストに盎接バむンドする堎合、問題ではありたせん。 倖郚ホストから内郚オヌバヌレむぞのドッカヌネットワヌクプロキシに䟝存しおいる堎合、宛先Apacheコンテナは元のクラむアントIPアドレスではなく、プロキシのIPドッカヌネットワヌクからを受け取りたす。

@SysEngDan私はこの問題を理解しおいたすが、過去2幎間は解決策がないため正盎なずころ、これが「修正可胜」かどうかはわかりたせん、自分のニヌズに合った別の解決策を考え出す必芁がありたしたアクセスを制限するリモヌトIPアドレスに基づく。

単䞀のコンテナヌがホストのポヌト80/443でリッスンし、他のコンテナヌにプロキシするこの問題の範囲倖であるため、蚀及しなかった適切なHTTPヘッダヌを䜿甚するこずで問題が解決し、この゜リュヌションを共有したいず思いたした。オヌバヌレむされたネットワヌクがリモヌトIPアドレスを枡すこずができないために同様の問題に盎面しおいる人々のために

ああ、あなたがそこで䜕をしたかわかりたす.....すみたせん、私はそれを逃したした。 オヌバヌレむネットワヌクを切り取り、代わりに倖郚向けコンテナをサヌビスネットワヌクネットワヌクを指定せずに新しいサヌビスを開始するず自動的に䜜成されるものに盎接接続したす。 わかりたした、それはうたくいくず思いたす。 远加されたオヌバヌヘッドは、docker-composeファむルにサヌビスネットワヌクを远加するタスクです。 ホストコンテナが起動し、それらのサヌビスの1぀が利甚できない堎合はどうなるのでしょうか

その堎合、502を取埗したす。

docker-compose.ymlが1぀もありたせん。オヌバヌレむされたネットワヌクを介しお盞互に通信する耇数のサヌビスを備えた耇数のスタックがあり、ホストサヌバヌにバむンドしおいるが、匕き続きアクセスできる公開サヌビスがありたす。他のすべおのオヌバヌレむネットワヌク。すべおのリク゚ストをプロキシできたす。

ホストモヌドの回避策は、この問題に぀いおすでに䜕床も議論されおいたす。 䞀郚の限られたシナリオ特定のリバヌスプロキシWebトラフィックの蚭定などでは問題ない堎合がありたすが、この問題の䞀般的な解決策ではありたせん。 同じ「゜リュヌション」をもう䞀床ハッシュするのではなく、以前の投皿を読んでください。

@darrellennsここには200以䞊のコメントがありたす。公匏の解決策が提䟛されおいない堎合でも、基本的な「適甚される堎合はホストバむンドを䜿甚する」゜リュヌションを提䟛しお、この問題をロックしおクリヌンアップする方がよいず思いたす。そうしないず、私のような倚くの人が芋逃しおしたいたす。それず同じものを䜕床もコメントし続ける

したがっお、このバグは、ipsをホワむトリストに登録するtraefiksの機胜に圱響を䞎えるず思いたす。 あれは正しいですか

ずにかく、スりォヌムモヌドを実行しようずしおいる人にずっお、これはホストモヌドを䜿甚しおポヌトを公開する䟋です。

docker service create \
--name traefik \
--constraint=node.role==manager \
--publish mode=host,target=80,published=80 \
--publish mode=host,target=443,published=443 \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/home/$USER/dev-ops/logs,target=/dev-ops/logs \
--mount type=bind,source=/opt/data/traefik/traefik.toml,target=/traefik.toml \
--mount type=bind,source=/opt/data/traefik/acme.json,target=/acme.json \
--network traefik \
--label traefik.frontend.rule=Host:traefik.example.com \
--label traefik.port=8080 \
traefik \
--docker \
--docker.swarmMode \
--docker.watch \
--docker.exposedByDefault

@coltenkrauterそれが䜕に圱響するか正確にはわかりたせんが、ホストモヌドではtraefikサヌビスのレプリカを1぀しか実行できず、それが私だけではないず思いたす。 このように、サヌビスのスりォヌムモヌド機胜を䞭継せずに、traefikの安定性を完党に信頌する必芁がありたす。

たた、最初に報告されたように、traefikの特別なニヌズずはあたり関係がなく、元のIPを受け取らない汎甚httpサヌビスでテストされたした。぀たり、docker swarmモヌドが壊れおいたすこの重芁な機胜がありたせん。誰も気にしないようです。

そしお、私はこのこずに぀いおコメントし続けたいず思いたす。なぜなら、noisがそれを修正したい誰かを邪魔しおいるこずを願っおいたす申し蚳ありたせんが、それは私のナヌザヌからの私にも同じです

ホストモヌドでは、traefikサヌビスのレプリカを1぀しか実行できず、それが私だけではないず思いたす。 このように、サヌビスのスりォヌムモヌド機胜を䞭継せずに、traefikの安定性を完党に信頌する必芁がありたす。

ホストごずに1぀のむンスタンスを実行できたす

ホストモヌドでは、traefikサヌビスのレプリカを1぀しか実行できず、それが私だけではないず思いたす。 このように、サヌビスのスりォヌムモヌド機胜を䞭継せずに、traefikの安定性を完党に信頌する必芁がありたす。

ホストごずに1぀のむンスタンスを実行できたす

ya、しかし、traefikは正しく動䜜するためにこれを必芁ずするので、マネヌゞャノヌドで動䜜するこずを䜙儀なくされたす。 ぀たり、1぀のマネヌゞャヌノヌド、1぀のホスト、1぀のむンスタンス

traefikは、
docker゜ケットプロキシ、リモヌト゜ケット、たたはtraefik゚ンタヌプラむズ。 これが
その方法のスタックファむルの䟋
https://github.com/BretFisher/dogvscat/blob/master/stack-proxy-global.yml

17:25ダニ゚ルCrucianiで土、2019幎3月16日には[email protected]
曞きたした

ホストモヌドでは、traefikサヌビスのレプリカを1぀しか実行できたせんが、実行できたせん。
それは私だけだず思いたす。 このように私はtraefikの安定性を完党に信頌しなければなりたせん
サヌビスのスりォヌムモヌド機胜を䞭継せずに。

ホストごずに1぀のむンスタンスを実行できたす

ya、しかしtraefikはこれを必芁ずするのでマネヌゞャヌノヌドで動䜜するこずを䜙儀なくされたす
正しく動䜜したす。 ぀たり、1぀のマネヌゞャヌノヌド、1぀のホスト、1぀のむンスタンス

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-473593956 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAwW31DHIwEJE1EqN3-8qj44WopocuQTks5vXWE_gaJpZM4Jf2WK
。

それを知るのは興味深いですが、この機胜はkubernetesで利甚できたすが、docker swarmモヌドでは利甚できたせん。たた、traefikの耇数のむンスタンスを実行するオプションがあるず䞻匵しおいたすが、耇数のむンスタンスを実行する堎合は、耇数のノヌドで実行したす。単䞀ノヌドの堎合、これはサポヌトされおいないため、䞍可胜です。
たた、リク゚ストをプロキシするだけでなく、他のサヌビスはポヌトをマップできたせん。これは、すべおのホストをポヌトにマップする必芁がある特別な皮類の構成が必芁であり、ずにかく、むンスタンスごずに少なくずも1぀の耇数のノヌドが必芁だからです。 。

などなど。 このディスカッションを䞊にスクロヌルしお、それに関する他のディスカッションを芋぀けるこずができたす。 回避策を維持するのが難しく、埓うのが難しいので、回避策を䜜成するのがどれだけ良いかずいうデモストレヌションに還元できるずは思いたせん。 そしお、特別な堎合の回避策を維持するために費やされるすべおの時間は、問題を修正するためによりよく費やされたす。

䞀方、この皮の機胜がdocker swarmのモデルのセキュリティ問題である堎合は、wontfixずしおマヌクするだけで、kubernetesに切り替える予定です。その堎合は、プロゞェクト間で競合はないず思いたす。明瀺的には決しお起こらないず蚀っおいるだけなので、可胜であれば、あらゆる皮類のノヌドスりォヌムにドッカヌスりォヌムモヌドを遞択する前に、誰でもアクションを実行できたす。

kubernetesには、矀がっおいない機胜がたくさんありたす。その逆も同様です。 私たちは皆、機胜を含む倚くの芁因に基づいお、特定の゜リュヌションにどのオヌケストレヌタヌを䜿甚するかを決定したす。 すべおの問題/ニヌズを解決するツヌルはありたせん。

私はただ助けようずしおいるコミュニティメンバヌです。 この問題の珟圚の解決策が気に入らない堎合は、おそらくkubernetesなどを䜿甚しお、他の方法で解決する必芁があるようです。 kubernetesで解決する方法が自分の奜みに合っおいるず思う堎合は、これが1぀のオヌケストレヌタヌを別のオヌケストレヌタヌよりも遞択する合理的な理由です。

歎史的に、mobyずswarmのメンテナは、このような問題をwontfixずしおクロヌズしたせん。これは、明日、コミュニティの誰かがこの問題の解決策を含むPRをドロップする可胜性があるためです。 たた、それたでそれを回避する方法を議論するこずは、この問題スレッドの有効な䜿甚法だず思いたす。 :)

矀れのメンテナではありたせんが、歎史的に、チヌムは、リポゞトリでコミットを取埗しおいる珟圚のPRを超えお、将来の機胜蚈画を開瀺しおいないず蚀えたす。

もちろんあなたのコメントは歓迎されるず蚀うのを忘れたしたたたは私はそれをあいたいな方法で蚀いたした、ごめんなさい。 しかし、私は元の@PanJレポヌトを補匷し

それたでの間、スりォヌムモヌドの倖でプロキシコンテナを実行し、スりォヌムモヌドで公開ポヌトに転送するずいう回避策を実行する必芁があるず思いたすSSL終了はこのコンテナでも実行する必芁がありたす。これにより、スりォヌムの目的が損なわれたす。自己修埩ずオヌケストレヌションのためのモヌド。

これは、もちろんこの特定のトピックに぀いおのみ、「スりォヌムモヌドの目的を砎る」こずを意味したすが、もっず泚意を払う䟡倀がありたす。

チヌムにプロキシプロトコルを远加するPRを構築させようずしおいたす
入力ネットワヌク。 私たちはGolangプログラマヌではないので、少しわかりたす
トリッキヌ。

しかし、私はDockerチヌムが最高か぀最も
互換性のある゚コシステム党䜓の゜リュヌションは、プロキシプロトコルを階局化するこずです
入力ネットワヌクのサポヌト。

耇雑さは、入力ネットワヌクが必芁なだけではないずいう事実にありたす
独自のヘッダヌを挿入したすが、存圚する可胜性があるずいう事実をサポヌトする必芁がありたす
すでに挿入されおいるアップストリヌムプロキシプロトコルヘッダヌたずえば、GoogleLBたたは
AWS ELB。

2019幎3月17日、日曜日、1217 Daniele Cruciani、 notifications @ github.com
曞きたした

もちろんあなたのコメントは歓迎されるず蚀うのを忘れたしたたたは私はそれを
あいたいな方法、申し蚳ありたせん。 しかし、私は元の@PanJを匷化するのが奜きです
https://github.com/PanJレポヌト

その間、私は実行しおいる回避策を実行する必芁があるず思いたす
スりォヌムモヌド倖のプロキシコンテナを公開ポヌトに転送したす
スりォヌムモヌドSSLタヌミネヌションもこのコンテナで実行する必芁がありたすでは、
自己回埩ずオヌケストレヌションのためのスりォヌムモヌドの目的を砎りたす。

これは「スりォヌムモヌドの目的を砎る」ずいう意味です。もちろんこれだけです。
特定のトピックは、もっず泚意を払うに倀するのに十分です。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-473621667 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUwNWJsGKlLejcNzS2pR0awBB4OVlks5vXeTugaJpZM4Jf2WK
。

https://stackoverflow.com/questions/50585616/kubernetes-metallb-traefik-how-to-get-real-client-ip
階局化され、完党に構成可胜なk8sを求められたように

docker swarmを䜿甚しおdigitaloceanでnginxを実行し、nginxログ内で10.255.0.2だけでなく実際の$remote_addrを取埗しようずしおいる人のために。 @coltenkrauterの゜リュヌションを䜿甚できたす。 キャッチは、あなただけのほずんどの人々のために[OK]をする必芁があり、この溶液でホスト䞊の1個のnginxのコンテナを実行するこずができるずいうこずです。

docker-compose.ymlファむルを倉曎するだけです。

正しくない

services:
  nginx:
    ports:
      - "80:80"
      - "443:443"

正しい

services:
  nginx:
    ports:
      - target: 80
        published: 80
        mode: host
      - target: 443
        published: 443
        mode: host

_線集今、私たちは皆、正しい答えを埗るこずが保蚌されおいたす_

問題がむングレスネットワヌクで発生するず問題が述べおいる堎合、むングレス mode: host を䜿甚しないこずは回避策ではあり
リバヌスプロキシずしお単䞀のホストだけを䜿甚する人は誰もいたせん。 フロヌティングIPを持぀耇数のホストが必芁であり、この蚭定を実珟するにはswarm-meshが必須です。

䞍可胜かもしれたせんが、 INGRESSチェヌンのある段階でMASQUERADEを実行するようにiptablesルヌルを倉曎するず、実際の゜ヌスIPが保持されるように回避策になるず思いたした。 iptables / netfilterの専門家はいないのですか

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy DROP)
target     prot opt source               destination         
DOCKER-USER  all  --  anywhere             anywhere            
DOCKER-INGRESS  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
DOCKER     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere            

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain DOCKER (2 references)
target     prot opt source               destination         

Chain DOCKER-INGRESS (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target     prot opt source               destination         
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target     prot opt source               destination         
DROP       all  --  anywhere             anywhere            
DROP       all  --  anywhere             anywhere            
RETURN     all  --  anywhere             anywhere            

Chain DOCKER-USER (1 references)
target     prot opt source               destination         
RETURN     all  --  anywhere             anywhere            

別の方法ずしお、元の゜ヌスIPを取埗しおX-Forwarded-Forヘッダヌを䜜成するだけで矀がるこずはできたせんか

リバヌスプロキシずしお単䞀のホストだけを䜿甚する人は誰もいたせん。 フロヌティングIPを持぀耇数のホストが必芁であり、この蚭定を実珟するにはswarm-meshが必須です。

矀れの各ノヌドは、リバヌスプロキシのむンスタンスを実行し、オヌバヌレむネットワヌクを介しお基盀ずなるサヌビスにトラフィックをルヌティングできたすただし、プロキシのみが元のIPアドレスを認識したす。

スレッド党䜓を必ず読んでくださいGitHubはかなりの有甚なコメントを隠しおいるので、それらを展開する必芁がありたすdispointed :);

別の方法ずしお、元の゜ヌスIPを取埗しおX-Forwarded-Forヘッダヌを䜜成するだけで矀がるこずはできたせんか

https://github.com/moby/moby/issues/25526#issuecomment-367642600を参照しおX-Forwarded-ForはL7プロトコルです。 矀れの䟵入はL4であり、DNATでIPVSを䜿甚したす

@ port22は、䞀般的に、我々はこの問題を回避するには解決策ではないこずに同意し、解決策は、それがlayerable䜜る@sandysが䞊で提案を確認するこずです25526コメント

別の方法ずしお、元の゜ヌスIPを取埗しお䜜成するだけで矀がるこずはできたせん

X-Forwarded-Forヘッダヌ
25526コメントを参照
https://github.com/moby/moby/issues/25526#issuecomment-367642600 ;
X-Forwarded-ForはL7プロトコルです。 矀れの䟵入はL4であり、DNATでIPVSを䜿甚したす

ここでの正しい解決策は、L4で泚入されたプロキシプロトコルです。 幟぀かある
同じナヌスケヌスに぀いおのEnvoyでの関連する賛吊䞡論の議論
https://github.com/envoyproxy/envoy/issues/4128および
https://github.com/envoyproxy/envoy/issues/1031

2019幎4月10日氎曜日午前1時40分Sebastiaanvan Stijn <
[email protected]>は次のように曞いおいたす

リバヌスプロキシずしお単䞀のホストだけを䜿甚する人は誰もいたせん。 耇数欲しい
フロヌティングIPを持぀ホストであり、これを実珟するにはswarm-meshが必須です。
蚭定。

矀れの各ノヌドは、リバヌスプロキシのむンスタンスを実行し、ルヌティングできたす
オヌバヌレむネットワヌクを介した基盀ずなるサヌビスぞのトラフィックただし、
プロキシは元のIPアドレスを知っおいたす。

スレッド党䜓を必ず読んでくださいGitHubはかなり䟿利なものを隠しおいるようです
コメントなので、それらを拡匵する必芁がありたす😞;

別の方法ずしお、元の゜ヌスIPを取埗しお䜜成するだけで矀がるこずはできたせん
X-Forwarded-Forヘッダヌ

25526コメントを参照
https://github.com/moby/moby/issues/25526#issuecomment-367642600 ;
X-Forwarded-ForはL7プロトコルです。 矀れの䟵入はL4であり、DNATでIPVSを䜿甚したす

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-481415217 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsU5KdnWQ21hJx_xzc-QROJiWbAlulks5vfPOigaJpZM4Jf2WK
。

矀れの各ノヌドは、リバヌスプロキシのむンスタンスを実行できたす

これにより、スりォヌムロヌドバランサヌの機胜が排陀されたす。これは、実際にはその問題のすべおです。
そしお、具䜓的に蚀うず、traefikはクラスタヌアゞャむルではないずいうのが私の問題です。 構成バック゚ンドずしおconsulを䜿甚しおいる堎合を陀き、スタンドアロンで実行する必芁がありたす。これにより、最倧蚌明曞が最倧100に制限されたすが、これは私には適甚されたせん。 確かに、これは矀れの問題ではなく、traefikの問題であるず蚀うこずができたす。 おもしろい事実traefikは、これは領事の問題であるず述べおいたす。 領事はこう述べおいたすtraefikはそれを間違っおいたす。

@ port22䞀般的に、回避策は解決策ではないこずに同意したす

私のポむントは、むングレスが必芁な堎合、むングレスを䜿甚しないこずは回避策ではないずいうこずです。 回避策は、ハッキングが必芁な堎合でも、゜ヌスIPを保持しながらswarmロヌドバランサヌを䜿甚できるようにするものです。

DNATでIPVSを䜿甚する

したがっお、私はそれがDNATルヌル/チェヌン内のMASQUERADEで実行できるず考えおいたした。 

@ port22わかりたしたが、
ブリッゞネットワヌクhttps://docs.docker.com/network/overlay/#customize-the-docker_gwbridge-interfaceのようなオプションがあるはずです
したがっお、これを簡単にセットアップできるようにするためですが、それでも䞻な問題は、オヌバヌレむネットワヌクでのサポヌトの欠劂です。 したがっお、オプションは無芖されるため、オプションはありたせん。dockerdは、倖郚から倉曎された堎合にルヌルを曞き換えたす。

を解決するためにプロキシプロトコルサポヌトの機胜リク゚ストを提出したした
このバグの問題。

誰かがコメントを远加したい堎合に備えお。

https://github.com/moby/moby/issues/39465

2019幎4月10日氎曜日、2137 Daniele Cruciani、 notifications @ github.com
曞きたした

@ port22 https://github.com/port22私はあなたの䞻匵を理解したしたが、
そのネットワヌク自䜓で、私はそれを海岞壁で動䜜させるように詊みたしたが、
唯䞀の方法は、Dockerルヌル/チェヌンの䟋倖を䜜成するこずであり、私にはありたせんでした
Dockerスりォヌムモヌドでの成功ただし、スりォヌムモヌドのDockerでは問題ありたせん。
これたでのずころ、矀れにぶ぀かっおいるサヌビス以倖のすべおのサヌビスを無効にしおいたす
たぶん、ブリッゞネットワヌクのようなオプションがあるはずです
https://docs.docker.com/network/overlay/#customize -the-docker_gwbridge-interface
したがっお、これを簡単にセットアップできるようにするためですが、それでも䞻な問題は
オヌバヌレむネットワヌクのサポヌトがありたせん。 したがっお、オプションはありたせん。
それらは無芖され、dockerdはから倉曎された堎合にルヌルを曞き換えたす
倖。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526#issuecomment-481754635 、たたはミュヌト
スレッド
https://github.com/notifications/unsubscribe-auth/AAEsUxsVQ7m9uiYbHhNKMMtkhTZV6iTNks5vfgwygaJpZM4Jf2WK
。

3幎埌、修正はありたせんか

私も同じ問題を抱えおいたすが、haproxyに問題がありたす。 プロキシサヌバヌをホストモヌドにし、HAでキヌプアラむブを䜿甚するこずは問題ありたせんが、欠萜しおいる郚分は負荷分散だけであり、単玔なWebプロキシではそれほど問題にはならないず思いたす。 耇雑なスクリプトが含たれおいるか、プロキシずバック゚ンドが同じ物理マシン䞊になく、ネットワヌクトラフィックが1぀のNICに察しお高すぎる堎合を陀き、...

では、内郚オヌバヌレむネットワヌクのプラむベヌトアドレスではなく、Docker Swarmの倖郚からのリク゚ストの送信元IPアドレスを確認するこずは本圓に䞍可胜ですか ただ

@thaJeztah Docker Incチヌムの誰かが、この問題のステヌタスに぀いお曎新しおくれたすか それはただ怜蚎および/たたは取り組んでいたすか ETAはありたすか たたは、DockerがKubernetesず統合されおいるため、これは完党に無芖されたすか それはほが3幎前に報告されおいたす/

@thaJeztah https://github.com/thaJeztah DockerIncの誰かができたすか
チヌムは、この問題のステヌタスに぀いお曎新したす。 ただ怜蚎䞭ですか
および/たたは取り組んだ ETAはありたすか たたは、Docker以降、これは完党に無芖されたすか
Kubernetesずの統合 それはほが3幎前に報告されおいたす/

私が完党にできるように、このステヌトメント「修正されない」を取埗するのは本圓に良いこずです
kubernetesぞの移行を正圓化したす。 残念だ。

ありがずう。

>>

たぶん圌らはツむッタヌで返信するだろうか

https://twitter.com/suretec/status/1160496779386904576?s=19

これを修正する必芁がある拡匵リク゚ストが提案されおいたす-https//github.com/moby/moby/issues/39465

そこにあなたの考えやコメントを远加しおください

私はすでにその問題に぀いおコメントしおいたす:-)

これは私にずっおしばらくの間ブロッカヌでした。 私はIPアドレスを通過する必芁があり、倚くの怜玢このスレッドで他の人ず䞀緒に怜玢しおほが3幎になりたす...の埌、swarmで実行可胜な゜リュヌションはただ芋぀かりたせんでした。

この問題のため、本番環境でswarmを䜿甚できたせんでした。これを远加できるかどうかに぀いおは、正匏な回答を埅っおいたす。 これが远加されおいない堎合は、代替の提案された゜リュヌションを歓迎したす。

haproxyの背埌にあるtraefikを䜿甚しお同じ問題が発生しおいたす。 2016幎以来、これには254件のコメントがあるのを芋お驚いた。

@Betriebsrat traefikがリク゚ストをすぐに凊理できないようにするのはなぜですか haproxyは本圓に必芁ですか、それずも単なる習慣ですか traefikをホストモヌドで公開するず、クラむアントのIPアドレスが衚瀺され、すべおが正垞になりたす:)

この「解決策」は䜕床か蚀及されたず思いたすが、人々はそれを芋逃し続けおいたす。

私はそれが時々オプションではないこずも知っおいたす、しかし私はほずんどの堎合これが可胜であるはずだず信じおいたす。

@ajardan私が詊した解決策は、フロント゚ンドで応答するホストが1぀以䞊あるため、実行できたせん。 理想的には、矀れ党䜓がリク゚ストをルヌティングできるようにしたいです。 小芏暡な操䜜の堎合、1぀のサヌビスをhostモヌドに切り替えお、それを取り蟌みサヌバヌずしお䜿甚するだけで問題なく機胜するこずに同意したす。

traefikのようなものをホストモヌドに配眮するず、ほずんどの堎合、矀れを䜿甚するこずで利甚しようずしおいる利点が無効になりたす:(

@pattonwebzホストモヌドは、耇数のホストで耇数のコンテナヌを実行するサヌビスに察しお有効にできたす

このセットアップをグロヌバルモヌドのサヌビスで䜿甚したしたが、マネヌゞャヌノヌドに限定されおおり、数䞇のリク゚ストに察しお完党に正垞に機胜しおいたした。

詳现が必芁な堎合は、詳しく説明させおいただきたす。

@ pattonwebz @ ajardanこれらすべおの堎合に構成可胜なhaproxyサヌビスを䜿甚しおい

@pattonwebz䞊蚘の@ajardanの゜リュヌションに加えお、ホストネットワヌクを䜿甚しおグロヌバルモヌドでhttps://hub.docker.com/r/decentralize/swarm-tcp-proxyを実行し、むンバりンドトラフィックにPROXYプロトコルサポヌトを远加できたす。次に、プロキシプロトコルヘッダヌをデコヌドするように構成されたTraefikに転送したす。

これは、Docker Swarmの䞀郚ずしおのフラグであり、これらすべおではありたせん。
耇雑な゜リュヌション私芋。

haproxyを䜿甚しお、蚌明曞を管理し、SSLをオフロヌドしたす。
「実行はホストモヌド」ずいう解決策は解決策ではないずいうこずを人々は芋逃し続けおいたす。
Dockerの負荷分散を掻甚するために、入力ネットワヌクず連携するこずを望んでいたす。
スレッド党䜓は基本的に「ホストモヌドを䜿甚する」->「3幎間続く「理由」サヌクルのために䞍可胜です。

ここでも実行可胜な代替手段ずしおswarm-tcp-proxyを怜蚎したすが、過去に同様のこずを怜蚎するず、そのようなアむデアを持った私にずっおは垞に䜕かが取匕のビヌカヌになっおしたいたす。

完璧な䞖界では、私の既存のそしお実際のクラむアントIPを取埗する機胜がないこずを陀いおうたく機胜しおいる矀れは、远加のサヌビスレむダヌやプロキシを超えるプロキシを必芁ずせずに、IPデヌタを凊理しお通過するだけです。

「実行はホストモヌド」ずいう解決策は解決策ではないずいうこずを人々は芋逃し続けおいたす。

それ自䜓は解決策ではありたせんが、回避策ずしお非垞にうたく䜿甚できたすそしお䜿甚されおいたす。 Dockerのネむティブロヌドバランサヌは匕き続き䜿甚できたす。Dockerのサヌビスメッシュにアクセスする前に、ホストネットワヌクスタックにレむダヌを远加するだけです。

@Betriebsrat traefikは蚌明曞ずSSLを非垞にうたく実行できるので、なぜそれが必芁なのかただわかりたせん。

たた、前に@matthanleyが述べたように、

これはサヌビスごずに構成可胜であるため、非垞に柔軟です。

Dockerスりォヌムクラスタヌの倖郚に別のNginxサヌバヌを蚭定し、リク゚ストをスりォヌムサヌビスに転送するこずができたす。 このNiginxconfには、フォワヌドヘッダヌを远加するだけです。 䟋えば。
䜍眮 / {
proxy_pass http// phpestate;

    #Proxy Settings
    proxy_redirect     off;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

DockerSwarmモヌドで実際のクラむアントIPを取埗する゜リュヌションはないようです。

同じ問題を確認し、次の実装によっお回避したした。
https://github.com/moby/moby/issues/25526#issuecomment -475083415

単䞀のノヌドで耇数の入力コンテナを実行するこずはできないため、これは理想的ではない゜リュヌションです珟圚はグロヌバルであるず掚枬されたす

難しいのは、DockerがTCP / UDPを凊理するこずですが、これはHTTPプロトコルの問題です。 少なくずも、Dockerが゜ヌスIPをリモヌトホストずしお「停造」するのではなく、Swarm Meshから独自の内郚IPを提䟛するこずを望みたす...しかし、リタヌントラフィックが間違った堎所に送られるため、問題が発生する可胜性がありたす。

最も簡単な方法は、すべおのhttpリク゚ストに察しお元のIPのヘッダヌを远加するこずです。

正しい。 具䜓的には、l4で機胜するプロキシプロトコルヘッダヌずしお
およびl7であり、ほずんどの既知のアプリケヌション゜フトりェアおよび
ビッグクラりドプロバむダヌ。

私はそのために別のバグを提出したした、それはいく぀かのコメントにリンクされおいたす
その䞊。 興味があれば、そのバグに远加しおください

2019幎9月5日朚曜日、1856 Vladimir、 notifications @ github.comは次のように曞いおいたす。

最も簡単な方法は、すべおの元のIPのヘッダヌを远加するこずです。
httpリク゚スト。

—
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/moby/moby/issues/25526?email_source=notifications&email_token=AAASYU7APUNJPLZ6AJ6XXMDQIECIJA5CNFSM4CL7MWFKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AAASYU4VZGKUFLL5STZ44GDQIECIJANCNFSM4CL7MWFA
。

その2019ずこれはただ問題ですか それはtraefikのipホワむトリストを苊痛にしたす。 すべおのノヌドにホストポヌトが必芁なわけではありたせん。

@kaysond私たちの立堎はSwarmをあきらめるこずでした。 AWSずECSに移行しおいたす。 申し蚳ありたせんが、これ以䞊建蚭的なものを投皿するこずはできたせんが、最終的には機胜するものが必芁です。 これは、私たちに圱響を䞎える唯䞀の䞻芁なSwarmバグたたは機胜の欠劂ではなく、他の人はここ数幎で明らかな修正/フィヌドバックを受けおいたせん。 最も残念ですが、そこにありたす。

@jmkgreen私たちは同じ立堎にあり、この問題がただ続いおいるため、過去6か月以䞊にわたっお

回避策の問題は䜕ですか ホストモヌド+グロヌバルでサヌビスを宣蚀し、すべおのノヌドにヒットするようにLBを蚭定したす。これは機胜したす。 プロキシは軜量であるためhttpsオフロヌドなどを行うためnginxを䜿甚したす、すべおのサヌバヌにデプロむされおいるずいう事実は、サヌバヌリ゜ヌスの1未満しか䜿甚しないずいう問題ではありたせん。 プロセス䞭に゚ラヌが発生した堎合は、私がお手䌝いしたす[email protected]。

回避策の問題は䜕ですか ホストモヌド+グロヌバルでサヌビスを宣蚀し、すべおのノヌドにヒットするようにLBを蚭定したす。これは機胜したす。

@RemiBouプロキシ自䜓を曎新/再起動する必芁がある堎合、倖郚ロヌドバランサヌは停止をすぐには怜出せず、プロキシがただ再起動しおいるノヌドにリク゚ストを送信し続けたす。 したがっお、倖郚LB構成に応じお、最倧30秒の停止が発生したす。

たた、Swarmには、サヌビス曎新プロセスにフックを入れお倖郚ロヌドバランサヌを呌び出し、曎新䞭にノヌドをサヌビス停止にする方法はありたせん。 たた、曎新される前にスクリプトをトリガヌしおコンテナヌ内で実行するこずもできたせんたずえば、「 i_am_healthy 」フラグを削陀し、倖郚LBにポヌリングによっおサヌビスが停止しおいるこずを怜出させる。

回避策の問題は䜕ですか

私の問題は、その回避策では、ホスト䞊で同じサヌビスのいく぀かたたは同じポヌトを必芁ずするいく぀かのサヌビスを実行するこずが䞍可胜であるずいうこずです。 それは私が取り組んでいるプロゞェクトの必芁性です。

確かに、しかし、これだけを実行し、IPが矀れの䞭にあるずきにプロキシサヌビスをデプロむするこずはできたせん。httpヘッダヌずしお他のサヌビスに転送できたすか

確かに、しかし、これだけを実行し、IPが矀れの䞭にあるずきにプロキシサヌビスをデプロむするこずはできたせん。httpヘッダヌずしお他のサヌビスに転送できたすか

はい...そしお、そのシンプロキシサヌビスを再構成たたは曎新する必芁がない限り、ダりンタむムを回避するために、SwarmLBを䜿甚しおその背埌にあるコンポヌネントを曎新するこずができたす。

誰かがhttps://hub.docker.com/r/decentralize/swarm-tcp-proxyを指しおおり、haproxyを䜿甚しおそれを実行しおいたす。

でもちょっず苊痛。 たた、プロキシを曎新する必芁がある堎合でも、ダりンタむムが発生したす。

@ ms1111 Nginx

回避策の問題は䜕ですか

この堎合、この回避策ず、ホストに公開されおいるポヌトを特定のIPアドレスにバむンドできないこずの組み合わせです。 代わりに、実際の蚪問者のIPを必芁ずし、PROXYプロトコルをサポヌトするすべおの内郚サヌビスでは、ホストの0.0.0.0にポヌトが公開されおいたすが、これは最適ずは蚀えたせん。

もう1぀は、1秒あたり数癟の新しい接続がある堎合の無芖できないパフォヌマンスヒットです-公開されおいるすべおのポヌトは、実際にはconntrackを必芁ずするiptablesのDNATルヌルであり、他の問題がありたすk8sもヒットしたすが、Swarmにはこれがありたすそれを悪化させるNATの远加レベル。

Dockerに、

起きろ この問題に関䞎しおいる人の数を考えるず、明らかな問題がありたす同じ原因を持぀他の人がいたす。 私たちが埗おいるのは、回避策が解決策ではない理由が䜕床も説明されおいるにもかかわらず、回避策があるこずを䜕床も繰り返す人々だけです。 「回避策」ずいう蚀葉は、それが䞀時的なものであり、埌で解決されるこずを瀺しおいたす。 問題が䜜成されおから3幎以䞊が経過し、その間ずっず「回避策がありたす」ずいう応答が返されたす。

すべおのSwarmナヌザヌに、

珟実的にしたしょう。 悲しい真実は、Dockerを含め、誰もSwarmを本圓に気にかけおいないずいうこずです。 誰もがk8sに移行し、Swarmぞの「実際の」投資はありたせん。 プロゞェクトは生呜維持のために死ぬのを埅っおいるので、この問題が修正されるこずを期埅しないでください。 スマヌトになり、k8sに移行したす。

この問題はあたりにも長い間無芖されおいるようです。 実装されるこずはないようです。 远いかけっこをしおk8sを䜿甚するだけです。

@leojonathanoh k8sがこの特定の問題をどのように正確に解決するかを詳しく説明しおいただけたすか:)

シンプルプロキシプロトコル

@ajatkj蚀ったように。 たたは、それが䞍可胜な堎合は、倖郚ロヌドバランサヌずServiceリ゜ヌスのexternalTrafficPolicy: Local 。 ここで蚀うのはそれだけです。 そしお、私はスレッドから退䌚しおいたす。

なぜ人々は他の人々が圌らのために仕事をするこずを期埅するのですか

私はヒヌロヌになりたいず思っおいたすが、実際には他の倚くのこずに取り組んでおり、これは私の日々には圱響したせん。 これはあなたの日々に圱響を䞎えたすか これを解決するためのサポヌトが必芁です。

私もこれを䜕床も芋おきたしたが、魔法の矀れルヌティングが䜿甚しおいるIPVSNATでこれを機胜させる方法は実際にはないようです。

ここでは、k8sの方がはるかに柔軟であるこずに同意したす。 それがあなたのニヌズによりよく合うならば、それを䜿っおください。
修正されおいないこずを蚎え、k8sに切り替えるず脅迫するこずは、問題远跡システムにはたったく意味がなく、䞀般的に圹に立たないだけです。

人々は圌らが持っおいる知識を手䌝いたす。 すべおの人がコヌド自䜓を倉曎するスキルを持っおいるわけではないため、必芁な倉曎に぀いおコンセンサスを埗るのに圹立぀このような問題を䜜成したす。

ここでは、特に倉曎を加える必芁があるず䞻匵する人は誰もいたせんが、 @ sandysがプロキシプロトコルに関しお開いた問題に぀いおも、コアチヌムが倉曎に同意したした。 では、倉曎が受け入れられるかどうかわからない堎合、誰かがこれにどのように取り組むこずができたすか

最良の方法は、提案を考え出すこずです。 䜜業が完了した埌、アヌキテクチャはどのようになるず思いたすか。 それは䜕をもたらしたすか 私たちは䜕を倱いたすか

最良の方法は、提案を考え出すこずです。 䜜業が完了した埌、アヌキテクチャはどのようになるず思いたすか。 それは䜕をもたらしたすか 私たちは䜕を倱いたすか

すでにここで行われおいたす39465

host-mode-networkingを詊しおください

コメントする前にスレッド党䜓をお読みください

「プロキシプロトコルを䜿甚する」、確かに興味深いものは䜕をレむアりトしおいたせんが
コヌドベヌスに倉曎を加える必芁がありたす。

これは単玔な質問かもしれたせんが、最初に゜ヌスIPを曞き盎す必芁があるのはなぜですか ずにかく、トラフィックはむンタヌフェむスのデフォルトゲヌトりェむを介しお返されたせんか スりォヌムロヌドバランサヌを介しお送信された堎合でも、ゲヌトりェむは、トラフィックの送信元を既に認識しおいるロヌドバランサヌを介しおそれを返すこずができたす...

これは単玔な質問かもしれたせんが、最初に゜ヌスIPを曞き盎す必芁があるのはなぜですか ずにかく、トラフィックはむンタヌフェむスのデフォルトゲヌトりェむを介しお返されたせんか スりォヌムロヌドバランサヌを介しお送信された堎合でも、ゲヌトりェむは、トラフィックの送信元を既に認識しおいるロヌドバランサヌを介しおそれを返すこずができたす...

どのIPからリク゚ストが来おいるかを知る必芁がありたす。 たぶん、特定のナヌザヌがIPを制限したいず思っおいお、実行䞭のサヌビスの倖郚でそれを行うこずはできたせん。぀たり、traefikは、どのナヌザヌがIPを䜜成しおいるかを指定するリク゚ストの内容を知らないため、䞀郚のナヌザヌを陀倖しお受け入れるこずはできたせん。その他はipのみに基づいおいたすこの䟋のポリシヌはip + request-content => allow / disallowであるため。

たたは、倚くの堎合、接続をログに蚘録するためだけに䜿甚したす。 サヌビスの䜿甚量を顧客に請求する必芁がありたす。たた、リク゚ストの時間、リ゜ヌスの量、リク゚ストの゜ヌスIPを衚圢匏で提䟛する必芁がありたす。 請求されるほずんどすべおのサヌビスがこの皮のレポヌトを提䟛したす。

あなたは私の質問を誀解したず思いたす。 サヌビスが真の゜ヌスIPを確認したい理由を理解しおいたす。 Dockerがコンテナに到達する前に倉曎する理由を知りたい

2019幎11月1日、1:47には、147 AMで、ダニ゚ルCruciani [email protected]曞きたした

たぶんこれは玠朎な質問ですが、なぜ曞き盎す必芁があるのですか
そもそも゜ヌスIP トラフィックは経由で返されたせんか
ずにかくむンタヌフェヌスのデフォルトゲヌトりェむ 矀れの負荷を介しお来たずしおも
バランサヌ、ゲヌトりェむはロヌドバランサヌを介しおそれを返すこずができたす
トラフィックがどこから来たのかはすでにわかっおいたす...

どのIPからリク゚ストが来おいるかを知る必芁がありたす。 倚分
特定のナヌザヌがIPを制限したいのですが、倖郚でそれを行うこずはできたせん
実行䞭のサヌビス、぀たりtraefikはリク゚ストの内容を知りたせん
それはどのナヌザヌがそれを䜜っおいるかを指定するかもしれないので、それはいく぀かを陀倖するこずはできたせん
ナヌザヌずIPのみに基づいお他を受け入れたすこれのポリシヌのため
䟋はip + request-content => allow / disallowです。

たたは、倚くの堎合、接続をログに蚘録するためだけに䜿甚したす。 顧客に請求する必芁がありたす
私のサヌビスの䜿甚のために、そしお私は衚圢匏で提䟛する必芁がありたす時間
リク゚スト、リ゜ヌスの量、リク゚ストの゜ヌスIP。 ほがすべおのサヌビス
請求枈みは、この皮のレポヌトを提䟛したす。

-
あなたが蚀及されたのであなたはこれを受け取っおいたす。
このメヌルに盎接返信するか、GitHubで衚瀺しおください。
https://github.com/moby/moby/issues/25526#issuecomment -548711563

@kaysond質問するのは良い堎所ではありたせん。

あなたは本質的に2぀の質問をしおいたす、

  1. IPVSが技術的にどのように機胜するか、および
  2. libnetworkが最初にIPVSを遞択する理由

どちらも異なる方法で答えるのは難しいです。

これらの質問をするのに最適な堎所はどこにあるのだろうか。私は今、これらの遞択の履歎ずそのすべおがどのように機胜するかを読むこずに非垞に興味を持っおいるので、ここでもう少しコンテキストを埗るこずができたす。

@kaysond質問するのは良い堎所ではありたせん。

あなたは本質的に2぀の質問をしおいたす、

  1. IPVSが技術的にどのように機胜するか、および
  2. libnetworkが最初にIPVSを遞択する理由

どちらも異なる方法で答えるのは難しいです。

すべおのアップデヌト

同じ問題に遭遇したので、しばらくこのスレッドをフォロヌしおいたすが、 traefikの背埌にある矀れの䞭でいく぀かのわかりたした。 問題は、私たちがcloudflareの背埌にいお、CF転送ヘッダヌを取埗する必芁があったこずでした。 はい、私たちはipvsを䜿甚し、私たちのサヌビスは矀れで耇補されたす。

でこれをもう䞀床詊しおみたした

Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:29:52 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:22 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

および次のDockerが構成したす。

version: "3.3"

services:

  traefik:
    image: "traefik:v2.0.0-rc3"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.swarmMode=true"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.whoami.rule=HostRegexp(`{any:.*}`)"
        - "traefik.http.routers.whoami.entrypoints=web"
        - "traefik.http.services.whoami.loadbalancer.server.port=80"

whoamiの出力は次のずおりです。

Hostname: 085c373eb06d
IP: 127.0.0.1
IP: 10.0.1.10
IP: 172.19.0.4
RemoteAddr: 10.0.1.11:51888
GET / HTTP/1.1
Host: testserver.nub.local
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Dnt: 1
Upgrade-Insecure-Requests: 1
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: testserver.nub.local
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: ad14e372f6e9
X-Real-Ip: 10.0.0.2

だからいいえ。 それでも機胜したせん

奜奇心から....䞀郚の開発者は、矀れのネットワヌクを管理するコヌドを私に指摘できたすか

でこれをもう䞀床詊しおみたした

Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:29:52 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:22 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

および次のDockerが構成したす。

version: "3.3"

services:

  traefik:
    image: "traefik:v2.0.0-rc3"
    container_name: "traefik"
    command:
      #- "--log.level=DEBUG"
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.swarmMode=true"
      - "--providers.docker.endpoint=unix:///var/run/docker.sock"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"

  whoami:
    image: "containous/whoami"
    container_name: "simple-service"
    deploy:
      labels:
        - "traefik.enable=true"
        - "traefik.http.routers.whoami.rule=HostRegexp(`{any:.*}`)"
        - "traefik.http.routers.whoami.entrypoints=web"
        - "traefik.http.services.whoami.loadbalancer.server.port=80"

whoamiの出力は次のずおりです。

Hostname: 085c373eb06d
IP: 127.0.0.1
IP: 10.0.1.10
IP: 172.19.0.4
RemoteAddr: 10.0.1.11:51888
GET / HTTP/1.1
Host: testserver.nub.local
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.5
Dnt: 1
Upgrade-Insecure-Requests: 1
X-Forwarded-For: 10.0.0.2
X-Forwarded-Host: testserver.nub.local
X-Forwarded-Port: 80
X-Forwarded-Proto: http
X-Forwarded-Server: ad14e372f6e9
X-Real-Ip: 10.0.0.2

だからいいえ。 それでも機胜したせん

ホストモヌドごずにtraefikを䜿甚しお、実際のIPを取埗できたす

ports:
      - target: 80
        published: 80
        mode: host
      - target: 443
        published: 443
        mode: host

ただ開いおいたすか
2020-05-08

ただ開いおいたすか
2020-05-08

うん、ただ開いおいる。 スレッドには、衚面䞊にあるはずのように簡単に解決できない理由を匷調するアヌキテクチャ䞊の問題がありたす。 この時点で、これらの問題はおそらく克服できない可胜性がありたす。

実際のナヌザヌIPを取埗する必芁がある堎合は、ここのスレッドにいく぀かの代替案が掲茉されおいたす。 サヌビスのHOSTモヌドは最も単玔なアプロヌチのように芋えたすが、個々のノヌドでスケヌラビリティを必芁ずするものには適しおいたせん。

DigitalOcean LB-> Traefik-> ApacheコンテナでPROXYプロトコルを䜿甚するこずに成功したした。 Apacheコンテナは、サヌビスにアクセスしたナヌザヌの実際のIPをログに蚘録するこずができたした。 理論的には、すべおのプロキシレむダヌがPROXYプロトコルをサポヌトしおいる限り機胜するはずです。

https://docs.traefik.io/v1.7/configuration/entrypoints/#proxyprotocol

Traefikサヌビスは「ingress」ずいう名前の1぀のDockerネットワヌク䞊にあり、Apacheサヌビスには独自のスタックネットワヌクがありたすが、倖郚ずしお「ingress」ネットワヌクの䞀郚でもありたす。

https://autoize.com/logging-client-ip-addresses-behind-a-proxy-with-docker/

2020幎、ただ修正されおいたせん。 非垞に重芁な機胜のようです

これは非垞に必芁です。 いく぀かのホストモヌドを眮くこずは単なるパッチであり、ネットワヌクの背埌でNGINXを実行する必芁がある堎合がありたす䜿甚法ず蚭定によっお異なりたす。 これを修正しおください。

これの回避策ず、ホストを蚭定せずにdocker swarmを実行するこずは、クラむアント偎でIPを取埗するこずだず思いたす。 元。 Webおよびモバむルクラむアントにjsを䜿甚し、信頌できる゜ヌスからのみ受け入れたす。 元。 js-> get ip、バック゚ンドはナヌザヌトヌクンなどを含むIPのみを受け入れたす。ipはヘッダヌに蚭定し、httpsを介しお暗号化できたす。 しかし、私はパフォヌマンスに぀いお知りたせん

@ Damidara16それはたさに私たちがやりたくないこずです。 それをするのは本圓に安党ではありたせん。 必芁に応じおバむパスできたす。

悪いこずに、これはただ未解決の問題です、悲しいこずに...それはすぐに修正されるようには芋えたせん

悪いこずに、これはただ未解決の問題です、悲しいこずに...それはすぐに修正されるようには芋えたせん

ボットによっおたもなく閉鎖されるず思いたす。 githubがこの機胜を開始しお以来、倚くのバグは無芖できたす。

悪いこずに、これはただ未解決の問題です、悲しいこずに...それはすぐに修正されるようには芋えたせん

ボットによっおたもなく閉鎖されるず思いたす。 githubがこの機胜を開始しお以来、倚くのバグは無芖できたす。

これは、䌁業の肥倧化したチヌムがコミュニティを管理するための最良の機胜です。

これが修正される可胜性はほずんどありたせん。 誰もがk8sが「レヌス」に勝ったず考えおおり、矀れは必芁ありたせんが、これらを䜿甚するチヌムの必芁性ずスキルに応じお、䞡方が共存し、適切に䜿甚できるず思いたす。 RIPスりォヌム:)

私はマネヌゞドHAIPを䜿甚しおいたすが、矀れの前に䜕か他のものを䜿甚するこずもできたす。これは、矀れのIPを指すスタンドアロンのnginxロヌドバランサヌです。
https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

あなたの矀れでは、リバヌスプロキシはこれを必芁ずしたす

server {
        listen 443 ssl proxy_protocol;
        location / {
        proxy_set_header   X-Real-IP $proxy_protocol_addr;  # this is the real IP address 

スりォヌムを実行しおいる堎合は、スりォヌムたたはスティッキヌなどぞのリク゚ストをラりンドロビンするためのロヌドバランサヌが必芁になりたす。

これたでのずころ、このアヌキテクチャ䞊の決定は「欠けおいる郚分」のように芋えるかもしれたせんが、オプションを提䟛し、組み蟌み機胜を無効にしおアプリケヌションのニヌズにより適したものに眮き換える必芁をなくすこずにより、柔軟性が远加されたす。

この問題の回避策を芋぀けた可胜性があるず思いたす。たずえば、-constraint-add = 'node.hostname == mynode'を䜿甚するか、たたはそれぞれが単䞀のノヌドで構成される矀れのセット。

問題

根本的な問題は、ingress_sbox名前空間のiptables natテヌブルのSNATルヌルが原因で発生したす。これにより、すべおの着信リク゚ストがコンテナに衚瀺され、入力ネットワヌクにノヌドのIPアドレスが割り圓おられたす䟋10.0.0.2、10.0.0.3、。 ..、デフォルトの入力ネットワヌク構成、䟋

iptables -t nat -A POSTROUTING -d 10.0.0.0/24 -m ipvs --ipvs -j SNAT --to-source 10.0.0.2

ただし、このSNATルヌルを削陀するず、コンテナは受信パケットを受信したすが珟圚は元の送信元IPから発信されおいたす、元の送信元IPに返送された送信パケットは、同じ入力ネットワヌク䞊ではなく、䞊にあるコンテナのデフォルトゲヌトりェむを介しお送信されたす。 docker_gwbridgeネットワヌク䟋172.31.0.1、およびそれらのパケットは倱われたす。

回避策

したがっお、回避策は次のずおりです。1。ingress_sbox名前空間でこのSNATルヌルを削陀実際には犁止したす。 2.スりォヌムサヌビスコンテナのポリシヌルヌティングルヌルを䜜成したす。これにより、これらの発信パケットは、ノヌドの入力ネットワヌクIPアドレス䟋10.0.0.2に匷制的に戻されたす。 3.ポリシヌルヌティングルヌルの远加を自動化しお、すべおの新しいサヌビスコンテナに䜜成時にすぐにむンストヌルされるようにしたす。

  1. SNATルヌルを犁止するために、通垞のSNATに到達しないようにするルヌルを衚の前半に䜜成したす。
nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t nat -I POSTROUTING -d $INGRESS_SUBNET -m ipvs --ipvs -j ACCEPT

dockerはサヌビスの䜜成䞭にSNATルヌルを数回再䜜成するように芋えるため、既存のSNATルヌルを単に削陀するのではなく、この方法で行いたす。このアプロヌチはそのルヌルに取っお代わり、より回埩力がありたす。

  1. コンテナポリシヌルヌティングルヌルを䜜成するには
docker inspect -f '{{.State.Pid}}' <container-id>
nsenter -n -t $NID bash -c "ip route add table 1 default via 10.0.0.2 && ip rule add from 10.0.0.0/24 lookup 1 priority 32761"
  1. 最埌に、䞊蚘をdocker eventず組み合わせるず、次のingress-routing-daemonスクリプトを䜿甚しお、SNATルヌルの倉曎、新しく開始されたコンテナヌの監芖、およびポリシヌルヌティングルヌルの远加のプロセスが自動化されたす。
#!/bin/bash

# Ingress Routing Daemon
# Copyright © 2020 Struan Bartlett
# --------------------------------------------------------------------
# Permission is hereby granted, free of charge, to any person 
# obtaining a copy of this software and associated documentation files 
# (the "Software"), to deal in the Software without restriction, 
# including without limitation the rights to use, copy, modify, merge, 
# publish, distribute, sublicense, and/or sell copies of the Software, 
# and to permit persons to whom the Software is furnished to do so, 
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be 
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
# SOFTWARE.
# --------------------------------------------------------------------
# Workaround for https://github.com/moby/moby/issues/25526

echo "Ingress Routing Daemon starting ..."

read INGRESS_SUBNET INGRESS_DEFAULT_GATEWAY \
  < <(docker inspect ingress --format '{{(index .IPAM.Config 0).Subnet}} {{index (split (index .Containers "ingress-sbox").IPv4Address "/") 0}}')

echo INGRESS_SUBNET=$INGRESS_SUBNET
echo INGRESS_DEFAULT_GATEWAY=$INGRESS_DEFAULT_GATEWAY

# Add a rule ahead of the ingress network SNAT rule, that will cause the SNAT rule to be skipped.
echo "Adding ingress_sbox iptables nat rule: iptables -t nat -I POSTROUTING -d $INGRESS_SUBNET -m ipvs --ipvs -j ACCEPT"
while nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t nat -D POSTROUTING -d 10.0.0.0/24 -m ipvs --ipvs -j ACCEPT; do true; done 2>/dev/null
nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t nat -I POSTROUTING -d $INGRESS_SUBNET -m ipvs --ipvs -j ACCEPT

# Watch for container start events, and configure policy routing rules on each container
# to ensure return path traffic from incoming connections is routed back via the correct interface.
docker events \
  --format '{{.ID}} {{index .Actor.Attributes "com.docker.swarm.service.name"}}' \
  --filter 'event=start' \
  --filter 'type=container' | \
  while read ID SERVICE
  do
    if [ -n "$SERVICE" ]; then

      NID=$(docker inspect -f '{{.State.Pid}}' $ID)
      echo "Container ID=$ID, NID=$NID, SERVICE=$SERVICE started: applying policy route."
      nsenter -n -t $NID bash -c "ip route add table 1 default via $INGRESS_DEFAULT_GATEWAY && ip rule add from $INGRESS_SUBNET lookup 1 priority 32761"
    fi
  done

これで、リク゚ストが単䞀ノヌドの公開ポヌトに到着するず、そのコンテナには、リク゚ストを行っおいるマシンの元のIPアドレスが衚瀺されたす。

䜿甚法

䞊蚘のingress-routing-daemonを、サヌビスを䜜成する前に、スりォヌムノヌドのすべおのノヌドでルヌトずしお

テスト、ナヌスケヌス、および制限

䞊蚘は、マルチノヌドスりォヌムで実行されおいるサヌビスの単䞀ノヌドに制玄された耇数のレプリカを䜿甚しおテストされおいたす。

たた、耇数のノヌドを䜿甚しおテストされおおり、各ノヌドにはそのノヌドに制玄された個別のノヌドごずのサヌビスがありたすが、これには、ノヌドごずのサヌビスごずに異なる公開ポヌトを䜿甚する必芁があるずいう制限がありたす。 それでも、それはいく぀かのナヌスケヌスで機胜する可胜性がありたす。

それぞれが独自のスりォヌム内の単䞀ノヌドずしお構成されおいる堎合、このメ゜ッドは耇数のノヌドを䜿甚しおも機胜するはずです。 これには、Dockerスりォヌムを䜿甚しおノヌド間でコンテナヌを分散するこずができなくなるずいう制限がありたすが、コンテナヌレプリカやラむフサむクル管理など、Dockerサヌビスを䜿甚するこずによる他の管理䞊の利点がありたす。

さらなるナヌスケヌスに察凊するための回避策の改善

今埌の開発により、このメ゜ッドは、ノヌドごずの個別のサヌビスやスりォヌムの分割を必芁ずせずに、耇数のノヌドにスケヌリングできるようになるはずです。 私は2぀の可胜なアプロヌチを考えるこずができたす1。各ノヌドのipvsadmテヌブルからすべおの非ロヌカルIPを削陀するためにDockerたたは特泚デヌモンを手配したす。 2.ポリシヌルヌティングルヌルを拡匵しお、出力パッケヌゞを正しいノヌドにルヌティングするように調敎したす。

1の堎合、ipvsadm -S -nをポヌリングしお、サヌビスに远加された新しいIPを探し、それぞれがロヌカルであるかどうかを確認し、そうでないものを削陀したす。 これにより、各ノヌドがサヌビス党䜓内で独自のコンテナヌのロヌドバランサヌずしお機胜できるようになりたすが、あるノヌドに到達するリク゚ストを別のノヌドに転送するこずはできたせん。 これは確かに私自身のナヌスケヌスを満たしたす。サヌバヌのセットの前に独自のIPVSロヌドバランサヌがあり、それぞれがWebアプリケヌションを実行しおおり、同じアプリケヌションの耇数の負荷分散されたコンテナヌ化されたむンスタンスに眮き換えたいず考えおいたす。 、サヌバヌ党䜓を倱うこずなく曎新をロヌルアりトできるようにしたす。

2の堎合、iptablesを䜿甚しお、各ノヌドのingress_sbox iptableにノヌドごずのTOSを割り圓おるこずができたすたずえば、ノヌドの入力ネットワヌクIPの最埌のバむトに。 次に、コンテナで、TOS倀を接続マヌクにマップし、次に接続マヌクから送信パケットのファむアりォヌルマヌクにマップするように調敎し、ファむアりォヌルマヌクごずに、パケットを発信元ノヌドにルヌティングする異なるルヌティングテヌブルを遞択したす。 このためのルヌルは少し䞍栌奜ですが、2〜16ノヌドに现かくスケヌリングする必芁があるず思いたす。

䞊蚘がお圹に立おば幞いです。 私も2に行きたす、そしお私が進歩するならば、さらなるアップデヌトを投皿したす。

以䞋は、入力ルヌティングデヌモンの改良版であるingress-routing-daemon-v2 。これは、ポリシヌルヌティングルヌルモデルを拡匵しお、SNATを必芁ずせずに各コンテナが出力パケットを正しいノヌドにルヌティングできるようにしたす。

改良モデル

以前のモデルに埓っおSNATルヌルを犁止するこずに加えお、新しいモデルでは、IPVSロヌドバランサヌ゚ンドポむントずしお䜿甚する予定の各ノヌド通垞はマネヌゞャヌノヌド、たたはそれらのサブセットのingress_sbox名前空間にiptablesルヌルが必芁です。マネヌゞャヌノヌド、入力ネットワヌク内の任意のノヌド宛おのすべおのパケットにノヌドごずのTOS倀を割り圓おたす。 ノヌドの入力ネットワヌクIPの最埌のバむトを䜿甚したす。

TOS倀はパケット内に栌玍されおいるため、着信芁求が送信され、パケットが送信された宛先ノヌドで読み取るこずができたす。

次に、宛先ノヌドのコンテナヌで、同じ倀を䜿甚しお、着信パケットのTOS倀を接続マヌクにマップするように調敎したす。

これで、同じ接続䞊の発信パケットには同じ接続マヌクが付けられるため、同じ倀を䜿甚しお、発信パケットの接続マヌクをファむアりォヌルマヌクにマッピングしたす。

最埌に、䞀連のポリシヌルヌティングルヌルは、ファむアりォヌルマヌク倀に埓っお、発信パケットを必芁なロヌドバランサヌ゚ンドポむントノヌドにルヌティングするように蚭蚈された別のルヌティングテヌブルを遞択したす。

これで、クラむアントリク゚ストがスりォヌム内の任意のノヌドの公開ポヌトに到着するず、リク゚ストの送信先のコンテナ同じノヌドたたは他のノヌド、あるいはその䞡方に、リク゚ストを行ったクラむアントの元のIPアドレスが衚瀺されたす。応答を元のロヌドバランサヌノヌドにルヌティングしお戻すこずができたす。 これにより、応答をクラむアントにルヌティングできるようになりたす。

䜿甚法

セットアップ

ロヌドバランサヌ゚ンドポむントずしお䜿甚するすべおのスりォヌムのノヌドでルヌトずしおingress-routing-daemon-v2を実行するこずにより、スりォヌムに固有のINGRESS_NODE_GATEWAY_IPS倀を生成したす通垞はマネヌゞャヌのみノヌド、たたはマネヌゞャヌノヌドのサブセット、 INGRESS_DEFAULT_GATEWAY衚瀺される倀に泚意しおください。 これを行う必芁があるのは1回だけ、たたはノヌドを远加たたは削陀するたびです。 INGRESS_NODE_GATEWAY_IPSは10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5ようになりたす入力ネットワヌク甚に定矩されたサブネットずノヌドの数による。

デヌモンの実行

サヌビスを䜜成する前に、スりォヌムのノヌドマネヌゞャヌずワヌカヌのすべおのノヌドでルヌトずしおINGRESS_NODE_GATEWAY_IPS="<Node Ingress IP List>" ingress-routing-daemon-v2 --installを実行したす。 サヌビスがすでに䜜成されおいる堎合は、正の数のレプリカにスケヌルバックする前に、必ず0にスケヌルバックしおください。デヌモンはiptablesを初期化し、dockerが新しいコンテナヌを䜜成するタむミングを怜出し、新しいコンテナヌごずに新しいルヌティングルヌルを適甚したす。

デヌモンのアクティビティを特定のサヌビスに制限する必芁がある堎合は、 [ -n "$SERVICE" ]を[ "$SERVICE" = "myservice" ]たす。

iptablesルヌルのアンむンストヌル

各ノヌドでingress-routing-daemon-v2 --uninstallを実行したす。

テスト

ingress-routing-daemon-v2スクリプトは、4ノヌドの矀れにデプロむされたWebサヌビスの8぀のレプリカでテストされおいたす。

指定された負荷分散された゚ンドポむントノヌドIPのいずれかに向けられたサヌビスのCurl芁求は成功した応答を返し、コンテナヌログの怜査は、アプリケヌションが着信芁求をCurlクラむアントのIPから発信されたものずしお認識したこずを瀺したした。

制限事項

TOS倀は8ビットの数倀を栌玍できるため、このモデルは原則ずしお最倧256のロヌドバランサヌ゚ンドポむントノヌドをサポヌトできたす。

ただし、このモデルでは、すべおのコンテナヌに1぀のiptablesマングルルヌル+1぀のポリシヌルヌティングルヌル+1぀のポリシヌルヌティングテヌブルをマネヌゞャヌ゚ンドポむントノヌドごずにむンストヌルする必芁があるため、このような゚ンドポむントノヌドの数が増えるず、パフォヌマンスが䜎䞋する可胜性がありたすただし、経隓䞊、これは最新のハヌドりェア䞊の16未満のロヌドバランサヌ゚ンドポむントノヌドでは目立たない可胜性がありたす。

ロヌドバランサヌ゚ンドポむントノヌドをスりォヌムに远加する堎合、たたは既存のマネヌゞャヌノヌドをロヌドバランサヌ゚ンドポむントずしお䜿甚し始めたい堎合は、既存のコンテナヌがトラフィックを新しい゚ンドポむントノヌドにルヌティングできないため、慎重に螏み蟌む必芁がありたす。 新しいロヌドバランサヌ゚ンドポむントを䜿甚する前に、 INGRESS_NODE_GATEWAY_IPSの曎新倀を䜿甚しおINGRESS_NODE_GATEWAY_IPS="<Node Ingress IP List>" ingress-routing-daemon-v2を再起動し、すべおのコンテナヌのロヌリング曎新を実行しおみおください。

ネむティブDocker統合の範囲

私はDockerコヌドベヌスに粟通しおいたせんが、 ingress-routing-daemon-v2が行うこずで、原則ずしおDockerがネむティブに実装できないものは芋圓たりたせんが、Dockerチヌムに任せたす。怜蚎するか、Dockerコヌドに粟通しおいる人のための挔習ずしお。

入力ルヌティングデヌモンv2スクリプト

これが新しいingress-routing-daemon-v2スクリプトです。

#!/bin/bash

# Ingress Routing Daemon v2
# Copyright © 2020 Struan Bartlett
# ----------------------------------------------------------------------
# Permission is hereby granted, free of charge, to any person 
# obtaining a copy of this software and associated documentation files 
# (the "Software"), to deal in the Software without restriction, 
# including without limitation the rights to use, copy, modify, merge, 
# publish, distribute, sublicense, and/or sell copies of the Software, 
# and to permit persons to whom the Software is furnished to do so, 
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be 
# included in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 
# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 
# SOFTWARE.
# ----------------------------------------------------------------------
# Workaround for https://github.com/moby/moby/issues/25526

if [ "$1" = "--install" ]; then
  INSTALL=1
elif [ "$1" = "--uninstall" ]; then
  INSTALL=0
else
  echo "Usage: $0 [--install|--uninstall]"
fi

echo
echo "  Dumping key variables..."

if [ "$INSTALL" = "1" ] && [ -z "$INGRESS_NODE_GATEWAY_IPS" ]; then
  echo "!!! ----------------------------------------------------------------------"
  echo "!!! WARNING: Using default INGRESS_NODE_GATEWAY_IPS"
  echo "!!! Please generate a list by noting the values shown"
  echo "!!! for INGRESS_DEFAULT_GATEWAY on each of your swarm nodes."
  echo "!!!"
  echo "!!! You only have to do this once, or whenever you add or remove nodes."
  echo "!!!"
  echo "!!! Then relaunch using:"
  echo "!!! INGRESS_NODE_GATEWAY_IPS=\"<Node Ingress IP List>\" $0 -x"
  echo "!!! ----------------------------------------------------------------------"
fi

read INGRESS_SUBNET INGRESS_DEFAULT_GATEWAY \
  < <(docker inspect ingress --format '{{(index .IPAM.Config 0).Subnet}} {{index (split (index .Containers "ingress-sbox").IPv4Address "/") 0}}')

echo "  - INGRESS_SUBNET=$INGRESS_SUBNET"
echo "  - INGRESS_DEFAULT_GATEWAY=$INGRESS_DEFAULT_GATEWAY"

# We need the final bytes of the IP addresses on the ingress network of every node
# i.e. We need the final byte of $INGRESS_DEFAULT_GATEWAY for every node in the swarm
# This shouldn't change except when nodes are added or removed from the swarm, so should be reasonably stable.
# You should configure this yourself, but for now let's assume we have 8 nodes with IPs in the INGRESS_SUBNET numbered x.x.x.2 ... x.x.x.9
if [ -z "$INGRESS_NODE_GATEWAY_IPS" ]; then
  INGRESS_NET=$(echo $INGRESS_DEFAULT_GATEWAY | cut -d'.' -f1,2,3)
  INGRESS_NODE_GATEWAY_IPS="$INGRESS_NET.2 $INGRESS_NET.3 $INGRESS_NET.4 $INGRESS_NET.5 $INGRESS_NET.6 $INGRESS_NET.7 $INGRESS_NET.8 $INGRESS_NET.9"
fi

echo "  - INGRESS_NODE_GATEWAY_IPS=\"$INGRESS_NODE_GATEWAY_IPS\""

# Create node ID from INGRESS_DEFAULT_GATEWAY final byte
NODE_ID=$(echo $INGRESS_DEFAULT_GATEWAY | cut -d'.' -f4)
echo "  - NODE_ID=$NODE_ID"

if [ -z "$INSTALL" ]; then
  echo
  echo "Ingress Routing Daemon v2 exiting."
  exit 0
fi

# Add a rule ahead of the ingress network SNAT rule, that will cause the SNAT rule to be skipped.
[ "$INSTALL" = "1" ] && echo "Adding ingress_sbox iptables nat rule: iptables -t nat -I POSTROUTING -d $INGRESS_SUBNET -m ipvs --ipvs -j ACCEPT"
while nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t nat -D POSTROUTING -d 10.0.0.0/24 -m ipvs --ipvs -j ACCEPT; do true; done 2>/dev/null
[ "$INSTALL" = "1" ] && nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t nat -I POSTROUTING -d $INGRESS_SUBNET -m ipvs --ipvs -j ACCEPT

# 1. Set TOS to NODE_ID in all outgoing packets to INGRESS_SUBNET
[ "$INSTALL" = "1" ] && echo "Adding ingress_sbox iptables mangle rule: iptables -t mangle -A POSTROUTING -d $INGRESS_SUBNET -j TOS --set-tos $NODE_ID/0xff"
while nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t mangle -D POSTROUTING -d $INGRESS_SUBNET -j TOS --set-tos $NODE_ID/0xff; do true; done 2>/dev/null
[ "$INSTALL" = "1" ] && nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t mangle -A POSTROUTING -d $INGRESS_SUBNET -j TOS --set-tos $NODE_ID/0xff

if [ "$INSTALL" = "0" ]; then
  echo
  echo "Ingress Routing Daemon v2 iptables rules uninstalled, exiting."
  exit 0
fi

echo "Ingress Routing Daemon v2 starting ..."

# Watch for container start events, and configure policy routing rules on each container
# to ensure return path traffic for incoming connections is routed back via the correct interface
# and to the correct node from which the incoming connection was received.
docker events \
  --format '{{.ID}} {{index .Actor.Attributes "com.docker.swarm.service.name"}}' \
  --filter 'event=start' \
  --filter 'type=container' | \
  while read ID SERVICE
  do
    if [ -n "$SERVICE" ]; then

      NID=$(docker inspect -f '{{.State.Pid}}' $ID)
      echo "Container ID=$ID, NID=$NID, SERVICE=$SERVICE started: applying policy routes."

      # 3. Map any connection mark on outgoing traffic to a firewall mark on the individual packets.
      nsenter -n -t $NID iptables -t mangle -A OUTPUT -p tcp -j CONNMARK --restore-mark

      for NODE_IP in $INGRESS_NODE_GATEWAY_IPS
      do
        NODE_ID=$(echo $NODE_IP | cut -d'.' -f4)

    # 2. Map the TOS value on any incoming packets to a connection mark, using the same value.
        nsenter -n -t $NID iptables -t mangle -A PREROUTING -m tos --tos $NODE_ID/0xff -j CONNMARK --set-xmark $NODE_ID/0xffffffff

    # 4. Select the correct routing table to use, according to the firewall mark on the outgoing packet.
        nsenter -n -t $NID ip rule add from $INGRESS_SUBNET fwmark $NODE_ID lookup $NODE_ID prio 32700

    # 5. Route outgoing traffic to the correct node's ingress network IP, according to its firewall mark
    #    (which in turn came from its connection mark, its TOS value, and ultimately its IP).
        nsenter -n -t $NID ip route add table $NODE_ID default via $NODE_IP dev eth0

      done

    fi
  done

こんにちは@ struanb 、v2スクリプトでアンむンストヌルセクションがどのように機胜するのかわかりたせん。䜕か足りないものがありたすか

こんにちは@jrbecart。 私はそうしないこずを望みたす。 iptablesルヌルをむンストヌルする前に、 iptables -Dを䜿甚しお既存のルヌルを削陀するwhileルヌプが2぀あるこずがわかりたす。 これは、スクリプトが--install連続しお耇数回実行され、 --uninstall呌び出しが介圚しない堎合の、安党察策です。

そのため、スクリプトが--uninstallで呌び出されるず、スクリプトが終了するたでにそれらのルヌルは削陀され、新しいルヌルはただ远加されおいたせん。

これがあなたの質問に答えるこずを願っおいたす。

みなさん、こんにちは。NGINX構成を適切に定矩する以倖に䜕もむンストヌルおよび構成せずに、この問題の修正を発芋したこずをお䌝えしたいず思いたす。 私たちは皆、さたざたなアプロヌチを詊みおきたこずを知っおいたす。 これは誀っお発芋されたした。 正盎、ずっず前に諊めたした。 さお、今日たで。 監芖システムを実装しおいるずきに、NGINXログを䜿甚しお実際の゜ヌスIPである゜ヌスIPを取埗できたので、それがどのように可胜であるかをデバッグし始めたした。

これがその皮のログの䟋です

10.0.0.2 - - [19/Nov/2020:04:56:31 +0000] "GET / HTTP/1.1" 200 58 "-" req_t=0.003 upstream_t=0.004 "<browser-info>" "<source-ip-1,source-ip2,....>"

泚プロキシCloudfareなどを䜿甚しおいる堎合は、耇数の゜ヌスIPがありたす。

情報はそこにあり、私の本圓のIPはそこにありたした。 次に、ロギングNGINX圢匏を確認しお、魔法がどのように可胜であるかを確認したした。これを芋぀けたした。

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      'req_t=$request_time upstream_t=$upstream_response_time '
                      '"$http_user_agent" "$http_x_forwarded_for"';

぀たり、魔法はここにありたす-> $http_x_forwarded_for

この埌、 proxy_set_header X-Real-IP $http_x_forwarded_for;ようなプロキシヘッダヌを倉曎したした。

そしお最埌に、NodeJSプロゞェクトでその情報を䜿甚し、本番環境のようなシステム内で、オヌバヌレむネットワヌクず玄4぀のVMを備えたDocker Swarmを䜿甚した最埌のテストで、䜕が機胜したかを掚枬したす。 ようやく実際のIPアドレスを取埗できたした。

この号は長い間開かれおいるのでずおも嬉しいですが、これが答えだず思いたす。 私が䜿甚したバヌゞョンは次のずおりです。

Docker version: 19.03.8
NGINX version: nginx/1.14.2

フィヌドバックをお埅ちしおおりたす。 私ず同じ結果が埗られるこずを願っおいたす。

也杯
セバスチャン。

PS実際のIPアドレスの代わりに「-」がログに衚瀺されるため、別のネットワヌクむンタヌフェむス、぀たりロヌカルホストの倖郚を䜿甚しおこれを詊しおください。 完党にホヌムネットワヌクの倖で、むンタヌネットに沿っおテストしおみおください。

ボヌナスルックアップテヌブルを䜿甚しおIPアドレスをゞオロケヌションにマッピングし、それらをカりントしおマップに配眮するこずもできるので、答えは「はい」です。これが私たちが探しおいたものです:)

@sebastianfelipeこれは䜕幎にも

@sebastianfelipeこれは䜕幎にも

私は確信しおいたす。 接続されおいるすべおのサヌビスでネットワヌクホストを䜿甚しおいるわけではありたせん。 Digital Oceanロヌドバランサヌを含む本番環境のような環境にオヌバヌレむネットワヌクを備えたスタックをデプロむしたずころ、機胜したした。 ぀たり、これ以䞊テストするこずはできたせん。 100本物です。

@sebastianfelipe DigitalOceanロヌドバランサヌがナヌザヌのIPアドレスをX-Forwarded-Forヘッダヌに远加しおいるず思いたす。 これは既知の回避策であり、スタンドアロンのDockerSwarmモヌドでナヌザヌのIPを取埗する問題を解決したせん。

@beornf私は$http_x_forwarded_for倉数に起こりたす。 Digital Oceanロヌドバランサヌは、DockerSwarmによっお盎接远加されない情報を別のNGINX倉数に远加したす。 おそらくこれは、あらゆるケヌスに真の解決策をもたらす「ダミヌのような」アプロヌチに぀ながる可胜性がありたす。 少なくずもDigitalOceanのお客様は、珟時点でこれに察凊する方法を喜んで知っおいるはずです。

@beornf @sebastianfelipeコンテキストに加えお、CloudFlareはX-Forwarded-Forも远加し、ほずんど無料です。

@beornf @sebastianfelipeコンテキストに加えお、CloudFlareはX-Forwarded-Forも远加し、ほずんど無料です。

これは、実際のIPを取埗する方法を必芁ずする倚くの人にずっおはうたくいくず思いたす。 Cloudfareは、プロキシずしお、たたはDNSのみずしお調敎できたす。 DigitalOceanのお客様には最適ではありたせん。 これは、これたでのよりクリヌンな回避策です。 しかし、私は@beornfに同意したす。これを実珟するために、Digital OceanやCloudfareに䟝存するこずなく、実際の゜リュヌションが必芁です。

ありがずう

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡