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, ๋ฌผ๋ฆฌ์ ๋ฑ):
๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋จ๊ณ:
docker service create \
--name debugging-simple-server \
--publish 80:3000 \
panj/debugging-simple-server
http://<public-ip>/
์ฐ๊ฒฐํด ๋ณด์ธ์.๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช
ํ์ญ์์ค.
ip
๋ header.x-forwarded-for
๋ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์์ IP ์ฃผ์๊ฐ ์๋๋๋ค.
์์ํ ๊ฒฐ๊ณผ๋ฅผ ์ค๋ช
ํ์ธ์.
ip
๋๋ header.x-forwarded-for
๋ ์ฌ์ฉ์์ IP ์ฃผ์์ฌ์ผ ํฉ๋๋ค. ์์ ๊ฒฐ๊ณผ๋ ๋
๋ฆฝํ ๋์ปค ์ปจํ
์ด๋ 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
๋ชจ๋ ๋ชจ๋์์ ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๊ฒ์ ๋์ณค๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๊ทธ ๋์ Swarm ๋ชจ๋ ์ธ๋ถ์์ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ํํ๊ณ Swarm ๋ชจ๋์์ ๊ฒ์๋ ํฌํธ๋ก ์ ๋ฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(SSL ์ข ๋ฃ๋ ์ด ์ปจํ ์ด๋์์ ์ํ๋์ด์ผ ํจ). ์ด๋ Swarm์ ๋ชฉ์ ์ ๊นจ๋จ๋ฆฝ๋๋ค. ์๊ฐ ์น์ ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ์ ์ํ ๋ชจ๋์ ๋๋ค.
/ cc @aluzzardi @mrjana๊ฐ ๋ฌผ์๋ค
@PanJ debug-simple-server๊ฐ ip
๊ฒฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ธ๋ถ ์ ๋ณด๋ฅผ ๊ณต์ ํด ์ฃผ์๊ฒ ์ต๋๊น? ๋ํ ์๋น์ค๊ฐ ์ฌ๋ฌ ํธ์คํธ(๋๋ ์ ์ญ ๋ชจ๋)์์ 2๊ฐ ์ด์์ ๋ณต์ ๋ณธ์ผ๋ก ํ์ฅ๋๋ ๊ฒฝ์ฐ ์์๋๋ ์ฌํญ์ ๋ฌด์์
๋๊น?
@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 ์ธ์คํด์ค, ๋ ๋ฆฝ ์คํํ ๋ฐ Swarm ์ธ์คํด์ค๊ฐ ์์ต๋๋ค. SSL ์ข ๋ฃ ๋ฐ ์ญ๋ฐฉํฅ ํ๋ก์๋ ๋ ๋ฆฝ ์คํํ nginx์์ ์ํ๋ฉ๋๋ค. Swarm ์ธ์คํด์ค๋ ์์ฒญ ํธ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ์๋น์ค๋ก ๋ผ์ฐํ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
@PanJ ์ปจํ
์ด๋์ ๊ฒ์๋ ํฌํธ์ ์ก์ธ์คํ๋ ๋ฐฉ์์ swarm ๋ชจ๋์์ ๋ค๋ฆ
๋๋ค. Swarm ๋ชจ๋์์๋ ํด๋ฌ์คํฐ์ ๋ชจ๋ ๋
ธ๋์์ ์๋น์ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ์ฐ๋ฆฌ๋ ingress
๋คํธ์ํฌ๋ฅผ ํตํด ๋ผ์ฐํ
ํฉ๋๋ค. 10.255.0.x
๋ ๊ฒ์๋ ํฌํธ์ ์ฐ๊ฒฐํ๋ ค๋ ํด๋ฌ์คํฐ์ ํธ์คํธ์ ์๋ ingress
๋คํธ์ํฌ ์ธํฐํ์ด์ค์ ์ฃผ์์
๋๋ค.
@sanimej ๋ฌธ์ ๋ฅผ ํํค
์์ ์ฌํญ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์์ด ์ ํ์ ์ ๋๋ค. ์์ค IP ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ์ง ์๋ ํน์ํ ์ ํ์ ๋คํธ์ํฌ์ผ ์ ์์ต๋๊น?
Rancher๋ Docker swarm ๋ชจ๋์ ์ ์ฌํ๋ฉฐ ์์๋๋ ๋์์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด์ฉ๋ฉด ์์ํ๊ธฐ์ ์ข์ ๊ณณ์ผ ์๋ ์์ต๋๋ค.
@sanimej ์ข์ ์์ด๋์ด๋ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ชจ๋ IP๋ฅผ X-Forwarded-For ํค๋์ ์ถ๊ฐํ ์ ์์ผ๋ฉด ๋ชจ๋ ์ฒด์ธ์ ๋ณผ ์ ์์ต๋๋ค.
@PanJ ํ , ๊ทธ๋ฆฌ๊ณ nignx ๋ ๋ฆฝ ์คํํ ์ปจํ ์ด๋๊ฐ ์๋น์ค ์ด๋ฆ ๋๋ IP๋ฅผ ํตํด 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;
}
}
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ API RateLimit ๋ฐ ๊ธฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉ์์ IP ์ฃผ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ์ค์ ๋ชจ๋์์ ๋ฌธ์ ๋ฅผ ๊ฑด๋๋ธ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๋ํ ์ฌ๋ฌ ํธ์คํธ์์ syslog ๋ฉ์์ง๋ฅผ ์์งํ๊ธฐ ์ํด swarm ๋ชจ๋์์ logstash๋ฅผ ์คํํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. logstash "ํธ์คํธ" ํ๋๋ ์ฐ๊ฒฐ ํธ์คํธ์ ์ค์ IP ๋์ ํญ์ 10.255.0.x๋ก ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์ด๋ ํธ์คํธ์์ ์ค๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ํ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค. ์์ค IP ๋ณํ์ ํผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
์ด ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ +1์ ๋๋ค.
์ฌ์ฉ์์ IP๋ฅผ ๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์์ผ๋ฉด Prometheus์ ๊ฐ์ ๋ชจ๋ํฐ๋ง ์๋ฃจ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ง๋ ์ฌ๊ธฐ์ ๋ฆฌ๋ ์ค ์ปค๋ IPVS ๊ธฐ๋ฅ์ด ์ ์ฉํ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์ ๊ณต๊ฐ์์ ์ฐ๊ฒฐ์ด ํ๋ก์๋๊ธฐ ๋๋ฌธ์ IP ๋ณ๊ฒฝ์ด ๋ฐ์ํ๊ณ ์๋ค๊ณ ์ถ์ธกํฉ๋๋ค. ๋ฐ๋ฉด์ IPVS๋ ์์ค IP ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ปค๋ ๊ณต๊ฐ์์ ์์ฒญ์ ๋ฆฌ๋๋ ์ ํ๊ณ ๋ก๋ ๋ฐธ๋ฐ์ฑํ ์ ์์ต๋๋ค. IPVS๋ ๋ค๋ฅธ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๊ณ ๋ฆฌ์ฆ, ์ ๋ IP ์ฃผ์ ๋ฐ ์ง์ ๋ผ์ฐํ ๊ณผ ๊ฐ์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ๊ตฌ์ถํ๋ ๋ฐ์๋ ์ ์ฉํ ์ ์์ต๋๋ค.
์ ์๊ฒ๋ ๊ฐ์ IP์ ์๋ํฌ์ธํธ๊ฐ ์ํ ์๋ฒ์ IP ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ด๋ป๊ฒ๋ ์ ์ ์๋ค๋ฉด ์ถฉ๋ถํ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด Prometheus๊ฐ ์ผ๋ถ ๊ฐ์ IP์ ๊ด๋ จ๋ ๊ฒฝ๊ณ ๋ฅผ ๋ณด๋ผ ๋ ์ํฅ์ ๋ฐ๋ ์๋ฒ๊ฐ ๋ฌด์์ธ์ง ์ ์ ์์ต๋๋ค. ์ข์ ํด๊ฒฐ์ฑ ์ ์๋์ง๋ง ์๋ ๊ฒ๋ณด๋ค๋ ๋์ ๊ฒ์ ๋๋ค.
@vfarcic ๋๋ ๊ทธ๊ฒ์ด ์ง๊ธ ์๋ํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๋ชจ๋ ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ์ ๋์ผํ IP์์ ๋์ค๋ฏ๋ก ๋ค์ ๋ณํํ ์ ์์ต๋๋ค. ์๋ํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ์ฐ๊ฒฐ์ ํ๋ก์/nat๋ฅผ ์ํํ๋ ๊ฒ์ด ํ์์คํฌํ, ์์ค IP ๋ฐ ์์ค ํฌํธ์ ํจ๊ป ์ฐ๊ฒฐ ๋ก๊ทธ๋ฅผ ์ ์ฅํ ๊ฒฝ์ฐ์ ๋๋ค. ๊ทธ๋ ๋๋ผ๋ ์์ค IP๊ฐ ํ์ํ ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์์๋ ๋ณ๋ก ๋์์ด ๋์ง ์์ ๊ฒ์ ๋๋ค.
์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ ์ค๋ช ํ์ง ๋ชปํ์ ๊ฒ์ ๋๋ค.
Swarm ๊ธ๋ก๋ฒ ์๋น์ค๋ก ์คํ๋๋ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ์คํฌ๋ฉํ๋๋ก ๊ตฌ์ฑ๋ Prometheus๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์์
์ ์ฌ์ฉํฉ๋๋ค.
๋ฐฉ๊ธ "๋์ปค ๋คํธ์ํฌ ๊ฒ์ฌ
๋ค์๊ณผ ๊ฐ์ ๊ฒ:
"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๊ฐ ๋ฌธ์ ๋ฅผ ๊ฐ์งํ๋ฉด ์ฃผ์์ ์์น๋ฅผ โโ์ฐพ์ ๋๊น์ง ๊ฐ ๋
ธ๋์์ "docker network inspect"๋ฅผ ์คํํด์ผ ํฉ๋๋ค.
์์ ๋คํธ์ํฌ๊ฐ IPVS๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋
์๋ฃจ์ ์ HTTP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง ์๋ ๋ชจ๋ ์๋น์ค๊ฐ ์ฌ์ ํ ์ ๋๋ก ์๋ํ ์ ์๋๋ก IP ์์ค์์ ์๋ํด์ผ ํฉ๋๋ค(http ํค๋์ ์์กดํ ์ ์์...).
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง ๊ฐ์กฐํ์ง ์์ ์ ์์ต๋๋ค. ๊ทธ๊ฒ ์์ด๋ ์ค์ ๋ชจ๋์์ ์ ํ ์๋ํ ์ ์๋ ๋ง์ ์๋น์ค๊ฐ ์์ต๋๋ค.
์ด๊ฒ์ด HaProxy๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. http://blog.haproxy.com/2012/06/05/preserve-source-ip-address-despite-reverse-proxys/
@kobolog ๋ ๋ฐํ ์ ์์ต๋๋ค.
๋ชฉ๋ก์ ๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋ฟ์ ๋๋ค. ์ ๋ 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 IPVS๋ฅผ ์ฌ์ฉํ๋ ์ ์ฒด ์์ด๋์ด(ํ์ฌ ๋์ปค๊ฐ Swarm ๋ชจ๋์์ ์ํํ๋ ์์ ๋์ )๋
@dack ๋ด ์ดํด๋ Docker ์์ ๋คํธ์ํฌ๊ฐ ์ด๋ฏธ IPVS๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ์ ๋๋ค.
HAProxy๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ํด๋ฌ์คํฐ์ HAProxy๋ฅผ ๋ฐฐ์นํ๊ณ ๋ชจ๋ ์๋น์ค ์ธ์คํด์ค์ HAProxy๊ฐ ๋์ผํ ๋คํธ์ํฌ์ ์ฐธ์ฌํ๋๋ก ํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด HAProxy๊ฐ HTTP header.x-forwarded-for๋ฅผ ์์ ํ ์ ์์ต๋๋ค.
@mrjana๋ ์๋ํ์ง ์์ต๋๋ค. HAProxy๊ฐ ํด๋ผ์ด์ธํธ IP๋ฅผ ์ป๋ ์ ์ผํ ๋ฐฉ๋ฒ์ docker run์ ์ฌ์ฉํ์ฌ ์์ ๋คํธ์ํฌ ์ธ๋ถ์์ ์คํํ๊ฑฐ๋ ํธ์คํธ์์ ์ง์ ์คํํ๋ ๊ฒ์ด์ง๋ง ๋ค๋ฅธ ๋คํธ์ํฌ์ ์๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ก์ธ์คํ ์ ์์ต๋๋ค.
๊ฐ๋จํ ๋งํด์, ๋ด๊ฐ ์๋ ํ ๋์ปค ์๋น์ค์ ์ค์ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์๋ง์ ์ด๋ฅผ ์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ด ์ ํ ์์ต๋๋ค.
docker ingress ๋คํธ์ํฌ์ ์์ฑ์๊ฐ IPVS๊ฐ ๋ด๋ถ์์ ์ด๋ป๊ฒ ๊ตฌ์ฑ/์๋๋๋์ง(IPVS์ ๋ํ ๋ง์ ๋ชจ๋๊ฐ ์์) ๋ฐ ์ฐ๋ฆฌ๊ฐ ์์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ํ ํต์ฐฐ๋ ฅ์ ๊ฐ์ง ์ ์์ผ๋ฏ๋ก ํ ๋ก ์ ์ฐธ์ฌํ ์ ์๋ค๋ฉด ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค. ๋ฌธ์ .
@tlvenn ์ด๊ฒ์ด ์์ค ์ฝ๋์ ์ด๋์ ์๋์ง ์๊ณ ์์ต๋๊น? ๋ด๊ฐ ํ๋ฆด ์ ์์ง๋ง ๋ด๊ฐ ๊ด์ฐฐ ํ ๋ช ๊ฐ์ง ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก IPVS๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์๋ ํ์ธ์ @dack ๋
๋ธ๋ก๊ทธ์์:
๋ด๋ถ์ ์ผ๋ก ์ฐ๋ฆฌ๋ 15๋ ์ด์ Linux ์ปค๋์ ์์๋ ์ปค๋ ๋ด Layer 4 ๋ค์ค ํ๋กํ ์ฝ ๋ก๋ ๋ฐธ๋ฐ์์ธ Linux IPVS๋ฅผ ์ฌ์ฉํ์ฌ ์ด ์์ ์ ์ํํฉ๋๋ค. ์ปค๋ ๋ด๋ถ์ IPVS ๋ผ์ฐํ ํจํท์ ํตํด swarm์ ๋ผ์ฐํ ๋ฉ์๋ ๊ณ ์ฑ๋ฅ ์ปจํ ์ด๋ ์ธ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
๋ด๊ฐ ํ๋ฆฌ์ง ์๋ค๋ฉด ์ฝ๋ ์์ค๋ swarmkit ํ๋ก์ ํธ์ ์์ด์ผ ํฉ๋๋ค.
@stevvooe ๊ฐ ์ฌ๊ธฐ์ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฌด์์ธ์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
์ข์ต๋๋ค. ์ฝ๋๋ฅผ ๊ฐ๋ตํ๊ฒ ์ดํด๋ณด์๊ณ ์ด์ ์ข ๋ ์ ์ดํดํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ค์ ๋ก ๋ธ๋ก๊ทธ์ ๋ช ์๋ ๋ฐ์ ๊ฐ์ด IPVS๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. SNAT๋ service_linux.go์ ์ค์ ๋ iptables ๊ท์น์ ํตํด ์ํ๋ฉ๋๋ค. ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ๊ทธ ๋ค์ ์๋ ๋ ผ๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค(๋ ธ๋ A๊ฐ ๋ ธ๋ B์์ ์คํ ์ค์ธ ์๋น์ค์ ๋ํ ํด๋ผ์ด์ธํธ ํจํท์ ์์ ํ๋ค๊ณ ๊ฐ์ ).
SNAT ๋ค์ ์๋ ์ถ๋ก ์ ์๋ต์ด ์๋ ์์ฒญ์ด ๋ฐ์ํ ๋์ผํ ๋ ธ๋๋ฅผ ํต๊ณผํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค(NAT/IPVS ์ํ๊ฐ ์ ์ฅ๋๋ ๊ณณ์ด๋ฏ๋ก). ์์ฒญ์ด ๋ชจ๋ ๋ ธ๋๋ฅผ ํตํด ์ฌ ์ ์์ผ๋ฏ๋ก ์๋น์ค ๋ ธ๋๊ฐ ์์ฒญ์ ๋ค์ ๋ผ์ฐํ ํ ๋ ธ๋๋ฅผ ์ ์ ์๋๋ก SNAT๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋จ์ผ ๋ก๋ ๋ฐธ๋ฐ์ฑ ๋ ธ๋๊ฐ ์๋ IPVS ์ค์ ์์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ๋ฌธ์ ๋ ๋ชจ๋ ๋ ธ๋๊ฐ ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ํ์ฉํ๋ฉด์ SNAT๋ฅผ ํผํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ๋ฌด์์ธ์ง ์์ ํ ํ์ ํ ์ ์์ต๋๋ค. SNAT์ ์์กดํ๋ ๋์ ์ ์ฑ ๋ผ์ฐํ ์ ์ฌ์ฉํ์ฌ ์๋ต์ ์ง์ํ ์ ์๋๋ก ์๋น์ค ๋ ธ๋์ ์ํ ํ ์ด๋ธ์ ๊ฐ๋ ๋ฐฉ๋ฒ์ด ์์ ์ ์์ต๋๋ค. ๋๋ ์ด๋ค ์ข ๋ฅ์ ์บก์ํ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค(VXLAN?). ๋๋ IPVS์ ์ง์ ๋ผ์ฐํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค ๋ ธ๋๊ฐ (์๋ ์์ฒญ์ ๋ฐ์ ๋ ธ๋๋ฅผ ํตํ์ง ์๊ณ ) ํด๋ผ์ด์ธํธ์ ์ง์ ์๋ตํ ์ ์๊ณ ์๋น์ค์ ๋ํ ์๋ก์ด ์ ๋ IP๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ๋ณ ๋ ธ๋ IP๊ฐ ์๋ ์ ๋ IP๋ฅผ ํตํด์๋ง ์๋น์ค์ ์ฐ๊ฒฐํ ์ ์์์ ์๋ฏธํฉ๋๋ค(์ฌ์ฉ ์ฌ๋ก์ ๋ฌธ์ ๊ฐ ์๋์ง ํ์คํ์ง ์์).
๊ฝค ํฅ๋ฏธ๋ก์ด ๋ฐ๊ฒฌ @dack !
๋ฐ๋ผ๊ฑด๋ SNAT๋ฅผ ๋ชจ๋ ๊ฑด๋ ๋ฐ๋ ์๋ฃจ์ ์ด ๋ฐ๊ฒฌ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ทธ๋์ PublishMode
ํ์ฌ ํธ์คํธ ์์ค ํฌํธ ๊ฒ์๋ฅผ ๋์
ํ์ฌ ์์ ๋คํธ์ํฌ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฐํํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ผ๋ง ์ ์ ์ปค๋ฐ๋์์ ์ ์์ต๋๋ค.
๋ง์ ํผ๋๋ฐฑ์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ฃผ๋ง ์ดํ์ ์ด ๋ฌธ์ ์ ๋ํด ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ ๋์ ๋ช ๊ฐ์ง ์ ๋ณด:
@tlvenn : @mrjana ๋ ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ ๊ธฐ๋ฅ์ ์ฃผ์ ์์ฑ์์ ๋๋ค. ์์ค๋ ๋๋ถ๋ถ docker/libnetwork์ ์๊ณ ์ผ๋ถ๋ SwarmKit์ ์์ต๋๋ค.
@dack : ์ค์ ๋ก IPVS๊ฐ ์ง์ํฉ๋๋ค.
@tlvenn ๋ด๊ฐ ์๋ ํ, Docker Swarm์ ๊ฐ์ฅ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด๊ณ ๋๋ถ๋ถ์ ๊ตฌ์ฑ์์ ์๋ํ๋๋ก ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ์ ์ฌ์ฉํฉ๋๋ค. ๊ฒ๋ค๊ฐ ์ด๊ฒ์ [re: @dack] ํฌํธ๋ ์ค์ ๋ก ๊ฐ์ฅํ ์ ์๋ ์ ์ผํ ๋ชจ๋์ด๋ฏ๋ก ํธ๋ฆฌํฉ๋๋ค. ์ด๋ก ์ ์ผ๋ก ์ด ๋ฌธ์ ๋ IPIP ์บก์ํ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ ์ ์์ต๋๋ค. ํจํท ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฌผ๋ก ๋ง์ ์ฃผ์ ์ฌํญ๊ณผ ์๋ชป๋ ์ ์๋ ์ฌํญ์ด ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ์ด๊ฒ์ ๊ฐ๋ฅํ๋ฉฐ IPIP ๋ชจ๋๋ ํ๋ก๋์ ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
IP ๊ณ ์ ๋ฐ ๊ธฐํ ๋ณด์ ๊ฒ์ฌ๊ฐ ์ฌ๋ฐ๋ฅธ ์ธ๋ถ IP๋ฅผ ์์ ํ ์ ์์ด์ผ ํ๋ฏ๋ก ์ด์ ๋ํ ์๋ฃจ์ ์ด ๊ณง ๋ฐ๊ฒฌ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ณด๊ณ ์๋ค. ๋น์ฌ ์ ํ์ ๋ณด์ ๋ฐ ๋ถ์์ ์ํด ์์ค IP ์ ๋ณด๋ฅผ ํ์ฉํฉ๋๋ค.
@aluzzardi ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
๋ฒํ, ์ฐ๋ฆฌ๋ ๋ด๋ ์ด์ ์์ํ๋ ๋งค์ฐ ํฐ ํ๋ก์ ํธ๋ฅผ ์ํด ์ด๊ฒ์ด ํ์ํฉ๋๋ค.
ํ๋ฆ์ ๊ฒ์ฌํ๋ฉด ํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ์๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค(์ด ์์์ ๋ ธ๋ A๋ ์์ ํธ๋ํฝ์ ์์ ํ๊ณ ๋ ธ๋ B๋ ์๋น์ค ์ปจํ ์ด๋๋ฅผ ์คํ ์ค์ ๋๋ค).
๋ค์๊ณผ ๊ฐ์ด SNAT๋ฅผ ํผํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ถ๊ฐ ๋ณด๋์ค๋ก NAT ์ํ๋ฅผ ์ ์ฅํ ํ์๊ฐ ์์ผ๋ฉฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ํธ๋ํฝ์ด ๊ฐ์ํฉ๋๋ค.
@aluzzardi @mrjana ์ด์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น? Docker์ ์ฝ๊ฐ์ ํผ๋๋ฐฑ์ ๋งค์ฐ ๊ฐ์ฌํ ๊ฒ์ ๋๋ค.
๋ณด๊ณ ์๋ค. ์์ค IP ์ ๋ณด๊ฐ ์์ผ๋ฉด ๋๋ถ๋ถ์ ์๋น์ค๊ฐ ์์๋๋ก ์๋ํ์ง ์์ต๋๋ค.
์ด๋ป๊ฒ ๋๊ฑฐ์ผ?
@tlvenn ์ Github์ ๋ฒ๊ทธ์ฒ๋ผ ๋ณด์ ๋๊น?
@PanJ @tlvenn @vfarcic @dack ์ธ, PTAL #27917. ์๋น์ค ๊ฒ์ ๋ชจ๋ = host
๋ฅผ ํ์ฑํํ๋ ๊ธฐ๋ฅ์ ๋์
ํ์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ์๋น์ค๊ฐ IPVS๋ฅผ ์ฐํํ๊ณ docker run -p
์ ๊ฐ์ ๋์์ ๋ค์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์์ค IP๋ฅผ ์ ์งํฉ๋๋ค. ํ์ํด.
Pls๋ 1.13.0-rc2๋ฅผ ์๋ํ๊ณ ํผ๋๋ฐฑ์ ์ ๊ณตํฉ๋๋ค.
์ผ ์ง์ง ์ด์ํด
๊ฒ์ ๋ชจ๋์ ๊ด๋ จํ์ฌ ์์ swarm kit์์ ์ด๋ฏธ ์ฐ๊ฒฐํ์ต๋๋ค. ์ด๊ฒ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ ์ ์์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ์์ํ ํด๊ฒฐํ ์ ์๋ ์ ์ ํ ์๋ฃจ์ ์ด Docker 1.13๊ณผ ํจ๊ป ์ ๊ณต๋๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
์ด ๋ฌธ์ ๋ ์์ค IP๋ฅผ ์ ์งํ๋ ๊ฒ์ด ์ฌ์ฉ์๊ฐ ์์ํ๋ ๋์์ด๊ณ ํ์ฌ ๋์ปค ์๋น์ค์ ๋งค์ฐ ์ฌ๊ฐํ ์ ํ์ด๊ธฐ ๋๋ฌธ์ ๋ฒ๊ทธ๋ก ๋ถ๋ฅ๋ ์ ์์ต๋๋ค.
@kobolog ์ @dack ๋ชจ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ ์ฌ์ ์ธ ๋จ์๋ฅผ ์ ์ํ์ผ๋ฉฐ Docker ์ธก์ ํ์ ์กฐ์น ์์ด ๊ฑฐ์ 2์ฃผ๊ฐ ์ง๋ฌ์ต๋๋ค.
๋๊ฐ ์ด ๋ฌธ์ ๋ฅผ Docker ๋ฐ ์ํ ์ ๋ฐ์ดํธ์์ ์กฐ์ฌํ๊ณ ์๋์ง์ ๋ํ ๊ฐ์์ฑ์ ์ ๊ณตํด ์ฃผ์๊ฒ ์ต๋๊น? ๋ฏธ๋ฆฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
#27917 ์ธ์ 1.13์ ๋ํ ๋ค๋ฅธ ์๋ฃจ์ ์ ์์ต๋๋ค. ์ง์ ๋ฐํ ๊ธฐ๋ฅ์ ๋ค์ํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ๋ถ์ํด์ผ ํ๋ฉฐ ๋ฒ๊ทธ ์์ ์ผ๋ก ๊ฐ๋ณ๊ฒ ์ฌ๊ฒจ์ ธ์๋ ์ ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ 1.14์์ ์ด๊ฒ์ ์กฐ์ฌํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ํ ์๊ณ ๋ฆฌ์ฆ(rr ๋ 10๊ฐ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ), ๋ฐ์ดํฐ ๊ฒฝ๋ก(LVS-DR, LVS-NAT ๋ฐ LVS-TUN)๋ฅผ ํฌํจํ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ LB ๋์ ๋ฒ์ฃผ์ ์ํฉ๋๋ค. ๋๊ตฐ๊ฐ๊ฐ ์ด๊ฒ์ ๊ธฐ๊บผ์ด ๊ธฐ์ฌํ๋ค๋ฉด pls๋ PR์ ์ถ์งํ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ ์์ง์์ ์ป์ ์ ์์ต๋๋ค.
์ถฉ๋ถํ ๊ณต์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. @mavenugo ๋ ์ด์ ๋์์ด ์์ต๋๋ค.
์ต์ํ 1.13์ ๋ํ ๋ฌธ์๋ฅผ ์์ ํ์ฌ ๊ธฐ๋ณธ ์ธ๊ทธ๋ ์ค ๊ฒ์ ๋ชจ๋๋ก ๋์ปค ์๋น์ค๋ฅผ ์ฌ์ฉํ ๋ ์์ค 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 ์ค๋ docker 1.13์ผ๋ก ์
๋ฐ์ดํธํ๊ณ ํ๋ก์ ์๋น์ค์์ 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 service create๋ฅผ ํตํด --publish mode=host,target=80,published=80์ ์ฌ์ฉํ ๋์ ๋์ผํ ๋์์ ์ป์ผ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํฉ๋๊น?
@hamburml - https://github.com/docker/docker/issues/30447 ๋ฏธํด๊ฒฐ ๋ฌธ์ /๊ธฐ๋ฅ์ ์ฃผ์
๋ถํํ๋ mode=host
๋ฅผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋น์ค๊ฐ Swarm ๋คํธ์ํฌ์ ํต์ ํ๊ณ ํธ์คํธ ์ธํฐํ์ด์ค๋ฟ๋ง ์๋๋ผ ๋ชจ๋ ๋
ธ๋์์ ์์ ๋๊ธฐํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค...
@tkeeler33 ์๋น์ค๋ฅผ global
์๋น์ค๋ก ๋ฐฐํฌํ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(Swarm์ ๊ฐ ๋
ธ๋์ ์ธ์คํด์ค๋ฅผ ๋ฐฐํฌํจ). ๊ทธ๋ฆฌ๊ณ Swarm ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ์ฌ Swarm์ ๋ค๋ฅธ ์๋น์ค์ ํต์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
@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
์ต์
์ ์ฌ์ฉํ์ฌ ๋์ปค ๋คํธ์ํฌ๋ฅผ ์์ฑํ์ฌ ์ปจํ
์ด๋๊ฐ ํธ์คํธ์์ ์ฐ๊ฒฐ์ ์คํจํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ทํ์ ๋จ๊ณ๋ฅผ ์๋ํ ํ์๋ ๊ทผ๋ณธ ์์ธ์ ๋น ๋ฅด๊ฒ ์ขํ ์ ์์์ต๋๋ค. ์ด ์ต์
์ ์ข์ ์์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ผ ์ ์์ต๋๋ค. ๋ณด์ ๊ด๋ จ ์ฌํญ์ ๋ํด ๋จธ๋ฆฌ๋ฅผ ์ธ๋งค๊ณ ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค.
์ ๋ณด๋ฅผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
@tkeeler33 --opt encrypted
๋ ํธ์คํธ-ํฌํธ ๋งคํ์ ์ํฅ์ ๋ฏธ์น์ง ์์์ผ ํฉ๋๋ค. ์ํธํ๋ ์ต์
์ ์ ์ผํ ๋ชฉ์ ์ ๋
ธ๋ ๊ฐ์ vxlan ํฐ๋ ํธ๋ํฝ์ ์ํธํํ๋ ๊ฒ์
๋๋ค. ๋ฌธ์์์ : "์ํธํ(--opt ์ํธํ)๋ก ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ๋ง๋ค ๊ณํ์ด๋ผ๋ฉด ํ๋กํ ์ฝ 50(ESP) ํธ๋ํฝ์ด ํ์ฉ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค." ESP๊ฐ ํ์ฉ๋๋์ง ํ์ธํ๊ธฐ ์ํด ๊ตฌ์ฑ์ ํ์ธํ ์ ์์ต๋๊น?
๋ํ --opt encrypted
์ต์
์ ์์ํ ๋ฐ์ดํฐ ํ๋ฉด ์ํธํ์
๋๋ค. ๋ชจ๋ ์ ์ด ํ๋ฉด ํธ๋ํฝ(๋ผ์ฐํ
๊ตํ, ์๋น์ค ๊ฒ์ ๋ฐฐํฌ ๋ฑ)์ ์ต์
์ด ์์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ์ํธํ๋ฉ๋๋ค.
@mavenugo ๋ง์ต๋๋ค. --opt encrypted
๋ก ์ ๋คํธ์ํฌ๋ฅผ "Internal": true
๊ฐ ์ค์ ๋์์์ ์์์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฌธ์ ์ผ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ ์ด๊ธฐ ๋คํธ์ํฌ ์์ฑ ์ค์ ์ค์์์ต๋๋ค... ๋์๊ณผ ์ค๋ช
์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ธด ํ๋ฃจ์์ต๋๋ค...
@dack @kobolog LVS-Tunnel ๋ฐ LVS-DR ๋ชจ๋์ ์ผ๋ฐ์ ์ธ ๋ฐฐํฌ์์ ๋ค์ด์ค๋ ํจํท์ ๋์ IP๋ ์ค์ ์๋ฒ์์๋ ARP๊ฐ ์๋ IP๋ก ํ๋ก๊ทธ๋๋ฐ๋ ์๋น์ค VIP๊ฐ ๋ฉ๋๋ค. ๋ผ์ฐํ ๋ฉ์๋ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ ๋ค์ด์ค๋ ์์ฒญ์ ํธ์คํธ ์ค ํ๋์ผ ์ ์์ต๋๋ค. ์ค์ ์๋ฒ๊ฐ ํจํท์ ์๋ฝํ๋ ค๋ฉด(๋ชจ๋ LVS ๋ชจ๋์์) ๋์ IP๊ฐ ๋ก์ปฌ IP๋ก ๋ณ๊ฒฝ๋์ด์ผ ํฉ๋๋ค. ๋ฐฑ์๋ ์ปจํ ์ด๋์ ์๋ต ํจํท์ด ์ฌ๋ฐ๋ฅธ ์์ค ์ฃผ์๋ก ๋์๊ฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ง์ ๋ฐํ ๋์ ์ ์๋ต ํจํท์ ์์ ํธ์คํธ๋ก ๋๋๋ฆฌ๋ ค๊ณ ์๋ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ฅผ ๋ค์ 1๋ก ๋๋๋ฆฌ๋ ์์ค IP๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ ์ธ์๋ ๊นจ๋ํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
@thaJeztah ๋ฌธ์์์ ์ด๊ฒ์ ๋ช ํํ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํด๋ผ์ด์ธํธ IP๊ฐ ๋ณด์กด๋์ด์ผ ํ๋ ๊ฒฝ์ฐ ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๊ณ ์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@sanimej ๋๋ ์ฌ์ ํ NAT ์์ด ์ด๊ฒ์ ํ ์ ์๋ ์ด์ ๋ฅผ ์์ง ๋ชปํฉ๋๋ค. ์๋ฅผ ๋ค์ด ์ผ๋ฐ LVS-DR ํ๋ฆ์ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ด ์์๊น์? Docker๋ ์ ์ ํ ๋ ธ๋์ ๋น arp vip๋ฅผ ์ถ๊ฐํ๊ณ LVS๋ ๋ค์ด์ค๋ ํจํท์ ๋ ธ๋๋ก ๋ณด๋ด๊ณ ๋๊ฐ๋ ํจํท์ ์ง์ ๋ฐํํฉ๋๋ค. ๋ค์ด์ค๋ ํจํท์ด ๋ชจ๋ ํธ์คํธ์ ๋๋ฌํ ์ ์๋ค๋ ๊ฒ์ด ์ ์ค์ํฉ๋๊น? ์ด๋ ๋ค์ค ํ๋ก ํธ์๋ ๋ฐ ๋ค์ค ๋ฐฑ์๋ ์๋ฒ๊ฐ ์๋ ํ์ค LVS์ ๋ค๋ฅด์ง ์์ต๋๋ค.
@thaJeztah ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค :)
์์ฑ ๋ฒ์ 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 ์ค ํ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ ๋ผ์ฐํ ๋ฉ์์ ๊ฒฝ์ฐ๋ ๊ทธ๋ ์ง ์์ต๋๋ค.
@sanimej ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด IPIP ์บก์ํ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ ์ ์์ ๋ํ ํผ๋๋ฐฑ์ด ์์ต๋๊น?
@tlvenn LVS-IP ํฐ๋์ ๋ฐฑ์๋๊ฐ mac-rewrite๊ฐ ์๋ IP ํฐ๋์ IP๋ฅผ ํตํด ํจํท์ ๊ฐ์ ธ์ค๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ LVS-DR๊ณผ ๋งค์ฐ ์ ์ฌํ๊ฒ ์๋ํฉ๋๋ค. ๋ฐ๋ผ์ ๋ผ์ฐํ ๋ฉ์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํด์๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋น์ ์ด ์ธ๊ธ ํ ์ ์์์..
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 ๋ณด์กด์ ๋ฌ์ฑํ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ํธ์คํธ๊ฐ ์ผ๋ฐ์ ์ธ SNAT๋ฅผ ์ํํ๊ณ ํจํท์ ์ค์ ์๋ฒ๋ก ๋ณด๋ด๋ ํ์ด๋ธ๋ฆฌ๋ NAT+DR ์ ๊ทผ ๋ฐฉ์์ ์ํํ ์ ์์ต๋๋ค. ์ค์ ์๋ฒ๊ฐ ์คํ ์ค์ธ ํธ์คํธ์์ ์์ค IP๋ฅผ ๊ธฐ๋ฐ์ผ๋ก SNAT๋ฅผ ์ํํ์ฌ ์์ค ํฌํธ๋ฅผ ์์ ํธ์คํธ์ ํ ๋น๋ ๋ฒ์์ ํฌํธ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปจํ ์ด๋์ ๋ฐํ ํจํท์์ ์์ค ํฌํธ ๋ฒ์(๋ฐ ๋์ ํฌํธ)์ ์ผ์นํ๊ณ ์์ค IP๋ฅผ ์์ ํธ์คํธ์ IP๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๊ธฐ์ ์ ์ผ๋ก ์ด๊ฒ์ ์๋ ํ์ง๋ง ํด๋ฌ์คํฐ ๊ตฌ์ฑ์์ด ๋น ๋ฅด๊ฒ ์ถ๊ฐ ๋ฐ ์ ๊ฑฐ๋๋ ์ค์ ๋ฐฐํฌ์์๋ ๋นํ์ค์ ์ด๊ณ ์ทจ์ฝํฉ๋๋ค. ์ด๊ฒ์ ๋ํ ํฌํธ ๊ณต๊ฐ์ ํฌ๊ฒ ์ค์
๋๋ค.
๋ด๊ฐ ์ธ๊ธํ NAT+DR ์ ๊ทผ ๋ฐฉ์์ ์์ ํธ์คํธ์์ ์์ค IP๋ฅผ ๋ณ๊ฒฝํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์์ต๋๋ค. ์์ค ํฌํธ๋ง ํด๋น ํน์ ํธ์คํธ์ ๋ฒ์์ ์๋ ํฌํธ๋ก ๋ณ๊ฒฝํ๊ณ ๋ฐฑ์๋ ํธ์คํธ์ ๋ผ์ฐํ ์ ์ฑ ์ ์ฌ์ฉํ์ฌ ํจํท์ ์์ ํธ์คํธ๋ก ๋ค์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ต์ ์ด ๋ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์๋ ์ด์ ์ ์ธ๊ธํ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
@tajeztah
Nginx ์ปจํ
์ด๋์์ ์น ์ปจํ
์ด๋๋ก ์ค์ IP ์ฃผ์๋ฅผ ์ ๋ฌํ๋ ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๋๋์ Nginx์ ์ปจํ
์ด๋ ์คํ์ด global
๋ชจ๋ ๋ฐ ๊ฒ์ host
Nginx์ ์ปจํ
์ด๋๊ฐ ์ฌ๋ฐ๋ฅธ IP ์ฃผ์๋ฅผ ์ป์ ์ ์๋๋ก. ๋ ์ปจํ
์ด๋๋ ์๋ก๋ฅผ ์ ๋ณผ ์ ์์ง๋ง ์น ์ปจํ
์ด๋๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ Nginx ์ปจํ
์ด๋ IP ์ฃผ์๋ฅผ ์ป์ต๋๋ค.
Nginx๋ ์น์ฉ ๋ฆฌ๋ฒ์ค ํ๋ก์์ด๋ฉฐ ์น์ ํฌํธ 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 ์ฃผ์๊ฐ ์ฌ์ ํ ์๋ชป๋์์ต๋๋ค. ๊ตฌ์ฑ์ ๋๋ฝ๋ ํญ๋ชฉ์ด ์์ด์ผ ํฉ๋๋ค.
์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๋ ๊ฐ์ ์๋น์ค๊ฐ ์๋ ๋์ปค( 17.03.0-ce ) ๋ฌด๋ฆฌ ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค.
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/๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์น ์ปจํ
์ด๋๋ ํฌํธ 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
์น ์ปจํ ์ด๋ ๋ก๊ทธ:
10.0.0.47 - - [17/Mar/2017 12:25:08] "GET / HTTP/1.1" 200 -
๊ฑฐ๊ธฐ์ ๋ฌด์์ด ๋น ์ ธ ์์ต๋๊น?
IP ์ฃผ์๋ ์ฌ์ ํ ํ๋ฆด ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ HTTP ํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ค์ IP ์ฃผ์๋ฅผ ํฌํจํฉ๋๋ค. ์ํ๋ ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
ํ๋ก์๋ฅผ ์ ๋ขฐํ๋ ค๋ฉด(์์ค IP ๋์ ํค๋ ์ฌ์ฉ)
2560๋
3์ 17์ผ ๊ธ์์ผ ์คํ 7์ 36๋ถ Lukasz Pakula [email protected]
์ผ๋ค:
@pi0 https://github.com/pi0 ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค
๋งํฌ์์ nginx ๊ตฌ์ฑ์ ์ฌ์ฉํ๊ณ ์์ง๋ง IP ์ฃผ์๋ ์ฌ์ ํ
์๋ชป, ๋ด ๊ตฌ์ฑ์ ๋๋ฝ๋ ๊ฒ์ด ์์ด์ผ ํฉ๋๋ค์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๋ ๊ฐ์ ๋์ปค( 17.03.0-ce ) ๋ฌด๋ฆฌ ํด๋ฌ์คํฐ๊ฐ ์์ต๋๋ค.
์๋น์ค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
์น ์ปจํ ์ด๋๋ ํฌํธ 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 - - [17/Mar/2017:12:25:08 +0000] "GET / HTTP/1.1" 200
์น ์ปจํ ์ด๋ ๋ก๊ทธ:
10.0.0.47 - - [17/Mar/2017 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
.>
ํฌ์ ์ด,
ํ์๋งํ ์ธ๋ฆ์ฌ์์ธ ๋ฆฌ
์ ํ (+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 ์ฃผ์๋ฅผ ์ป๊ธฐ ์ํด REST API๋ฅผ ์ ๊ณตํ ์ ์์ต๋๊น?
@tonysongtl ์ด ๋ฌธ์ ์ ๊ด๋ จ์ด ์์ต๋๋ค
๊ณ ๋ คํด์ผ ํ ๋ ๋ค๋ฅธ ์ฌํญ์ ๊ณ ๊ฐ์ฉ์ฑ ์ค์ ์์ ํธ๋ํฝ์ด ๋ ธ๋๋ก ์ ๋ฌ๋๋ ๋ฐฉ์์ ๋๋ค. ๋ ธ๋๋ ํด๋ผ์ด์ธํธ์ ๋ํ ์ค๋ฅ๋ฅผ ์์ฑํ์ง ์๊ณ ๋ค์ด๋ ์ ์์ด์ผ ํฉ๋๋ค. ํ์ฌ ๊ถ์ฅ ์ฌํญ์ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์(ELB, F5 ๋ฑ)๋ฅผ ์ฌ์ฉํ๊ณ ๊ฐ๋จํ ๋ ์ด์ด 4 ์ํ ํ์ธ๊ณผ ํจ๊ป ๋ ์ด์ด 4์์ ๊ฐ Swarm ๋ ธ๋๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑํ๋ ๊ฒ์ ๋๋ค. 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
์ ์ ์ฃผ์ ๋ฏธ๋ฌ๋ง - ํ๋ก์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์์ต๋๊น? ๋ชจ๋ ํด๋ผ์ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์ ๋ฐ haproxy๋ ์์ค IP ๋ณด์กด์ ์ํด ์ด๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
Calico์๋ ipip ๋ชจ๋( https://docs.projectcalico.org/v2.2/usage/configuration/ip-in-ip) ๋ ์์ต๋๋ค. ์ด๊ฒ์ด github์์ ์ฌ์ฉํ๋ ์ด์ ์ค ํ๋์ ๋๋ค. https://githubengineering.com/kubernetes-at-github/
์๋ ํ์ธ์.
์ดํด์ ์์ ์ฑ์ ์ํด ์์ฝํ๊ณ ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ์ ํด ์ฃผ์ญ์์ค.
์ฃผ์ ๋ฌธ์ ๋ ์ปจํ ์ด๋๊ฐ ์๋ src-IP๊ฐ ์๋๋ผ swarm 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
๋ฐ๋ผ์ ์๋ src-IP๋ฅผ ์๊ณ Swarm์ ์๋น์ค VIP๋ก ๋์ฒด๋ฉ๋๋ค.
@kobolog https://github.com/moby/moby/issues/25526#issuecomment -258660348 ๋ฐ @dack https://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 ๊ฐ ์๋ํ์ง
ํน์ ์๋น์ค์ ๋ํด "NAT ๋์ ์ญ๋ฐฉํฅ ํ๋ก์"๋ฅผ ํ์ฑํํ๋ ์ต์ ์ด ๋ชจ๋ ์ฌ๋์ ๋ง์กฑ์ํค๋ ์ด ๋ชจ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์๊น์?
๋ฐ๋ฉด IIUC๋ https://docs.docker.com/engine/swarm/services/#publish -a-services-ports-directly-on-the-swarm-node๋ฅผ ์ฌ์ฉํ๋ ์ ์ผํ ์ต์ ์ ๋๋ค. -๋ค์ IIUC-๋ ๋ฉ์๋ฅผ ์ ํ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ์ค์ ๋ชจ๋ (vs compose)
๋์์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
๋ฌธ์ ์ธ์ฌ
@sanimej
๋์ฑ์ด... Docker๊ฐ NAT(๋ชฉ์ ์ง IP/ํฌํธ๋ง ๋ณ๊ฒฝ) ํฌ์๋ฉ๋ง ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
๋๋ ์ฐจ์๋ฒจ์ ์ธ๋ฆฌ๊ณ ์ถ์ต๋๋ค. ์ด ์์ ์ ์ํํ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ์๋ IP ์ฃผ์๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ๋ณด์กดํ์ง ์์ผ๋ฉด ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ฌ๊ฐํ๊ฒ ๋ฐฉํดํฉ๋๋ค. ๋ด ๋จธ๋ฆฌ ๊ผญ๋๊ธฐ์์ ์๊ฐํ ์์๋ ๋ช ๊ฐ์ง๊ฐ ์์ต๋๋ค.
๋คํธ์ํฌ/์๋น์ค ์์ง๋์ด๋ง์ ์์ด ์ฌ์ฉ์์ ์ถ์ฒ๋ฅผ ์์ธํ ์ค๋ช ํ๋ ๋ฉํธ๋ฆญ์ ๊ฐ์ง ์ ์๋ค๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค.
๋ง์ ๋ณด์ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์๋น์ค ๋จ์ฉ์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋์ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ํ์ฉํ๋ ค๋ฉด ์๋ IP ์ฃผ์์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค.
์์น ์ธ์ ์๋น์ค๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์คํจํ ๋ ์ฌ์ฉ์์ ์ผ๋ฐ์ ์ธ ์์น๋ฅผ ์ฐพ๊ธฐ ์ํด IP ์ฃผ์์ ์ก์ธ์คํ ์ ์์ด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด ๋ฌธ์ ์ค๋ ๋๋ฅผ ์ฝ์ ๊ฒฐ๊ณผ Docker Swarm ๋ด์์ ํ์ฅ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ์ํ ๋ ์ฃผ์ด์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์ ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ์ ๋ ธ๋๋น ํ๋์ ์ธ์คํด์ค๋ก ์ ํํ๋ฉด ์คํผ๋ง์ ์ ์ฐ์ฑ์ด ํฌ๊ฒ ์ค์ด๋ญ๋๋ค. ๋ํ Swarm ์ค์ผ์คํธ๋ ์ด์ ์ปจํ ์ด๋์ ๊ณต๊ธํ๊ธฐ ์ ์ ๋น Swarm ์ค์ผ์คํธ๋ ์ด์ ์ปจํ ์ด๋๋ก ์คํ๋๋ ์์ง์์ LB/ํ๋ก์๋ฅผ ์ ์งํ๋ ํ์ด๋ธ๋ฆฌ๋ ์ ๊ทผ ๋ฐฉ์์ ์ ์งํ๋ ๊ฒ์ ๊ณผ๊ฑฐ๋ก ๋์๊ฐ๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค. ์ฌ์ฉ์๊ฐ ์๋น์ค ์ค์ผ์คํธ๋ ์ด์ ์ ์ํด ๋ ๊ฐ์ง ๋ค๋ฅธ ํจ๋ฌ๋ค์์ ์ ์งํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์์ง์์ LB/ํ๋ก์๋ฅผ ๋์ ์ผ๋ก ํ์ฅํ ์ ์๋ ๊ฒ์ ์ด๋ป์ต๋๊น? ์๋์ผ๋ก ํด์ผ๊ฒ ์ฃ ?
Docker ํ์ด ์ด๋ฌํ ์๊ฒฌ์ ๊ณ ๋ คํ๊ณ Docker ์์ฝ์์คํ ์ ์๋ ํ์ง๊ณผ ์ ์ฐ์ฑ์ ์ ์งํ๋ฉด์ ์ด ๊ธฐ๋ฅ์ ๋์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ํ์ธํ ์ ์์ต๋๊น?
๋ ๋์๊ฐ, ๋๋ ํ์ฌ ์ด๊ฒ์ ์ํด ํ๊ฒฉ์ ๋ฐ๊ณ ์์ต๋๋ค. ์น์ธ/์ธ์ฆ๋ ์์ฒญ์ ๋ค์ด์คํธ๋ฆผ ์น ์๋ฒ๋ก ์ ๋ฌํ๋ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ด ์์ต๋๋ค. ์ฐ๋ฆฌ ์๋น์ค ๊ธฐ์ ์๋ ์ฌ๋๋ค์ด ์น ์ก์ธ์ค ๋ก๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ดํ๋ ๋ค์ด์คํธ๋ฆผ ์๋ฒ์ ๋๋ฌํ๋์ง ํ์ธํ ์ ์์ด์ผ ํฉ๋๋ค. ํ์ฌ ์๋๋ฆฌ์ค์์๋ ํ๋ก์ ์๋ฒ๊ฐ ์๋ 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๋ฅผ ๋ณด์กดํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๊ฐ ํ์ฌ ์์ง ์ง์ํ์ง ์์ต๋๋ค .
@trajano
ํ์ง๋ง ์์ค IP๋ก 172.xx1์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ ํ๋ฆฌ์ผ์ด์
์ ๋ก์ปฌ๋ก ์ก์ธ์คํ๋ ๊ฒฝ์ฐ docker_gwbridge
๊ฐ ํ๋ก์ ์ปจํ
์ด๋์ ์ํธ ์์ฉํ๋ ์ธํฐํ์ด์ค์ด๋ฏ๋ก ํด๋น IP๊ฐ ์ ํํด์ผ ํฉ๋๋ค(swarm์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ). IP ๋คํธ์ํฌ ๋ด์ ๋ค๋ฅธ ์์คํ
์์ ์ฑ์ ์ก์ธ์คํ์ฌ ์ฌ๋ฐ๋ฅธ ์ฃผ์๋ฅผ ํฌ์ฐฉํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
์์ฑ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅํฉ๋๋ค. ์ฌ๊ธฐ์์๋ jwilder/nginx-proxy
์ ๊ณต์ ๋น๋ ์ด๋ฏธ์ง์ ํจ๊ป ๋ฐฑ์๋ ์๋น์ค๋ก nginx
์ด๋ฏธ์ง๋ฅผ ํ๋ก ํธ์๋ ์ญ ํ๋ก์(๊ฐ๋
๋จ์ํ)๋ก ์ฌ์ฉํฉ๋๋ค. Docker Swarm ๋ชจ๋์์ ์คํ์ ๋ฐฐํฌํฉ๋๋ค.
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๋-์ ๋ฌ-๋ฅผ ๋ค์ด & X-์ค์๊ฐ IP๊ฐ ์ค์ ๋์ด nginx.tmpl
์ jwilder/nginx-proxy
๊ธฐ๋ณธ์ ์ผ๋ก.
ํฌํธ 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 ๋ฌธ์๊ฐ ์์ ํ์ง ์์ต๋๋ค. ์กด์ฌํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ
๊ฝค ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋ก ingress+proxy ํ๋กํ ์ฝ์
๋๋ค.
https://www.haproxy.com/blog/haproxy/proxy-protocol/
ํ๋ก์ ํ๋กํ ์ฝ์ ์์ค๋ฅผ ๋ณด์กดํ๋ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์
๋๋ค.
์ ๋ณด. Haproxy์๋ ํ๋ก์ ํ๋กํ ์ฝ์ ๋ํ ์ง์์ด ๋ด์ฅ๋์ด ์์ต๋๋ค. ์์ง์์ค
ํ๋ก์ ํ๋กํ ์ฝ์ ์ฝ์ ์๋ ์์ง๋ง ์ฃผ์
ํ ์๋ ์์ต๋๋ค.
ํ๋ก์ ํ๋กํ ์ฝ์ด ์ค์ ๋๋ฉด ๋ชจ๋ ์์น์์ ํด๋น ์ ๋ณด์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๋ค์ด์คํธ๋ฆผ ์๋น์ค
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
์ด๊ฒ์ ํ๋ก์ ํ๋กํ ์ฝ์ ์ฃผ์ ํ๋ k8์ ๋ํ ์ต์ haproxy ์์ ์ ๋๋ค.
IMHO ๋ผ์์ ์ด ์์
์ ์ํํ๋ ๋ฐฉ๋ฒ์ ์์ ์ด ํ๋ก์๋ฅผ ์ฝ์ ์ ์๋๋ก ํ๋ ๊ฒ์
๋๋ค.
ํ๋กํ ์ฝ(์ด๋ฅผ ๊ฐ์ง ์
์คํธ๋ฆผ LB์์ ํธ๋ํฝ์ ์์ ํ๋ ๊ฒฝ์ฐ
์ด๋ฏธ ์ฃผ์
๋ ํ๋ก์ ํ๋กํ ์ฝ) ๋ฐ ์ฃผ์
ํ๋ก์ ํ๋กํ ์ฝ
์ ๋ณด(๋ชจ๋ ํธ๋ํฝ์ด ์ค์ ๋ก ์ธ๊ทธ๋ ์ค์ ๋จผ์ ๋๋ฌํ๋ ๊ฒฝ์ฐ).
๋๋ ํนํ ๋ค์์ด ์์ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํ๋ ๊ฒ์ ์ฐฌ์ฑํ์ง ์์ต๋๋ค.
์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ผ๋ก ํ์ฉ๋๋ ํ์ค์
๋๋ค.
Traefik์ ๋ช ์ฃผ ์ ์ proxy_protocol ์ง์์ ์ถ๊ฐํ์ผ๋ฉฐ v1.4.0-rc1๋ถํฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๊ฒ์ docker swarm ingress ์์ค์์ ์ํํด์ผ ํฉ๋๋ค. ์นจ์
ํ๋ ๊ฒฝ์ฐ
ํ๋ก์ ํ๋กํ ์ฝ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์
ํ์ง ์์, ๋ค์ด์คํธ๋ฆผ ์๋น์ค ์์
(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
.
๋๋ ๋ํ ์ด ๋ฒ๊ทธ์ infrakit์ ๊ด๊ณ์ ๋ํด ํผ๋์ค๋ฌ์ํฉ๋๋ค. ์: https://github.com/docker/infrakit/pull/601 ๋๊ตฐ๊ฐ ๋์ปค ๋ผ๊ฐ ๋์๊ฐ ๋ฐฉํฅ์ ๋ํด ์ธ๊ธํ ์ ์์ต๋๊น?
๋ผ๊ฐ ์ธํ๋ผํท์ผ๋ก ๋กค์ ๋ฉ๋๊น? ๋๋ ๊ทธ๊ฒ์ ์ ์ ์ธก๋ฉด์ ํนํ ๊ด์ฌ์ด ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค. ์ธ๋ฐ์ด๋ ์ฐ๊ฒฐ์ ์ํด ํด๋ผ์ด์ธํธ IP์ ์์ฒญํ IP๋ฅผ ์๊ณ ์ถ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฌ์ฉ์๊ฐ ์ฐ๋ฆฌ ์๋ฒ์ ๋ํ ์์ TCP ์ฐ๊ฒฐ์ ์ํํ๋ ๊ฒฝ์ฐ ์ฐ๋ฆฌ๋ ๊ทธ๋ค์ IP๊ฐ ๋ฌด์์ธ์ง, ์ฐ๋ฆฌ ์ปดํจํฐ์์ ๊ทธ๋ค์ด ์ฐ๊ฒฐํ IP๋ฅผ ์๊ณ ์ถ์ดํฉ๋๋ค.
@blazdd ์ด์ ์ ์ธ๊ธํ๊ณ ๋ค๋ฅธ ์ค๋ ๋์์ ์ด๊ฒ์ ์ค์ ๋ก publishMode๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฅํฉ๋๋ค. ์ฆ, ๋ฉ์ ๋คํธ์ํฌ์์ ์๋น์ค๋ฅผ ์ฒ๋ฆฌํ์ง ์์ต๋๋ค.
IIUC, ์ธ๊ทธ๋ ์ค๊ฐ ์ด๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ ํ๊ธฐ ์ํ ์ผ๋ถ ์งํ์ด ์์ง๋ง ์ค์ ๋ก๋ ์ด๊ฒ์ด ์ ์ผํ ์๋ฃจ์ ์ ๋๋ค.
์ธ๋ถ LB ๊ตฌ์ฑ์ ํผํ๊ธฐ ์ํด publishmode ๋ฐ mode:global ์ ์ฌ์ฉํ์ฌ nginx ์๋น์ค๋ฅผ ๋ฐฐํฌํ์ต๋๋ค
@mosolog ๋ต๋ณ ๊ฐ์ฌํฉ๋๋ค. ๋ช ๊ฐ์ง ์ฐธ๊ณ ์ฌํญ:
publishMode
๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ์์ต๋๋ค. ์ธ๋ฐ์ด๋ ์์ผ ์ฐ๊ฒฐ์ ์ฌ์ ํ โโ๋ผ๊ฐ ์ค์ ํ ๋ก์ปฌ ๋คํธ์ํฌ๋ก ํ์ธ๋ฉ๋๋ค. ์ ์ด๋ ํฌํธ ๋ชฉ๋ก์ ์ฌ์ฉํ ๋ mode: host
nginx
๋ ์ ๋ง ์ข์ ์๋ฃจ์
์ด ์๋๋๋ค. ์ฐ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์
์ TCP ๊ธฐ๋ฐ์ด์ง๋ง ์น ์๋ฒ๋ ์๋๋๋ค. ์๋์ผ๋ก ์ฝ๋ฉํ์ง ์๊ณ ์ฌ์ฉํ ์ ์๋ ํค๋๋ ์์ต๋๋ค.docker run --net=host ...
ํ๋ฉด ๋ชจ๋ ๊ฒ์ด ์ ์๋ํฉ๋๋ค.@blazdd ์คํ์๋ ๋ค์์ด ์์ต๋๋ค.
ports:
- target: 80
published: 80
protocol: tcp
mode: host
๋ฐ๋ผ์ ๋ก๊ทธ์์ ์ค์ IP๋ฅผ ์ป์ ์ ์์ ๊ฒ์ ๋๋ค.
@mostolog ์ ์ด๋ Windows์์๋ ์๋ํ์ง ์์ต๋๋ค. ๋๋ ์ฌ์ ํ 172.0.0.x ์ฃผ์๋ฅผ ์์ค๋ก ๋ฐ๊ณ ์์ต๋๋ค.
@mosolog mode: host
๋ ์ปจํ
์ด๋๋ฅผ ํธ์คํธ ๋คํธ์ํฌ์ ๋
ธ์ถํ์ง ์์ต๋๋ค. ์ปจํ
์ด๋๋ฅผ ์คํํ ๋ Docker๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์๋ํ๋ ๋ฐฉ์์ธ ์์ ๋คํธ์ํฌ์์ ์ปจํ
์ด๋๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๋์ปค ์คํ ๋ช
๋ น์ ์ฌ์ฉ๋ --publish 8080:8080
๋ณต์ ํฉ๋๋ค. nginx๊ฐ ์ค์ IP๋ฅผ ์ป๋ ๊ฒฝ์ฐ ์์ผ์ด ํด๋น IP์ ์ง์ ์ฐ๊ฒฐ๋ ๊ฒฐ๊ณผ๊ฐ ์๋๋๋ค. ์ด๋ฅผ ํ
์คํธํ๋ ค๋ฉด ํ๋ ์์ํฌ ์์ด ์์ TCP ๊ตฌํ ๋๋ HTTP ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฌ๊ฐํ๊ฒ ๊ณ ๋ คํ๊ณ ๋ณด๊ณ ๋ ์ฃผ์๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค.
IPVS ๋ผ์ฐํธ ๋คํธ์ํฌ๋ฅผ ์ปจํ
์ด๋์ ์ง์ ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ๋ชจ๋ Swarm ๋
ธ๋์ ์ค๋ฒ๋ ์ด ์ธํฐํ์ด์ค IP๋ฅผ ๊ฐ์ IP๋ก ๋ฐ์ธ๋ฉํ๊ณ ip rule from xxx table xxx
๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์ค ๊ฒ์ดํธ์จ์ด๋ฅผ ๋ง๋ ๋ค์ Swarm ๋
ธ๋๋ ์ฌ์ฉ์ ๊ณต๊ฐ ๋คํธ์ํฌ ํ๋ก์ ๋ฐ๋ชฌ(dockerd) ์์ด ํด๋ผ์ด์ธํธ๋ฅผ ์ปจํ
์ด๋๋ก ์ง์ (DNAT) ๋ผ์ฐํ
ํ ์ ์์ต๋๋ค.
@blazdd ํด๋ดค์ด? @mosolog ์ ์๋ฅผ
๋๋ ์ด ๋ฌธ์ ์ ๋ํด ๋ค์ ๋์ ํ๊ณ ์๋ค.
๋ด ์ค์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์คํ์ ๋ฌด๋ฆฌ์ ๋ฐฐํฌํ๊ณ ์ฃผ์๋ฅผ ๋งน๊ธ๋งํ์ง ์๊ณ ๊ฐ์ IP์ ํฌํธ 80์์ ์์ ํ๋๋ก ํ๊ณ ์ถ์ต๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ํ๋ฉด ๊ฑฐ์ ๋๋ฌํ ์ ์์ต๋๋ค.
ํฌํธ:
- ๋ชฉํ: 80
์ถํ: 80
ํ๋กํ ์ฝ: TCP
๋ชจ๋: ํธ์คํธ
์ฌ๊ธฐ์ ๋ฌธ์ ๋ ๋ฐ์ธ๋ฉํ IP ์ฃผ์๋ฅผ ์ง์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ IP ์ฃผ์์๋ง ๋ฐ์ธ๋ฉ๋ฉ๋๋ค. ํด๋น ํฌํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ ์ด์์ ์๋น์ค๋ฅผ ์คํํ๋ ค๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ํ๋์ IP์๋ง ๋ฐ์ธ๋ฉํ๋ฉด ๋ฉ๋๋ค. ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ DR ๋ก๋ ๋ฐธ๋ฐ์ฑ์์ ์ต์ ์ด ์๋๋๋ค. DR ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๊ทธ๋ ์ง ์์๋ฐ, ๊ฐ๋ฐ์๋ค์ ๋์ผํ IP๊ฐ ์ฌ๋ฌ ๋ ธ๋์ ์กด์ฌํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ ๊ฒ ๊ฐ์ต๋๋ค.
๋ํ ์งง์ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๋ฐ์ธ๋ IP๋ฅผ ๋ฌด์ํ๊ณ ์ฌ์ ํ ๋ชจ๋ ์ฃผ์์ ๋ฐ์ธ๋๋ฉ๋๋ค. ๋จ์ผ IP์ ๋ฐ์ธ๋ฉํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ํด๋ฌ์คํฐ๋์ง ์์ ์ปจํ ์ด๋(์๋น์ค ๋๋ ์คํ์ด ์๋)๋ฅผ ์คํํ๋ ๊ฒ์ ๋๋ค.
์ด์ ๋ ๋ฆฝ ์คํํ ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๊ณ ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์๋น์ค/์คํ ๊ธฐ๋ฅ์ ์์กดํ๋ ๋์ ์ง์ ์ปจํ ์ด๋๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์
(์ผ๋ถ๋ ์์ UDP/TCP ์ฌ์ฉ, ํนํ HTTP๋ ์๋)์ด ์์๋๋ก ์๋ํ๋๋ก ํ์ฉํ๋ ๋์ปค ์์ ๋ด์ ํฌ๋ช
ํ ์๋ฃจ์
์ ํฌํํ ๊ฒ์
๋๋ค.
๋ด ์๋น์ค๊ฐ ์ ์ญ์ผ๋ก ๋ฐฐํฌ๋๋ฏ๋ก "mode=host port ๊ฒ์" ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ค๋ฅธ ์ด์ ๋ก ํ์ํ macvlan ๋คํธ์ํฌ ๋๋ผ์ด๋ฒ์ ์ฌ์ฉ๊ณผ ํธํ๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
"macvlan ๋๋ผ์ด๋ฒ๊ฐ ํฌํธ ๋งคํ์ ์ง์ํ์ง ์์ต๋๋ค"์ ๊ฐ์ ๋ก๊ทธ๊ฐ ํ์๋ฉ๋๋ค.
์ฌ๋ฌ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํด ๋ณด์์ง๋ง ๋์์ด ๋์ง ์์ต๋๋ค.
์ฌ๊ธฐ์์ ํน์ ํฐ์ผ์ ๋ง๋ค์์ต๋๋ค. https://github.com/docker/libnetwork/issues/2050
์ง๊ธ์ ํด๊ฒฐ์ฑ
์ด ์์ต๋๋ค.'(
์๋
์๋ค์
ํ์ฌ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? ํธ์คํธ ํฌํธ๋ก ๊ฒ์ํ์ง ์๊ณ
ํฌํธ ?
2018๋ 1์ 11์ผ 00:03์ "Olivier Voortman" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋๋ ๋ชจ๋ ๊ฒ์ ํ์ฉํ๋ docker ingress ๋ด์ ํฌ๋ช ํ ์๋ฃจ์ ์ ํฌํํ ๊ฒ์ ๋๋ค.
(ํนํ HTTP๊ฐ ์๋ ์์ UDP/TCP๋ฅผ ์ฌ์ฉํ๋ ์ผ๋ถ)
์์๋๋.๋ด ์๋น์ค๊ฐ ๋ค์๊ณผ ๊ฐ์ ๋ "๋ชจ๋=ํธ์คํธ ํฌํธ ๊ฒ์" ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ ์ธ๊ณ์ ์ผ๋ก ๋ฐฐํฌ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด๊ฒ์ 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๋ฅผ ์ป์ ์ ์๋ ๊ฒ์ด ์ ๋ง ์ํ๊น์ต๋๋ค. ์ด๋ก ์ธํด ๋๋ถ๋ถ์ docker swarm ๋ฉ์ง ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ด ์ค์ ์์ ํด๋ผ์ด์ธํธ์ 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 ๋ก๋ ๋ฐธ๋ฐ์์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์์ฒญ์ด ์๋๊ฐ ์ ํ๋๊ณ ๋จ์ผ ์ฌ์ฉ์/IP์์ ์จ ๊ฒ์ฒ๋ผ nginx๊ฐ ๋ชจ๋ ์์ฒญ์ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ๊ฑฐ๋ถ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ์ ์ผํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ mode=host๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ํ๋ฉด ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ์ด ๋์จํด์ง๊ณ DNS๊ฐ ํน์ ์ธ์คํด์ค๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํด์ผ ํฉ๋๋ค.
์๋ง๋ docker๋ ์ด ์์ ์ ์ด์์ ์ธ ๋๊ตฌ๊ฐ ์๋ ์ ์์ต๋๋ค. ์ ๋ ์ ๋ฉด HTTP ์๋ฒ๋ฅผ ์ค์ ํ๊ณ ํด๋ผ์ด์ธํธ IP๋ฅผ HTTP ์์ฒญ ํค๋์ ์ผ๋ถ๋ก ๋ฐฐ์นํ๊ธฐ ์ํด vagrant๋ฅผ ์ฐพ๊ณ ์์์ต๋๋ค.
Docker๊ฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ ์ ๋ณด๋ฅผ ์ ๋ฌํ ์ ์์ ๋๊น์ง Docker Flow Proxy ๋๋ Traefik๊ณผ ๊ฐ์ ํ๋ก์๋ฅผ ์ฌ์ฉํ๊ณ ํด๋น ์๋น์ค์ ํธ์คํธ ๋ชจ๋์์ ์ํ๋ ํฌํธ๋ฅผ ๊ฒ์ํ๊ณ ์ฌ๊ธฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์์ ํ ์๋ฃจ์ ์ ์๋์ง๋ง ๊ฝค ์ ์๋ํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ์๋น์ค์ ๋ก๋ ๋ฐธ๋ฐ์ฑ/ํด๋ผ์ด์ธํธ IP ๊ฒ์์ ํ์ฉํฉ๋๋ค.
@deeky666 Traefik ๋ฐ ์ด์ ์ ์ฌํ ์์ ์ ๋ํน๋์ง ์์ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
traefik์์ udo ์ง์์ด ๋ณด์ด์ง ์์ต๋๋ค.
๋ด iPhone์์ ๋ณด๋ธ
๋ง์นจ๋ด ์ฐ๋ฆฌ๋ ๋์ปค ์ปจํ ์ด๋๋ฅผ ํฌ๊ธฐํ์ต๋๋ค. ์์ฐ ์ค๋น๊ฐ ๋์ง ์์์ต๋๋ค!
2018๋ 1์ 24์ผ ์์์ผ ์ค์ 5์ 43๋ถ์ 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
17.12.0-ce
์์ ๋ฌธ์ ๊ฐ ๋ถ๋ถ์ ์ผ๋ก ํด๊ฒฐ๋ ๊ฒ ๊ฐ์ต๋๋ค.
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๋ฅผ ๋ณด์กดํ๊ธฐ ์ํด ๊ณ ๊ฐ์ฉ์ฑ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค.
์๋ง๋ ํ๋ก์ ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ถ๊ฐํ๋ ๊ฒ์ด ํฐ ๋
ธ๋ ฅ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค
docker swarm์ ๋ํ ํ๋ก์ ํ๋กํ ์ฝ ์ง์.
๋๊ตฌ๋ ์ง ์ด๊ฒ ์ ์กฐ์ฌ ํ๊ณ ์์ต๋๊น ?
2018๋ 1์ 28์ผ 22:39์ "Genki Takiuchi" [email protected]์ด ์ผ์ต๋๋ค.
์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ ํฐ ๋จ์ ์ ๋ค์ด์ ํผํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
์ ๋ฐ์ดํธ ์ค ์๊ฐ.
ํ์ฌ ์ฐ๋ฆฌ๋ ์์ ์ฑ์ ํฌ๊ธฐํ ์ง ์๋๋ฉด ์์ค IP๋ฅผ ํฌ๊ธฐํ ์ง ์ ํํด์ผ ํฉ๋๋ค.
์ฃผ์.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-361078416 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAEsU-or7fnhKTg7fhjtZYjGYHBFRE7Dks5tPKnYgaJpZM4Jf2WK
.
@sandy ๋์ํฉ๋๋ค. ํ๋ก์ ํ๋กํ ์ฝ์ ์ข์ ์์ด๋์ด๊ฐ ๋ ๊ฒ์
๋๋ค.
@thaJeztah @aluzzardi @mrjana ์ด ๋ฌธ์ ๊ฐ ์ฃผ๋ชฉ์ ๋ฐ์ ์ ์์๊น์? ํ๋์ ํ์์ ์๋ฌด๋ฐ ์๋ต์ด ์์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
ํ๋ก์ ํ๋กํ ์ฝ์ ๋์๊ฒ ์ต๊ณ ์ ์๋ฃจ์ ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ํ์์ ๊ณ ๋ คํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
@goetas ์ ์ด๋ ํ ์ง์ ์์ ์๋ํ์ง๋ง ์๋ํ๋ ๊ฒ์ ๋ณด์์ง๋ง docker 1.12.6์์ ๋ค์ 172.xxx ๋์์ผ๋ก ๋๋์๊ฐ ๊ฒ ๊ฐ์ต๋๋ค.
์ด๊ฒ์ ๋งค์ฐ ๋์ฉ๋๋ค. ์๋ ์ ํ, ์ฌ๊ธฐ ๋ฐฉ์ง, ๋ก๊น
, ๋ณด์ ๋ก๊ทธ์ธ, ์ธ์
๋ชจ๋ํฐ๋ง ๋ฑ์ ์ํํฉ๋๋ค!
๋ชจ๋:ํธ์คํธ๋ฅผ ์ฌ์ฉ ํ์ฌ ์์ ํ๋ฉด ์๋ํ์ง๋ง ๋ฉ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด ์์ค๋๊ณ ๊ณต์ฉ IP๊ฐ ์๋ ํธ์คํธ์ ์ํํธ์จ์ด ๋ก๋ ๋ฐธ๋ฐ์๋ง ๋ชจ๋ ํธ๋ํฝ์ ๋จ๋
์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์ค์ ์๋ฃจ์
์ด ์๋๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋งค์ฐ ์ค์ํ๊ณ ์ค์ํ ๋ฒ๊ทธ์ด๋ฉฐ Swarm๊ณผ์ ๋ผ์ด๋ธ๋ฅผ ์ฐจ๋จํ๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ํ๋ก์ ํ๋กํ ์ฝ์ด ์ด์ ๋ํ ์ฌ๋ฐ๋ฅธ ์๋ฃจ์ ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค. Docker ์์ ์ ํ๋ก์ ํ๋กํ ์ฝ์์ ์์ค IP๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
ํธ์ํฐ์์ ์ ์๋ ์๋ฃจ์ ์ค ํ๋๋ Traefik ์ Swarm ์ธ๋ถ์์ ๊ด๋ฆฌ๋๋ ์ง์ ์ผ๋ก ์ฌ์ฉ
Swarm ๊ฐ๋ฐ์๊ฐ Swarm-ingress์์ ํ๋ก์ ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ๋ ค๋ฉด Traefik์์ ๋ ผ์๋๋ ๋ชจ๋ ๋ฒ๊ทธ๋ฅผ ํ์ธํด์ผ ํฉ๋๋ค(์: https://github.com/containous/traefik/issues/2619).
์ค์ ๋ชจ๋๊ฐ ์๋ "์์ฑ"์ ์ฌ์ฉํ์ฌ ์ผ๊ด๋๊ฒ ์๋ํ๋๋ก ํ์ต๋๋ค. ์๋ง๋ ์๊ฐํด์ผ ํ ๊ฒ์ด ์์ต๋๋ค.
ํ๋ก์ ํ๋กํ ์ฝ์ ๋ํ ๋ช ๊ฐ์ง ์ฐ๋ ค ์ฌํญ:
๋์ปค ์์ฒด์์ ๋์ฝ๋ฉํฉ๋๊น, ์๋๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋์ฝ๋ฉํฉ๋๊น? ํ๋ก์ ํ๋กํ ์ฝ์ ๊ตฌํํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์กดํ๋ ๊ฒฝ์ฐ ์ด๋ ๋ชจ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๋ฃจ์ ์ด ์๋๋ฉฐ ํ๋ก์ ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ์น ์๋ฒ ๋๋ ๊ธฐํ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ง ์๋ํฉ๋๋ค. ๋์ปค๊ฐ ํ๋ก์ ํ๋กํ ์ฝ์ ํ๊ณ ์ฃผ์๋ฅผ ๋ณํํ๋ฉด ์ฐ๊ฒฐ ์ํ๋ ์ถ์ ํ๊ณ ๋๊ฐ๋ ํจํท์ ๋ํด ์ญ๋ณํ์ ์ํํด์ผ ํฉ๋๋ค. ๋์ปค๋ ์น์ด ์๋ ๋ง์ ์์ฉ ํ๋ก๊ทธ๋จ์๋ ์ ์ฉํ๊ธฐ ๋๋ฌธ์ ์น ์ ์ฉ ์๋ฃจ์ (์์ฉ ํ๋ก๊ทธ๋จ์ ํ๋ก์ ํ๋กํ ์ฝ์ ์์กด)์ ์ ํธํ์ง ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ ๋ชจ๋ TCP/UDP ์์ฉ ํ๋ก๊ทธ๋จ์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค. docker์ ๋ค๋ฅธ ์ด๋ค ๊ฒ๋ ์น ์ ์ฉ์ด ์๋๋๋ค.
๋ค๋ฅธ ์บก์ํ ๋ฐฉ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํจํท ํฌ๊ธฐ/MTU ๋ฌธ์ ์ ๋ํ ์ฐ๋ ค๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์๋ง๋ ์ด ๋ฌธ์ ์ ๋ํ ๋ชจ๋ ์๋ฃจ์ ์ ๋ํ ์ฐ๋ ค ์ฌํญ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ๋ํ ๋๋ต์ ์ค์ ๋คํธ์ํฌ๊ฐ ์ค๋ฒํค๋๋ฅผ ํ์ฉํ ๋งํผ ์ถฉ๋ถํ ํฐ MTU๋ฅผ ์ง์ํ๋์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋๋ถ๋ถ์ ์ค์์ ๋ก์ปฌ ๋คํธ์ํฌ์์ ์คํ๋๋ฏ๋ก ํฐ ๋ฌธ์ ๋ ์๋ ๊ฒ์ ๋๋ค.
@trajano - ํธ์คํธ ๋คํธ์ํน(๊ทํ์ ์์ฑ ์๋ฃจ์ ์ด ์ํํ๋ ์์ ์ผ ์ ์์)๊ณผ ํจ๊ป ์๋ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ Swarm์ ๋ชจ๋ ํด๋ฌ์คํฐ ๋คํธ์ํน ์ด์ (์: ๋ก๋ ๋ฐธ๋ฐ์ฑ)์ ํฌ๊ธฐํฉ๋๋ค.
@dack ๋ฐฑ์๋๋ ํ๋ก์ ํ๋กํ ์ฝ์ ์์์ผ ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ๋๋ถ๋ถ์ ๊ฒฝ์ฐ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ์๊ฐํ๋ฉฐ ์ต์ํ ์ปจํ
์ด๋ ๋ด๋ถ์ ๋ฐฑ์๋ ์์์ ํ๋กํ ์ฝ ํค๋๋ฅผ ์ฒ๋ฆฌํ๋ ์์ ํต๊ณผ ๊ฐ์ ํ๋ก์๋ฅผ ๋ฐฐ์นํ ์ ์์ต๋๋ค.
์ ๋ณด ๋ถ์กฑ์ ์น๋ช
์ ์ธ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ๊น๋ํ ์๋ฃจ์
์ ์์ ์ต๋ํ ๋นจ๋ฆฌ ํด๊ฒฐํ๋ ๊ฒ์ด ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํ๋ก์ ํ๋กํ ์ฝ์ ๋๋ฆฌ ์์ฉ๋ฉ๋๋ค. ์ง์๋๋ ๋๊ตฌ์ ์๋ฅผ ํ์ธํ์ญ์์ค - https://www.haproxy.com/blog/haproxy/proxy-protocol/
ํด๋ผ์ฐ๋ ๋ก๋ ๋ฐธ๋ฐ์(ELB, Google LB) ๋ฐ Traefik๊ณผ ๊ฐ์ ์ต์ ๋๊ตฌ๋ ๋ค๋ฃจ์ง ์์ต๋๋ค.
๋ํ - ์ด๊ฒ์ kubernetes์ ๊ฑฐ์ ํ์ค์ ๋๋ค : https://github.com/kubernetes/ingress-nginx#proxy -protocol
์ด ์์ ์์ ํ๋ก์ ํ๋กํ ์ฝ์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ํ์ค์ ๋๋ค. ๋๋ ์ด๊ฒ์ ์ฌ๋ฐ๋ช ํ๊ณ ์ธ๊ณ์ nginx์์ ํธํ์ฑ์ ๊นจ๋ ๋ฐ ๋ง๋ํ ๊ฐ์น๋ฅผ ๋ณด์ง ๋ชปํฉ๋๋ค.
L7 ํ๋กํ ์ฝ์ ๋๋ค. Swarm ์ง์ ์ L4์ ๋๋ค. ์ฌ๊ธฐ์ ์ฌ์ฐฝ์กฐ๋๋ ๊ฒ์ ์์ผ๋ฉฐ DNAT๋ฅผ ์ฌ์ฉํ๋ ๋ชจ๋ IPVS์ ๋๋ค.
@cpuguy83์ ๋ฌด์จ ๋ชปํ์ต๋๋ค .
ํ๋ก์ ํ๋กํ ์ฝ์ ๊ณ์ธต 4์
๋๋ค.
http://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
PROXY ํ๋กํ ์ฝ์ ๋ชฉํ๋ ์๋ฒ์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ค์์ผ๋ก ์ฑ์ฐ๋ ๊ฒ์ ๋๋ค.
์๋ฒ๊ฐ ์ป์ ์ ์์๋ ํ๋ก์์ ์ํด ์์ง๋ ์ ๋ณด
ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ฅผ ํตํ์ง ์๊ณ ์๋ฒ์ ์ง์ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ ์์ฒด์ ์ผ๋ก
๋๋ฆฌ. ํ๋กํ ์ฝ์ด ์ ๋ฌํ๋ ์ ๋ณด๋ ์๋ฒ๊ฐ
getsockname() ๋ฐ 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
์๋ฝ ํ๋ก์
๋ค์ ์ค ํ๋๊ฐ ํ์ฉํ๋ ๋ชจ๋ ์ฐ๊ฒฐ์ ๋ํด PROXY ํ๋กํ ์ฝ ์ฌ์ฉ์ ์ํํฉ๋๋ค.
๊ฐ์ ์ค์ ์ ์ธ๋ ์์ผ. PROXY ํ๋กํ ์ฝ ๋ฒ์ 1 ๋ฐ 2
์ง์๋๊ณ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฐ์ง๋ฉ๋๋ค. PROXY ํ๋กํ ์ฝ์ ๊ณ์ธต์ ์ง์ํฉ๋๋ค.
์ฃผ์๊ฐ ์๋ ๋ชจ๋ ๊ณณ์์ ์ฌ์ฉ๋๋ ๋ค์ด์ค๋ ์ฐ๊ฒฐ์ 3/4 ์ฃผ์
"tcp-request ์ฐ๊ฒฐ" ๊ท์น์ ์ ์ธํ๊ณ ์ฌ์ฉ๋ฉ๋๋ค.
์ค์ ์ฐ๊ฒฐ ์ฃผ์๋ง ๋ณผ ์ ์์ต๋๋ค. ๋ก๊ทธ์ ์ฃผ์๊ฐ ๋ฐ์๋ฉ๋๋ค.
์๋ฐ๋์ง ์๋ ํ ํ๋กํ ์ฝ์ ํ์๋ ์ค์
์ฃผ์๋ ๊ณ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ธ๋ถ ์ง์๊ณผ ๊ฒฐํฉ๋ ์ด ํค์๋
๊ตฌ์ฑ ์์๋ฅผ ํจ์จ์ ์ด๊ณ ์ ๋ขฐํ ์ ์๋ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
X-Forwarded-For ๋ฉ์ปค๋์ฆ์ ํญ์ ์ ๋ขฐํ ์ ์๊ณ ํญ์ ๊ทธ๋ฐ ๊ฒ๋ ์๋๋๋ค.
์ธ ์ ์๋. ๋ ์ธ๋ถํ๋ "tcp-request connection expect-proxy"๋ ์ฐธ์กฐํ์ญ์์ค.
์ด๋ค ํด๋ผ์ด์ธํธ๊ฐ ํ๋กํ ์ฝ์ ์ฌ์ฉํ ์ ์๋์ง ์ค์ ํฉ๋๋ค.
ํ๋ก์ ํ๋กํ ์ฝ๋ณด๋ค ๋ ๋์ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๋ง์์ด์ ๊ฐ์? ๊ทธ๊ฒ์ ์ ์ ์ผ๋ก ๊ฐ๋ฅํ๋ฉฐ docker swarm์ ์์ค IP ๋ณด์กด๊ณผ ๊ด๋ จํ์ฌ ๋ ์๊ณ ์ถ์ต๋๋ค. ๊ทธ๋ฌ๋ ํ๋ก์ ํ๋กํ ์ฝ์ swarm-ingress๋ก ๋ค์ด์คํธ๋ฆผ์ด ๋ ๋ค๋ฅธ ๋๊ตฌ(nginx ๋ฑ)์ swarm-ingress๋ก ์ ์คํธ๋ฆผํ AWS ELB์ ๊ฐ์ ๋๊ตฌ์์ ๋ ๊ด๋ฒ์ํ๊ฒ ์ง์๋ฉ๋๋ค. ๋ด ์ ์ผํ $0.02
@sandys ํ๋ก์ ํ๋กํ ์ฝ์ ์บก์ํ(์ ์ด๋ ์ฐ๊ฒฐ ์์ ์)์ฒ๋ผ ๋ณด์ด๋ฉฐ, ์คํ ์๋๊น์ง ์์ ์๋ก๋ถํฐ ์บก์ํ์ ๋ํ ์ง์์ด ํ์ํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ง์ ์์ถฉ ๊ด๊ณ๊ฐ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ ํต์ฌ์ ์ผ๋ก ์ง์ํ๊ณ ์ถ์ง๋ ์์ง๋ง ์๋ง๋ ingress๋ฅผ ํ๋ฌ๊ทธ ๊ฐ๋ฅํ๊ฒ ๋ง๋๋ ๊ฒ์ ๊ฐ์น ์๋ ์ ๊ทผ ๋ฐฉ์์ด ๋ ๊ฒ์ ๋๋ค.
@sandys https://github.com/sandys ํ๋ก์ ํ๋กํ ์ฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ง์์ด ํ์ํ ์บก์ํ(์ ์ด๋ ์ฐ๊ฒฐ ์์ ์)
์คํ ์๋๊น์ง ์์ ๊ธฐ์์ ์บก์ํ. ๊ฑฐ๊ธฐ
์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ง์ ์์ถฉ ๊ด๊ณ๊ฐ ์์ต๋๋ค.
๊ทธ๊ฒ์ ์ฌ์ค์ด๋ค. ์ด๊ฒ์ด RFC์ ํ์ค์ธ ์ด์ ์
๋๋ค. ๊ฑฐ๊ธฐ
์ด ๋ค์ ์๋ ๋ชจ๋ฉํ
- ๊ฑฐ์ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์ค์์ฑ
์ง์ํฉ๋๋ค. IMHO ๊ทธ๊ฒ์ ์ง์ํ๋ ๊ฒ์ ๋์ ๊ฒฐ์ ์ด ์๋๋๋ค.
๋๋ ์ด๊ฒ์ ํต์ฌ์ ์ผ๋ก ์ง์ํ๊ณ ์ถ์ง๋ ์์ง๋ง ์๋ง๋
Pluggable์ ๊ฐ์น ์๋ ์ ๊ทผ ๋ฐฉ์์ด ๋ ๊ฒ์
๋๋ค.
์ด๊ฒ์ ๋ ํฐ ํ ๋ก ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ์ฅ ํฐ ๋จ์ผ ํญ๋ชฉ์
Docker Swarm์ ์ฅ์ ์ ๋ชจ๋ ๋ฐฐํฐ๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค.
๋ด์ฅ.
๋๋ ์ฌ์ ํ ํ๋ก์ ํ๋กํ ์ฝ์
์
๊ณ ์ง์์ด ์๋ ์ด ๋ฌธ์ .
Linux ๋ฐ LxC(ํนํ docker๊ฐ ์๋)์์ L3 ๋ผ์ฐํฐ๋ฅผ ์๋ฎฌ๋ ์ด์ ํ ์ ์์ต๋๊น?
@trajano ์๋ฎฌ๋ ์ด์
์ ํ์ํ์ง ์์ง๋ง ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์บก์ํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ํด๋ผ์ด์ธํธ IP ์ฃผ์๊ฐ ํ์ํ๊ณ nginx์ ๊ฐ์ ์บก์ํ๋ ํจํท์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์๋ ์๋น์ค์ ์ต์
(์: --use-proxy-protocol
)์ ์ ๊ณตํ ์ ์์ต๋๋ค.
ํ์ฌ ์๋ํ๊ณ ์๋ ๊ฒ์ฒ๋ผ ํจํท์ ์์ ํ ๋์ปค ๋ ธ๋๋ SNAT๋ฅผ ์ํํ๊ณ ํจํท์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์ด๋๊ฐ ์๋ ๋ ธ๋๋ก ์ ๋ฌํฉ๋๋ค. SNAT ๋์ ์ด๋ค ํํ์ ํฐ๋๋ง/์บก์ํ๊ฐ ์ฌ์ฉ๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝ๋์ง ์์ ์๋ ํจํท์ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ ๋ฌํ ์ ์์ด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ํด๊ฒฐ๋ ๋ฌธ์ ์ ๋๋ค. ์๋ฅผ ๋ค์ด OpenStack์ ์ฌ์ฉํ๋ฉด GRE ๋ฐ VXLAN๊ณผ ๊ฐ์ ํฐ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ์ค๋ ๋์ ์ต๊ทผ ๋ถ๋ถ์ ๋์ปค ํ์ ๋ํํ๊ณ ์ ์ด๋ '์ฐ๋ฆฌ๋ ๋น์ ์ ๋ง์ ๋ฃ๊ณ ์์ต๋๋ค'๋ผ๊ณ ๋งํ๋ ์ฌ๋์ด ์์ต๋๊น? '์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅ'ํ ๊ฒ์ผ๋ก ์์ํ๊ณ ์ปค๋ฎค๋ํฐ์ ๊ด์ฌ์ด ์๋ ๊ธฐ๋ฅ์ด ์ฝ 18๊ฐ์ ์ ์ธ 2016๋ 8์ 9์ผ์ ์ฒ์ ๋ณด๊ณ ๋ ํ์๋ ์ฌ์ ํ ํด๊ฒฐ๋์ง ์์ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์ด ์ค๋ ๋์ ์ต๊ทผ ๋ถ๋ถ์ ๋์ปค ํ์ ๋ํํ๊ณ ์ ์ด๋ '์ฐ๋ฆฌ๋ ๋น์ ์ ๋ง์ ๋ฃ๊ณ ์์ต๋๋ค'๋ผ๊ณ ๋งํ๋ ์ฌ๋์ด ์์ต๋๊น?
/cc @GordonTheTurtle @thaJeztah @riyazdf @aluzzardi
@bluejaguar @ruudboon ์ ๋ Docker์ ์ผ์์ ๋๋ค. ์ด๊ฒ์ ์ ์๋ ค์ง ๋ฌธ์ ์ ๋๋ค. ํ์ฌ ๋คํธ์ํฌ ํ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํน ์์ ์ฑ์ด ์๋ ์ค๋ ๋ฒ๊ทธ์ ์ง์คํ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์ง๋ ๋ช ๋ฒ์ ๋ฆด๋ฆฌ์ค์์ ์๋ก์ด ๋คํธ์ํน ๊ธฐ๋ฅ์ด ์์๋ ์ด์ ์ ๋๋ค.
์ ์ ์์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ธฐ๊บผ์ด ๋ ธ๋ ฅํ ์ ์๋ ๊ตฌ์ฒด์ ์ธ ์ ์์ด๋ ์ ์ด๋ ๋๊ตฌ๋ ์ฑํํ๊ณ ์คํํ ์ ์์ ๋งํผ ์ถฉ๋ถํ ์ข์ ์ ์์ ์ ์ํ๋ ๊ฒ์ ๋๋ค.
@ cpuguy83 ์ ๋ https://github.com/kubernetes/kubernetes/issues/42616(PS ํฅ๋ฏธ๋กญ๊ฒ๋ ์ฌ๊ธฐ์์ ํ๋ก์ ํ๋กํ ์ฝ์ HTTPS ๋ชจ๋์์ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ก์ ํ๋กํ ์ฝ์ ์ง์ํ๋ Google Kubernetes Engine์์ ์ ์ ๋ฉ๋๋ค).
๋ํ ELB๋ 2017๋ 11์์ Proxy Protocol 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์ฉ ํ๋ก์ ํ๋กํ ์ฝ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค(๋ ๋ค ์์ ์ ์ธ์ฆ์๋ฅผ ์ข
๋ฃํ๋ ๊ฒฝ์ฐ).
์ด ๋ฌธ์ ์ ๊ด๋ จ๋ ์
๋ฐ์ดํธ/ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น? docker swarm ๋ชจ๋์์ ํด๋ผ์ด์ธํธ IP๋ฅผ ์์์ผ ํฉ๋๋ค.
๋์์ ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ด ๋ฒ์ :
๊ณ ๊ฐ:
๋ฒ์ : 18.02.0-ce
API ๋ฒ์ : 1.36
์ด๋ ๋ฒ์ : go1.9.3
ํ๋ด ์ปค๋ฐ: fc4de44
์์ฑ์ผ: 2018๋
2์ 7์ผ ์์์ผ 21:16:33
OS/์์น: linux/amd64
์คํ์ : ๊ฑฐ์ง
์ค์ผ์คํธ๋ ์ดํฐ: ๋ฌด๋ฆฌ
์ฌ๊ธฐ๋ ์ฌ๋:
์์ง:
๋ฒ์ : 18.02.0-ce
API ๋ฒ์ : 1.36(์ต์ ๋ฒ์ 1.12)
์ด๋ ๋ฒ์ : go1.9.3
ํ๋ด ์ปค๋ฐ: fc4de44
์์ฑ์ผ: 2018๋
2์ 7์ผ ์์์ผ 21:15:05
OS/์์น: 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 ๋ค์ ์์ผ๋ฉฐ https://github.com/JrCs/docker-letsencrypt-nginx-proxy-companion ์ ์ฌ์ฉํ์ฌ SSL์ ํ์ฑํํฉ๋๋ค. nginx-proxy๋ docker swarm ์๋น์ค๊ฐ ์๋ docker run
๋ช
๋ น์ ํตํด ์คํ๋ฉ๋๋ค. ์๋ง๋ ๊ทธ๋์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ค์ IP๋ฅผ ์ป์์ต๋๋ค. ๋ด nginx ์ปจํ
์ด๋๊ฐ nginx-proxy์ ํต์ ํ๋ ค๋ฉด bridge
๋คํธ์ํฌ๊ฐ ํ์ํฉ๋๋ค.
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-compose up์ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํฉ๋๋ค.
๋๋ ๋ํ @goetas๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค์์ ์๋ํ์ต๋๋ค.
docker service create --constraint node.hostname==exposedhost \
--publish published=12555,target=12555,mode=host \
trajano.net/myimage
์ฌ์ ํ Server Version: 17.12.0-ce
์ ์๋ ์์ค IP๋ฅผ ์ป๋ ๋ฐ ์ด์ด ์์ต๋๋ค.
๋๊ตฌ๋ ํ ๋ฒ์ฏค์ ์ํ ๊ฒ ๊ฐ์ง๋ง, ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ๋ธ๋ฆฌ์ง/ํธ์คํธ ๋คํธ์ํน๊ณผ ํจ๊ป ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ ๋ก ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ํด๋ผ์ด์ธํธ IP๊ฐ ์ ๋ง๋ก ํ์ํ ๊ฒฝ์ฐ์ ์ฐจ๋จ๊ธฐ๊ฐ ๋ฉ๋๋ค.
๊ณ ๊ฐ:
๋ฒ์ : 17.12.0-ce
API ๋ฒ์ : 1.35
์ด๋ ๋ฒ์ : go1.9.2
ํ๋ด ์ปค๋ฐ: c97c6d6
์์ฑ์ผ: 2017๋
12์ 27์ผ ์์์ผ 20:03:51
OS/์์น: darwin/amd64
์ฌ๊ธฐ๋ ์ฌ๋:
์์ง:
๋ฒ์ : 17.12.1-ce
API ๋ฒ์ : 1.35(์ต์ ๋ฒ์ 1.12)
์ด๋ ๋ฒ์ : go1.9.4
ํ๋ด ์ปค๋ฐ: 7390fc6
์์ฑ์ผ: 2018๋
2์ 27์ผ ํ 22:17:54
OS/์์น: linux/amd64
์คํ์ : ์ฌ์ค
2018๋
์
๋๋ค. ์ด ๋ฌธ์ ์ ๋ํด ๋ ์๋ก์ด ๊ฒ์ด ์์ต๋๊น?
์ค์ ๋ชจ๋์์๋ nginx req ์ ํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. $remote_addr์ ํญ์ 10.255.0.2๋ฅผ ํฌ์ฐฉํ์ต๋๋ค.
์ด๊ฒ์ docker swarm์ ๋ํ ์ ๋ง ์ฌ๊ฐํ ๋ฌธ์ ์
๋๋ค.
์๋ง๋ ์ค๋๋ถํฐ 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 ์ด๋ฏธ swarm๊ณผ ํจ๊ป non-swarm ๋ฒ์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
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
๋์ปค ์คํ ๋ฐฐํฌ๋ฅผ ์ฌ์ฉํ๋ ๋ ์ด์์ ์์ ์๊ฐ ์๋ ๋ฌด๋ฆฌ์์ ์ด๊ฒ์ ํ ์คํธํ์ต๋๊น? ๋๋ ๊ทธ๊ฒ์ด ์์ฑ๊ณผ ํจ๊ป ์๋ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
2018๋ 3์ 18์ผ ์คํ 8์ 55๋ถ์ Brian Goff [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@trajano ์ด๋ฏธ swarm๊ณผ ํจ๊ป non-swarm ๋ฒ์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
๋ฒ์ : '3.4'
์๋น์ค:
์ํ:
์ด๋ฏธ์ง: ์ํ์ธ
๋ช ๋ น: ์๋จ
ํฌํธ:
- ๋์: 32555
์ถํ: 32555
ํ๋กํ ์ฝ: TCP
๋ชจ๋: ํธ์คํธ
๋คํธ์ํฌ:
- ๋ค๋ฆฌ๋คํธ์ํฌ:
๋ค๋ฆฌ:
์ธ๋ถ์:
์ด๋ฆ: ๋ค๋ฆฌ
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ์ค๋ ๋๋ฅผ ์์๊ฑฐํ์ธ์.
๋ค, ์ค์์ผ๋ก ํ๊ณ ์์ต๋๋ค...
2018๋
3์ 19์ผ ์์์ผ ์ค์ 9์ 12๋ถ, Archimedes Trajano <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋์ปค ์คํ์ด ์๋ ๋ ๋ช ์ด์์ ์์ ์๊ฐ ์๋ ๋ฌด๋ฆฌ์์ ์ด๊ฒ์ ํ ์คํธํ์ต๋๊น?
๋ฐฐํฌํฉ๋๋ค. ๋๋ ๊ทธ๊ฒ์ด ์์ฑ๊ณผ ํจ๊ป ์๋ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.2018๋ 3์ 18์ผ ์คํ 8์ 55๋ถ, Brian Goff ์๋ฆผ @github.com
์ผ๋ค:@trajano ์ด๋ฏธ Swarm๊ณผ ํจ๊ป ๋น Swarm ๋ฒ์ ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค ...
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.๋ฒ์ : '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๊ฐ์ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ๋ค์ docker swarm ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ด ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
์ค๋ฒ๋ ์ด ๋คํธ์ํฌ <-> nginx ํ๋ก์ jwilder ๋์ปค <-> nginx ์น ํค๋ ๋์ปค
๋๋ ์ ์์ ๋ฐ๋๊ณ ๋ก๊ทธ๋ ์ค์ ํด๋ผ์ด์ธํธ IP ๋์ ๋์ปค ๋คํธ์ํฌ IP 10.255.0.3์ ๊ณ์ ๋ฐํํฉ๋๋ค.
+1
@cpuguy83 ์ด๊ฒ์ ์ฐ๋ฆฌ์ ๋ ํฐ ๋ฌด๋ฆฌ ์ค์ ์ ๋ํ ์ฐจ๋จ๊ธฐ๊ฐ ๋๊ธฐ ์์ํ์ต๋๋ค. ๋ ๋ง์ ํด๋ผ์ฐ๋(ํ๋ก์ ํ๋กํ ์ฝ์ด ๋ก๋ ๋ฐธ๋ฐ์์ ์ํด ์ฌ์ค์ ์ฌ์ฉ๋๋ ๊ณณ)๋ฅผ ํ์ฉํ๊ธฐ ์์ํ๋ฉด์ ์ฐ๋ฆฌ์๊ฒ ๋งค์ฐ ์ค์ํ ์ด ์ ๋ณด๋ฅผ ์๊ฒ ๋ฉ๋๋ค.
ETA์ ๋ํด ์๊ณ ์์ต๋๊น? ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋ง์ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
@sandys ์ ํํ ๋ฌด์์ ์ํ ETA์ ๋๊น?
@cpuguy83 ์๋
ํ์ธ์, ๋ต๋ณํด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๊ด๋ฒ์ํ ํฉ์๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ ๋ ํ์ด ์ด๋ป๊ฒ ์์ ์ฑ ๋ฌธ์ ์ ๋ชฐ๋ํ๊ณ ์ด ๋ฌธ์ ์ ๋ํด ์์ ๋ก์์ง์ง ์์๋์ง์ ๋ํด ๋
ผํํ๊ณ ์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์ธ์ ๋ค๋ฃจ์ด์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ญ๋๊น(๋ง์ฝ ์๋ค๋ฉด)?
PublishMode=host๋ฅผ ์ฌ์ฉํ์ฌ ๊ธ๋ก๋ฒ ์๋น์ค ๋ฐ ๊ฒ์ ํฌํธ๋ฅผ ์คํํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฌ๋๋ค์ด ์ฐ๊ฒฐํ ๋ ธ๋๋ฅผ ์๊ณ ์๋ค๋ฉด ๊ทธ๋ด ํ์๋ ์์ต๋๋ค. ์ ์ฝ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ํด๋น ๋ ธ๋์ ๊ณ ์ ํ๋ฉด ๋ฉ๋๋ค.
@kleptog ๋ถ๋ถ์ ์ผ๋ก๋ ํ ์ ์์ต๋๋ค. ์๋น์ค๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋์ ๋ค์ดํ์์ ํผํ ์ ์์ต๋๋ค.
ํ ์คํธ ์๋๋ฆฌ์ค - lvs/ipvs๋ฅผ ์์ธํ ์ดํด๋ณด์ธ์.
์ด์ ์์ค IP๊ฐ ๋ณด์กด๋ฉ๋๋ค.
๋๋ ์ฌ์ ํ ์ธ๊ทธ๋ ์ค ์ปจํ
์ด๋์ snat ๊ท์น๋ง ์๋ ๋์ ๊ฐ ์๋น์ค ์ปจํ
์ด๋ ๋ด์์ ์ ์ฑ
๊ธฐ๋ฐ ๋ผ์ฐํ
์ ์ ์งํ๋ฉด์ ์ค๋ฒํค๋์ ์๋ฏธ๋ฅผ ์ดํดํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค.
ํ์ง๋ง ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ ๋ง ์๋๊ฐ์ ๋๋ ๊ฒ์
๋๋ค.
์์งํ ์ฅ๋์ ์ณ์ ์ฃ์กํ์ง๋ง ๋๊ตฐ๊ฐ( ์๋ ค์ค ์ ์์ต๋๊น?
์, ์ด์ ์ดํดํ์ต๋๋ค. ๋ค์ค ๋ ธ๋ ๋ผ์์ IP๋ lvs Director์ฌ์ผ ํฉ๋๋ค. ์์ฒญ์ด ๋ค์ด์จ ์ฌ๋ฐ๋ฅธ ๋ ธ๋๋ก ๋์๊ฐ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ ค๋ฉด...
์ด์จ๋ ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ์ ํฅ๋ฏธ๋ก์ธ ๊ฒ์ ๋๋ค. ๋๊ตฐ๊ฐ ์ด๋ฏธ ์๊ณ ์๋ค๋ฉด ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค
๋ค๋ฅธ ๊ตญ๊ฐ์ 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"
์คํจํฉ๋๋ค.
๋์ปค ๋ฒ์
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
๋ฌด๋ฆฌ๋ฅผ ์ฌํํด ๋ณด์ญ์์ค. ์ ๋ ์ค๋ฅ๊ฐ ์์์ต๋๋ค. Swarm์ ๋ค์ ์์ํ ํ ๋ชจ๋ ๊ฒ์ด ์ ์๊ฒ ํจ๊ณผ์ ์ด์์ต๋๋ค.
๋ด 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 ์ด๊ฒ์ ๋ด๊ฐ ์ฌ์ฉํ ๊ฒ์ด์ง๋ง "ํฌํ ์ด๋" ๋๋ 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
์ฃผ์ ์ฐจ์ด์ ์ ๋ด๊ฐ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค host
๋ณด๋ค๋ bridge
๋ด ๊ฒฝ์ฐ์๋ ๋ด๊ฐ ๋ํ ๋ฒ์ถ์ผ ๋ฐ์ค ๊ฐ์ ๋จธ์ ์ผ๋ก ๋ด ํธ์คํธ๋ฅผ ์คํํ๊ณ ๋๋์ NAT ๋ผ์ฐํ
๊ณผ ๊ทธ ๋ณด์กด ๋ค์ด์ค๋ IP ๋ชจ๋ ๋ฐฉ๋ฒ์ ์ํํ๋ ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉ ์ปจํ
์ด๋.
๋ฌผ๋ก ๋ก๋ ๋ฐธ๋ฐ์ฑ ๊ธฐ๋ฅ์ ์์ต๋๋ค. ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํ๋ฉด ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ํ ํ๋
@trajano ๊ฐ ๋ง์ต๋๋ค. Windows ํด๋ผ์ด์ธํธ๊ฐ ๋ฌธ์ ์๊ณ Linux ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ ๋ฐฐํฌ๊ฐ ์๋ํ์ต๋๋ค.
ํ์ง๋ง host
๋๋ bridge
๋คํธ์ํฌ๊ฐ ํ์ํ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ค์์ ๋์๊ฒ ์ ์๋ํฉ๋๋ค. ์ฆ, nginx์์ ์ค์ ํด๋ผ์ด์ธํธ IP ์ฃผ์๋ฅผ ์ป์ต๋๋ค.
version: '3.4'
services:
nginx:
ports:
- mode: host
protocol: tcp
published: 80
target: 80
@Mobe91 ๊ฐ์ฌํฉ๋๋ค. ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๋ ค๊ณ ํ์ต๋๋ค. Windows์ฉ 18.03-ce ํด๋ผ์ด์ธํธ์์ ์ฌ์ ํ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก https://github.com/moby/moby/issues/32957 ๊ณผ ์ฐ๊ฒฐ
๋๊ตฐ๊ฐ Cilium์ ์ฌ์ฉ ํ์ต๋๊น? http://cilium.readthedocs.io/en/latest/gettingstarted/docker/ .
์๋น์ค๋ฅผ ํธ์คํธ์ ์ฐ๊ฒฐํ์ง ์๊ณ ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
@sandys good find - ํ ์คํธ๋ฅผ ์์ํ๋ ค๊ณ ํฉ๋๋ค. ํจ๊ณผ๊ฐ ์์๋์? ๋ด๊ฐ ์ด๊ฒ์ ๊ณ ์น ์ ์๋ค๋ฉด ๋๋ ๋ด ๋ฌด๋ฆฌ์์ nginx๋ฅผ ๊บผ๋ด๋ ค๊ณ ํฉ๋๋ค .....
ํ๋ก์๋ฅผ ๊ฐ๋ณ ํธ์คํธ์ ๊ณ ์ ํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ๋ฐฐํฌ๋ฅผ ์ฌ์ค๊ณํ ๋ ์ด ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค(ํ๋ก๋์ ์์๋ ๋ค๋ฅธ ์ด์ ๋ก ์ธํฐํ์ด์ค์ ๋ฐ์ธ๋ฉํ๋ฏ๋ก ํด๋ผ์ด์ธํธ IP๋ฅผ ๋ถ์ฐ๋ฌผ๋ก "์ ํ").
ํ
์คํธ ํ๊ฒฝ์์๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ๋ผ ๊ด๋ฆฌ์์๊ฒ ๋ฐฐํฌํ๊ณ ๊ฐ ๊ด๋ฆฌ์๊ฐ ์คํ ์ค์ธ ์ธ์คํด์ค๋ฅผ ๊ฐ์ ธ์ค๋๋ก mode = global
๋ฅผ ์ค์ ํด์ผ๋ง ๊ฐ์ ํ ์ ์์ต๋๋ค. ํนํ ๊ด๋ฆฌ์ ๋
ธ๋๋ฅผ ์์ด๋ฒ๋ฆฌ๊ณ ๋ฌด์ธ๊ฐ๊ฐ ํธ๋ํฝ์ ํด๋น ๋
ธ๋๋ก ๋ณด๋ด๋ ๊ฒฝ์ฐ ์ธ์ํด์ผ ํ๋ ์ถ๊ฐ ์ค๋ฒํค๋์
๋๋ค. ๊ทธ๋ฌ๋ ๋จ์ผ ํธ์คํธ์ ๊ณ ์ ๋๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค.
@sandys Cilium ์ ์ฌ์ฉํด ๋ณด์ จ์ต๋๊น? ์ ์ด๋ k8s์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ Weave์ ์ ์ฌํด ๋ณด์ ๋๋ค: https://github.com/kubernetes/kubernetes/issues/51014
Cilium์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ฐ Cilium์ ์์ ๋ด๋ฐ์์ต๋๋ค.
devs๋ Swarm ๊ตฌ์ฑ์ ๋์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ Cilium์ ๋ํด ๋งค์ฐ ํฅ๋ถํ๊ณ ์์ต๋๋ค.
์นจ์
์ ํด๊ฒฐํ๊ณ ์ ํ๋ ๋ช
์๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์(์ง์กฐ์ ๋ฌ๋ฆฌ)
2018๋ 5์ 10์ผ ๋ชฉ์์ผ 17:24 James Green, [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํ๋ก์๋ฅผ
๊ฐ๋ณ ํธ์คํธ(ํ๋ก๋์ ์์ ๋ค๋ฅธ ํธ์คํธ์ ์ธํฐํ์ด์ค์ ๋ฐ์ธ๋ฉ
์ด์ ๊ฐ ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ IP๋ฅผ ๋ถ์ฐ๋ฌผ๋ก "์ ํ"ํฉ๋๋ค.์ฐ๋ฆฌ์ ํ ์คํธ ํ๊ฒฝ์์๋ ๋ค์์ ํตํด ๊ด๋ฆฌ์์๊ฒ ๋ฐฐํฌํจ์ผ๋ก์จ๋ง ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ ์ฝ ๋ฐ ์ค์ ๋ชจ๋ = ์ ์ญ์ ์ผ๋ก ๊ฐ ๊ด๋ฆฌ์๊ฐ
์คํ ์ค์ธ ์ธ์คํด์ค. ๊ทธ๊ฒ์ ์ฌ์ ํ โโ์์์ผ ํ ์ถ๊ฐ ์ค๋ฒ ํค๋์ ๋๋ค.
ํนํ ๊ด๋ฆฌ์ ๋ ธ๋๋ฅผ ์๊ณ ๋ฌด์ธ๊ฐ๊ฐ ์ฐ๋ฆฌ๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ
ํธ๋ํฝ. ๊ทธ๋ฌ๋ ๋จ์ผ ํธ์คํธ์ ๊ณ ์ ๋๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค.@sandys https://github.com/sandys Cilium ์ ์ฌ์ฉํด ๋ณด์ จ์ต๋๊น? ์ ๋น์ทํด ๋ณด์ ๋๋ค.
์ ์ด๋ k8์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ Weave:
์ฟ ๋ฒ๋คํฐ์ค/์ฟ ๋ฒ๋คํฐ์ค#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๋ถ์ "James Green" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํ๋ก์๋ฅผ
๊ฐ๋ณ ํธ์คํธ(ํ๋ก๋์
์์ ๋ค๋ฅธ ํธ์คํธ์ ์ธํฐํ์ด์ค์ ๋ฐ์ธ๋ฉ
์ด์ ๊ฐ ์์ผ๋ฏ๋ก ํด๋ผ์ด์ธํธ IP๋ฅผ ๋ถ์ฐ๋ฌผ๋ก "์ ํ"ํฉ๋๋ค.
์ฐ๋ฆฌ์ ํ
์คํธ ํ๊ฒฝ์์๋ ๋ค์์ ํตํด ๊ด๋ฆฌ์์๊ฒ ๋ฐฐํฌํจ์ผ๋ก์จ๋ง ๊ฐ์ ํ ์ ์์ต๋๋ค.
์ ์ฝ ๋ฐ ์ค์ ๋ชจ๋ = ๊ฐ ๊ด๋ฆฌ์๊ฐ ์คํ๋๋๋ก ํ๋ ์ ์ญ
์ฌ๋ก. ํนํ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์์์ผ ํ ์ถ๊ฐ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ด๋ฆฌ์ ๋
ธ๋๋ฅผ ์๊ณ ๋ฌด์ธ๊ฐ๊ฐ ์ฐ๋ฆฌ์ ํธ๋ํฝ์ ๊ทธ๊ณณ์ผ๋ก ๋ณด๋ด๊ณ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋จ์ผ ํธ์คํธ์ ๊ณ ์ ๋๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค.
@sandys https://github.com/sandys Cilium ์ ์ฌ์ฉํด ๋ณด์
จ์ต๋๊น? ์ ๋น์ทํด ๋ณด์
๋๋ค.
์ ์ด๋ k8์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒช๋ ๊ฒ์ผ๋ก ๋ณด์ด๋ Weave:
์ฟ ๋ฒ๋คํฐ์ค/์ฟ ๋ฒ๋คํฐ์ค#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
.
์๋
์๋ค์,
Cilium์์ Docker Swarm ์ง์์ ์ํ๋ ๊ฒฝ์ฐ(ํนํ Ingress ๋ฐ
์ด ํน์ ๋ฌธ์ ์ ๊ด๋ จํ์ฌ), ์ด ๋ฒ๊ทธ์ ๋ํด ๋๊ธ/์ข์์ -
https://github.com/cilium/cilium/issues/4159
2018๋ 5์ 11์ผ ๊ธ์์ผ ์ค์ 12์ 59๋ถ์ 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
ํ๋ฉด ingress์ ์ํ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ด ์ค์ง๋๊ณ ์ค์ 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
์ฐ๋ถํฌ 16.04.4 LTS
์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
Docker ๋ฒ์ 18.03.1-ce, ๋น๋ 9ee9f40
์ฐ๋ถํฌ 16.04.4 LTS
์ฃผ์ ์ฌํญ: IPTABLES=FALSE๋ก ์ค์ ํ ๊ฒฝ์ฐ ์๋ํ์ง ์์ต๋๋ค!
UFW๋ฅผ ์ฌ์ฉํ์ฌ ํฌํธ๋ฅผ ๋ณดํธํ๊ณ docker swarm์ด ํด๋น UFW ์ค์ ์ ์ฌ์ ์ํ๋ ๊ฒฝ์ฐ ์ด ์์
์ ์ํํ์ ์ ์์ต๋๋ค(๋๋ ์ ์ด๋ ์ ๋ ์ํํ์ต๋๋ค).
๋ช ๋ น์ ํตํด ๋๋ /etc/docker/daemon.json์์ iptables = false ์ค์ ์ ์ ์ํ๋ ๋ช ๊ฐ์ง ์์ต์๊ฐ ์์ต๋๋ค.
๋ฐ๋ผ๊ฑด๋ ์ด๊ฒ์ ๋ด๊ฐ ๋ฐฉ๊ธ ๊ฒช์๋ ์ข์ ๊ฐ์ ๋๊ตฐ๊ฐ์๊ฒ ์ ์ฅํฉ๋๋ค!
Ingress๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ "Mode: host" = working์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ ์ค๋จํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ Swarm์์ ์คํ๋๋ ์๋น์ค์ ํจ๊ป ํ๋์ ์ปจํ ์ด๋๋ง ๊ฐ์ง ์๋ ์์ง๋ง ์ฌ์ ํ ๋ชจ๋ ํธ์คํธ๋ฅผ ํตํด ์ก์ธ์คํ ์ ์์ต๋๋ค. ์๋น์ค๋ฅผ "์ ์ญ"์ผ๋ก ๋ง๋ค์ด์ผ ํ๊ฑฐ๋ ์คํ ์ค์ธ ํธ์คํธ์์๋ง ์ก์ธ์คํ ์ ์์ผ๋ฏ๋ก Swarm์ ๋ชฉ์ ์ ์ด๊ธ๋ฉ๋๋ค.
TLDR: "๋ชจ๋: ํธ์คํธ"๋ ํด๊ฒฐ์ฑ ์ด ์๋๋ผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
@r3pek ์ด ๊ณค๊ฒฝ์ ํด๊ฒฐํ๊ธฐ ์ํด ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ฉด Ingress๋ฅผ ์๊ฒ ๋๋ค๋ ๋ฐ ๋์ํ์ง๋ง, Swarm์ ์ ์ฒด ๋ชฉ์ ์ ๊ฑฐ์
์ธํธ๋ผ๋ท์ ํตํด์๋ง ์ก์ธ์คํด์ผ ํ๋ ๋ณต์ ๋ ์ปจํ
์ด๋ ๊ด๋ฆฌ -> ํธ์ถ์์ IP๊ฐ ํ์ํ์ง ์์ผ๋ฏ๋ก "์ ์์ ์ผ๋ก" ๊ตฌ์ฑ๋๊ณ ์์ ์ ํ์ฉํฉ๋๋ค.
๋
ธ์ถ๋์ง ์์ ์ปจํ
์ด๋ -> ์ด์ ๋ํด ํ ๋ง์ด ์์ต๋๋ค(๋น์ ์ ์๋น์ค ์ด๋ฆ์ ํตํด ์ก์ธ์คํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ณผ์ํ๊ฐํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค).
๊ณต๊ฐ ์๋น์ค -> https ๋ฐ url ๊ธฐ๋ฐ ๋ผ์ฐํ
์ ์ํํ๋ nginx ํ๋ก์์
๋๋ค. ํด๋ผ์ด์ธํธ์ ์ค์ IP์ ๋ํด x-forward-forward๊ฐ ํ์ํ๊ธฐ ์ ์๋ ์ ์ญ์ ์ผ๋ก ์ ์๋์์ผ๋ฏ๋ก ์ค์ ๋ฌธ์ ๋ ์์ต๋๋ค.
nginx ์ ์ญ์ด ์๊ณ ์์ ์ด ์๋ค๋ ๊ฒ์ ํด๋ฌ์คํฐ์ ๋ชจ๋ IP๋ฅผ ํตํด ์ฐ๊ฒฐํ ์ ์์ง๋ง ๋ถํ ๋ถ์ฐ ๋๋ ๋ด๊ฒฐํจ์ฑ์ด ์์ผ๋ฏ๋ก nginx ์์ ๋งค์ฐ ์ ๋ ดํ๊ณ ์ค์ ํ๊ธฐ ์ฌ์ด L4 Azure Load Balancer๋ฅผ ์ถ๊ฐํ์ต๋๋ค. ์๋น์ค.
๋น์ ์ด ๋งํ๋ฏ์ด Host๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด์ง๋ง ๊ทธ๊ฒ์ ํ์ฑํํ๋ ๊ฒ์ด Docker Swarm์ ๋ชฉ์ ์ ์์ ํ ๋ฌดํจํํ๋ค๊ณ ๋งํ๋ ๊ฒ์ ์ฝ๊ฐ ๊ณผ์ฅ๋ imo์ ๋๋ค.
์๋
๋ก๋ฒ ๋ฅดํ
๋๋ ๊ทธ๊ฒ์ด ๊ณผ์ฅ๋์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ์๋ํ๋ฉด ํธ์คํธ ๋ชจ๋๊ฐ ๋จ์ผ ์ง์ ์ ๋
ธ์ถํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์คํจ์. ๋ํ ๋ถํ์ ๋ํ ์ถ๊ฐ ๊ด๋ฆฌ ๊ณ์ธต์ด ํ์ํฉ๋๋ค.
๋ฌด๋ฆฌ ์ํ๊ณ ์ธ๋ถ์์ ๊ท ํ์ ์ ์งํฉ๋๋ค.
azure lb๋ฅผ ์ง์ ์ฌ์ฉํ๋ค๊ณ ๋งํจ์ผ๋ก์จ
๋
ผ์.
"ํด๋ผ์ด์ธํธ IP ์ ํ๋ก ์ค์์ ์คํํ๋ ค๋ฉด,
์ค์ ํ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง ํ์ธํ์ญ์์ค...๋๋
ํด๋ผ์ฐ๋ ์๋น์ค ์ค ํ๋"
์ฐ๋ฆฌ๋ ์ด๊ฒ์ด ์ผ์์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ...
์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ฒ์ฃผ์ ์ผ๋ก ์ธ์ํ์ง ์๋๋ค๋ฉด Swarm์ ์ฝ์์ ๋ฌด์ํฉ๋๋ค.
๊ฒฐ์ .
2018๋
7์ 5์ผ ๋ชฉ์์ผ 14:16 Roberto Fabrizi, [email protected]
์ผ๋ค:
@r3pek https://github.com/r3pek ๋น์ ์ด ์ง๋ ๊ฒ์ ๋์ํ์ง๋ง
์ด ๊ณค๊ฒฝ์ ํด๊ฒฐํ๊ธฐ ์ํด ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Ingress๋ ๋ค์๊ณผ ๊ฐ์ด ๋งํ ์ ์์ต๋๋ค.
Swarm์ ์ ์ฒด ๋ชฉ์ ์ ๊ฑฐ์ ์ข์ ์ํค์ง ์์ผ๋ฉฐ, ๊ทธ ์ด์์ ์ญํ ์ ํฉ๋๋ค.
๊ณต๊ฐ ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ. ์ฐ๋ฆฌ์ ์ฌ์ฉ ์๋๋ฆฌ์ค์์ ์ฐ๋ฆฌ๋ ๋์ผํ
์ค๋ฒ๋ ์ด ๋ผ:
๋ฅผ ํตํด์๋ง ์ก์ธ์คํด์ผ ํ๋ ๋ณต์ ๋ ์ปจํ ์ด๋ ๊ด๋ฆฌ
์ธํธ๋ผ๋ท -> ๋ฐ์ ์์ IP๊ฐ ํ์ํ์ง ์์ผ๋ฏ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
"์ ์์ ์ผ๋ก"ํ๊ณ ์นจ์ ์ ์ด์ฉํ์ญ์์ค.
๋ ธ์ถ๋์ง ์์ ์ฉ๊ธฐ -> ์ด๊ฒ์ ๋ํด ํ ๋ง ์์(๋๋ ๋น์ ์ด
์๋น์ค๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๋ ํ์ ๊ณผ์ํ๊ฐ
์ด๋ฆ).
๊ณต๊ฐ ์ปจํ ์ด๋ -> https ๋ฐ url์ ์ํํ๋ nginx ํ๋ก์์ ๋๋ค.
๊ธฐ๋ฐ ๋ผ์ฐํ . x-forward-for๊ฐ ํ์ํ๊ธฐ ์ ์๋ ์ ์ญ์ ์ผ๋ก ์ ์๋์์ต๋๋ค.
ํด๋ผ์ด์ธํธ์ ์ค์ IP์ด๋ฏ๋ก ์ค์ ๋ฌธ์ ๋ ์์ต๋๋ค.nginx ์ ์ญ์ด ์๊ณ ์์ ์ด ์๋ค๋ ๊ฒ์ ๋ค์์ ํตํด ๋๋ฌํ ์ ์์์ ์๋ฏธํฉ๋๋ค.
ํด๋ฌ์คํฐ์ ๋ชจ๋ IP์ด์ง๋ง ๋ก๋ ๋ฐธ๋ฐ์ฑ๋์ง ์์์ผ๋ฏ๋ก ๋งค์ฐ
nginx ์์ L4 Azure Load Balancer๋ฅผ ์ ๋ ดํ๊ณ ์ฝ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
์๋น์ค.๋น์ ์ด ๋งํ๋ฏ์ด ํธ์คํธ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด์ง๋ง ์์ ํ ํ์ฑํํ๋ค๊ณ ๋งํฉ๋๋ค.
Docker Swarm์ ๋ชฉ์ ์ ์ด๊ธฐ๋ ๊ฒ์ ์กฐ๊ธ ๊ณผ์ฅ๋ ๊ฒ์ ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-402650066 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAEsU_ogRzwM6X0PMknXxsxmZLLTtfraks5uDdJlgaJpZM4Jf2WK
.
Docker Swarm์ ์์ ์ ์ํด ๋ถ๋ํ ๋ก๋ ๋ฐธ๋ฐ์(IPVS)๊ฐ ์ ํ๋์์์ ์ ์ ์์ต๋๋ค. ์ต์ํ L4 ํ๋ก์ ํ๋กํ ์ฝ ์ ์ง์ํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. L7 lb๊ฐ ์ ๊ณตํ ์ ์๋ ๋ชจ๋ ์ถ๊ฐ ๊ธฐ๋ฅ์ด ์๋ L4(TCP) ๋ก๋ ๋ฐธ๋ฐ์๋ผ๋ ์ ๋ง ์ ์ธํ๊ณ .
Kubernetes์๋ nginx ingress , haproxy ingress ์ ๊ฐ์ L4(TCP)-L7(HTTP) ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์์ต๋๋ค. ์ด ๋ก๋ ๋ฐธ๋ฐ์๋ L4 ํ๋ก์ ํ๋กํ ์ฝ ๋๋ L7 HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ X-Forwarded-For
๊ฐ ์ฌ์ฉ์์ ์ค์ ์ ๋ฌ์ ํ์ฉ๋๋๋ก ํฉ๋๋ค. ๋ฐฑ์๋์ ๋ํ IP์
๋๋ค.
Docker Swarm ์ธ๊ทธ๋ ์ค์ ๊ฐ๋ฐ์๊ฐ ๋ญ๋ผ๊ณ ํ ์ง ๊ถ๊ธํฉ๋๋ค. ์๋ง๋ ๋๊ตฐ๊ฐ ์ด ์ผ์ด์ค๋ฅผ https://github.com/docker/swarmkit/issues ๋ก ์ฎ๊ฒจ์ผ ํฉ๋๊น?
Kubernetes์๋ nginx ingress, haproxy ingress์ ๊ฐ์ L4(TCP)-L7(HTTP) ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์์ต๋๋ค. ์ด ๋ก๋ ๋ฐธ๋ฐ์๋ L4 ํ๋ก์ ํ๋กํ ์ฝ ๋๋ L7 HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ X-Forwarded-For๊ฐ ์ฌ์ฉ์์ ์ค์ IP๋ฅผ ์ ๋ฌํ๋ ๋ฐ ํ์ฉ๋๋๋ก ํฉ๋๋ค. ๋ฐฑ์๋๋ก.
AFAICS, ์ด๋ฌํ LB ์๋น์ค๋ K8์ ํฌํจ๋์ง ์๊ณ ๋ช ์์ ์ผ๋ก ๋ฐฐํฌ๋์ด์ผ ํ๋ ์๋น์ค์ ๋๋ค. Docker swarm์์๋ ๋์ผํ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ๋๋ ์ฌ๊ธฐ์ ์ฐจ์ด๋ฅผ ๋ณด์ง ๋ชปํ๋ค. (๊ทธ ์ธ์๋ nginx ์์ ์ปจํธ๋กค๋ฌ๊ฐ "๊ณต์"์ธ ๊ฒ ๊ฐ์ต๋๋ค.)
๋ด๊ฐ ์๋ ํ, ์ฐจ์ด์ ์ ์ด๋ฌํ ๋ก๋ ๋ฐธ๋ฐ์ฑ ์๋น์ค๋ฅผ ๋ฐฐํฌํ๋๋ผ๋ swarmkit ๋ก๋ ๋ฐธ๋ฐ์์์ 'ํธ์ถ'๋์ด ์ฌ์ฉ์ IP๋ฅผ ์๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ swarmkit ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
๊ณตํํ๊ฒ - k8์์๋ ์ฌ์ฉ์ ์ง์ ์ธ๊ทธ๋ ์ค๋ฅผ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฌด๋ฆฌ์์
์๋๋ค.
Swarm์ ๋ชจ๋ ๊ฒ์ด "๋ด์ฅ"๋์ด ์๋ค๋ ์
์ฅ์ ์ทจํฉ๋๋ค. ์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง
๋คํธ์ํฌ - k8s์์๋ weave ๋ฑ์ ์ค์ ํด์ผ ํฉ๋๋ค. swarm์ ๋ด์ฅ๋์ด ์์ต๋๋ค.
๊ทธ๋์ andrey๊ฐ ๋งํ๊ณ ์๋ ์์ ์ (๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด๋ ์ ๋ ๋์ํฉ๋๋ค) -
Swarm์ ์ด ๊ธฐ๋ฅ์ Ingress์ ์ผ๋ถ๋ก ๋ง๋ค์ด์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ ๋ํ ํต์ ๊ฐ ์์ต๋๋ค.
2018๋ 7์ 28์ผ ํ ์์ผ ์คํ 5์ 77๋ถ Seti [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
๋ด๊ฐ ์๋ ํ, ์ฐจ์ด์ ์ ๊ทธ๋ฌํ ๋ฐฐํฌ๋ฅผ
๋ก๋ ๋ฐธ๋ฐ์ฑ ์๋น์ค Swarmkit ๋ก๋ ๋ฐธ๋ฐ์์์ 'ํธ์ถ'๋ฉ๋๋ค.
๊ทธ๋์ ๋น์ ์ ์ฌ์ฉ์ IP๋ฅผ ๋์จํ๊ฒํฉ๋๋ค. ๋ฐ๋ผ์ Swarmkit์ ๋นํ์ฑํํ ์ ์์ต๋๋ค.
ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ๋ก๋ ๋ฐธ๋ฐ์.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-408601274 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAEsU1-Ism_S1Awml8lO8N0Aq6rtrLH4ks5uLEzugaJpZM4Jf2WK
.
๋๋ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ฆฌ์ ์ค์ ์ฃผ๋ฆ์ ๋ค๋ค๋ค๊ณ ์๊ฐํ์ง๋ง, ์ฐ๋ฆฌ๋ ๋ฌด๋์ ์ฌ๋๊ณ ์น ์๋ฒ ์ปจํ ์ด๋์ ๋ํ ๋ชจ๋ ์ธ๋ถ ์ก์ธ์ค๊ฐ ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ IP๋ก ๋ํ๋๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค.
์ ๋ ๋จ์ผ ๋ ธ๋ ๋ผ์์ ์คํ์ ์คํํ๊ณ ์์ผ๋ฉฐ ์ ์ด๋ ์์ผ๋ก ๋ช ๋ฌ ๋์์ ๊ทธ๋ ๊ฒ ํ ๊ฒ์ ๋๋ค. ํ์ฌ(๋จ์ผ ๋ ธ๋ ๋ฌด๋ฆฌ) ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ๊ฐ์ฅ ๋ ๋์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ถ์ฒํ ์ ์์ต๋๊น? ํด๋ผ์ด์ธํธ IP ์์ด๋ ํ ์ ์์ต๋๋ค. ๋๋ฌด ๋ง์ด ์์กดํฉ๋๋ค.
์ฐ๋ฆฌ์ ์์ ์ ๊ทผ ๋ฐฉ์์ "๊ธ๋ก๋ฒ" ๋ชจ๋(IIRC๊ฐ ์ค์ NIC์ IP๋ฅผ ์ป์ ์ ์์)์์ ๊ฐ๋จํ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ค์ ํ๋ก์ ํค๋๊ฐ ์ถ๊ฐ๋ ์ค์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์์ ์คํ๋๋ ๋ด๋ถ ์๋น์ค๋ก ๋ชจ๋ ์ฐ๊ฒฐ์ ์ ๋ฌํ๋๋ก ํ๋ ๊ฒ์ด์์ต๋๋ค.
x-forwarded-for ํค๋๋ฅผ ์ป๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํ๋ค๋ฉด ํด๋น ์ค์ ์ด AFAICT๋ฅผ ์๋ํด์ผ ํฉ๋๋ค.
@maximelb๋, ๊ฐ์ฌํฉ๋๋ค. ๊ฒฐ๊ตญ ๋ฌด์์ ์ฌ์ฉํ๊ฒ ๋์์ต๋๊น(์: nginx, haproxy)?
@jamiejackson ์ํฉ์ด ์กฐ๊ธ ๋ค๋ฅผ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ์ ๊ฒฝ์ฐ์๋ ์ฅ๊ธฐ ์คํ SSL ์ฐ๊ฒฐ์ ํธ์คํ ํ๋ ์๋ฒ์ ๊ทธ ์๋์์ HTTP ํ๋ก์๊ฐ ๊ฐ๋ฅํ์ง ์์ ์ฌ์ฉ์ ์ง์ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ์คํํ๊ณ ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ๊ฐ๋จํ TCP ํฌ์๋๋ฅผ ๋ง๋ค๊ณ ๋ด๋ถ ์๋ฒ์์ ์๋์ผ๋ก ์์ถ์ ํ ์ ์๋ "msgpack" ํค๋๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๋๋ HTTP ํ๋ก์์ ์ต์ํ์ง ์์ง๋ง ๋๋ถ๋ถ์ด ๋น์ ์ ์ํด ํธ๋ฆญ์ ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. :-/
์๋
ํ์ธ์ ๋งฅ์ฌ์
๋๋ค.
์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ๋งค์ฐ ํฅ๋ฏธ ๋กญ์ต๋๋ค. docker-compose๋ฅผ ๊ณต์ ํ ์ ์์ต๋๊น?
๊ฐ๋ฅ์ฑ ?
๋๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค. ์ค๋ ์ฐ๋ฆฌ๋ nginx๋ฅผ ์ญ์ผ๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค.
ํ๋ก์(์๋น์ค๋ก) ๋ฐ ๊ทธ ๋ค์ ์๋ ์ฌ๋ฌ ๋์ปค ์๋น์ค.
๊ทํ์ ๊ฒฝ์ฐ - nginx๊ฐ "๊ธ๋ก๋ฒ ๋ชจ๋"ํ๋ก์๊ฐ๋ฉ๋๊น? ์๋๋ฉด ๊ทธ๊ฒ์
ํน์ TCP ์ ๋ฌ์. ๋ฐ๋ผ์ ๋
ธ๋ ์๋ฅผ ํ์ฅํจ์ ๋ฐ๋ผ ํ๋ก์ ์ ๋ฌ์๋
๊ฐ ๋
ธ๋๋ก ์ด๋ํฉ๋๋ค. ๋๋ ์ด๋ป๊ฒ ๋ ์ด ์ํฉ์์ ์๊ฐํ์ต๋๋ค.
์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ๊ฐ ์ธ๋ถ IP๋ฅผ ์ฃฝ์ด๊ธฐ ๋๋ฌธ์ ํค๋๊ฐ ์์ค๋ฉ๋๋ค.
(ํ๋ก์ ํ๋กํ ์ฝ์ด ์๊ธฐ ๋๋ฌธ์).
์ข ๋ ์์ธํ ์ ๋ณด๋ฅผ ์๋ ค์ฃผ์๋ฉด ์ ๋ง ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ฌธ์ ์ธ์ฌ
์๋ํ
2018๋
8์ 8์ผ ์์์ผ ์ค์ 7:18 Maxime Lamothe-Brassard <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ฐ๋ฆฌ์ ์์ ์ ๊ทผ ๋ฐฉ์์ ๋ค์์์ ๊ฐ๋จํ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ๊ฒ์ด์์ต๋๋ค.
"๊ธ๋ก๋ฒ" ๋ชจ๋(IIRC๊ฐ ์ค์ NIC์ IP๋ฅผ ์ป์ ์ ์์)
๋ชจ๋ ์ฐ๊ฒฐ์ Swarm์์ ์คํ ์ค์ธ ๋ด๋ถ ์๋น์ค๋ก ์ ๋ฌ
ํ๋ก์ ํค๋๊ฐ ์ถ๊ฐ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ.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์์ ๋ฐ์ทํ ๋ด์ฉ์ด ์์ต๋๋ค.
์ด๊ฒ์ ์ญ๋ฐฉํฅ ํ๋ก์ 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 swarm ๋
ธ๋์ ์ ํํ ํ ๋ฒ ๋ฐฐํฌํฉ๋๋ค. mode: host
ํฌํธ๋ "๋
ธ๋์ ๊ธฐ๋ณธ NIC์ ๋ฐ์ธ๋ฉ"์ด๋ผ๊ณ ๋งํฉ๋๋ค.
๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉ ์ค์
๋๋ค. ๊ทธ๋์ ๊ฑฐ์ ์ธ๋ถ ๋ถํ ๋ถ์ฐ ์ฅ์น๊ฐ ์์ต๋๋ค.
๋ชจ๋ ๊ฒ ์์์.
ํธ์คํธ ๋ชจ๋์ ์์ผ๋ฏ๋ก ๋ ์ด์ Swarm์ ์์กดํ ์ ์์ต๋๋ค.
๊ทธ๊ฒ์ด ์ค์ ๋ก ์ฐ๋ฆฌ๊ฐ ์ ์ ๋์ ์ด์ผ๊ธฐํด ์๋ ๋ฌธ์ ์ ๋๋ค :(
2018๋
8์ 8์ผ ์์์ผ, 20:47 Maxime Lamothe-Brassard, <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@sandys https://github.com/sandys ํ์คํฉ๋๋ค. ์ฌ๊ธฐ์์ ๋ฐ์ทํ ๋ด์ฉ์ด ์์ต๋๋ค.
๊ด๋ จ ์ปจํ ์ด๋๋ก docker-compose.์ด๊ฒ์ ์ญ๋ฐฉํฅ ํ๋ก์ docker-compose ํญ๋ชฉ์ ๋๋ค.
์ญ ํ๋ก์:
์ด๋ฏธ์ง: yourorg/repo- proxy:latest
๋คํธ์ํฌ:
- network_with_backend_service
๋ฐฐํฌ:
๋ชจ๋: ๊ธ๋ก๋ฒ
ํฌํธ:
- ๋์: 443
์ถํ: 443
ํ๋กํ ์ฝ: TCP
๋ชจ๋: ํธ์คํธ๋ค์์ ๋ฐฑ์๋ ์๋น์ค ํญ๋ชฉ์ ๋๋ค.
๋ฐฑ์๋ ์๋น์ค:
์ด๋ฏธ์ง: yourorg/repo- backend:์ต์
๋คํธ์ํฌ:
- network_with_backend_service
๋ฐฐํฌ:
๋ณต์ ๋ณธ: 2๋ฆฌ๋ฒ์ค ํ๋ก์(๋ฐฑ์๋ ์ธก)์ ๋์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
task.backendservice(๋ชจ๋ ๋ณต์ ๋ณธ์ ๋ํ A ๋ ์ฝ๋๊ฐ ์์). ๋น์ ์ ํ ์ ์์ต๋๋ค
๋ฐฑ์๋ ์๋น์ค๊ฐ ๊ธฐ๋ณธ ์ค์์ ์๋ ๊ฒฝ์ฐ ๋คํธ์ํฌ ๋ถ๋ถ์ ๊ฑด๋๋๋๋ค.
์ค๋ฒ๋ ์ด ๋คํธ์ํฌ.์ ์ญ ๋นํธ๋ "์ด ์ปจํ ์ด๋๋ฅผ ๋ชจ๋ Docker์ ์ ํํ ํ ๋ฒ ๋ฐฐํฌํฉ๋๋ค.
๋ฌด๋ฆฌ ๋ ธ๋. ํฌํธ ๋ชจ๋: ํธ์คํธ๋ "๋ค์ดํฐ๋ธ์ ๋ฐ์ธ๋ฉ
๋ ธ๋์ NIC".๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-411442155 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAEsU8N7KAFtOp_cPO8wpbBQqzDfpBWOks5uOwEkgaJpZM4Jf2WK
.
๋ฌด์จ ๋ง์ธ์ง 100% ํ์ ํ ์๋ ์์ง๋ง ์ธ๋ถ์ ์ผ๋ก๋ ํด๋ฌ์คํฐ ๋ ธ๋๋น A ๋ ์ฝ๋๊ฐ ์๋ DNS๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด๊ฒ์ ์ธ๋ถ ๊ฐ๋ ๋ถํ ์์ด ์ ๋ ดํ "๋ฐธ๋ฐ์ฑ"์ ์ ๊ณตํฉ๋๋ค. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ ์์์ A ๋ ์ฝ๋๋ฅผ ์ ํํ๊ณ ํด๋ฌ์คํฐ ๋ ธ๋ ์ค ํ๋์ 443์ ์ฐ๊ฒฐํฉ๋๋ค.
๊ฑฐ๊ธฐ์์ ํด๋น ํน์ ๋ ธ๋์์ ์คํ๋๊ณ 443์์ ์์ ๋๊ธฐํ๋ ์ญ๋ฐฉํฅ ํ๋ก์๋ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ํฌํจํ์ฌ ๊ธฐ๋ณธ ์ฐ๊ฒฐ์ ์ป์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ญ๋ฐฉํฅ ํ๋ก์ ์ปจํ ์ด๋๋ ํค๋๋ฅผ ์ถ๊ฐํ๊ณ ์ค์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ(tasks.backend)๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ด๋ถ ์ปจํ ์ด๋๋ก ์ฐ๊ฒฐ์ ์ ๋ฌํฉ๋๋ค. task.backend ๋์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ์๋น์ค์ ๋ํ ์์์ A ๋ ์ฝ๋๋ ์ป์ต๋๋ค.
๋ฐ๋ผ์ ์๊ฒฉํ ์๋ฏธ์์ ์ฐ๊ฒฐ์ ๋ฆฌ๋๋ ์ ํ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๋ง๋ฒ์ ์ฐํํฉ๋๋ค. ๋์ ์ญ๋ฐฉํฅ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋์์ ๋ณต์ ํ๊ณ ํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ต์ข ํจ๊ณผ๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๋ง๋ฒ๊ณผ ๋์ผํฉ๋๋ค(๋์จํ ์๋ฏธ์์). ๋ํ Swarm์ ์คํํ๋ ๊ฒ๊ณผ ๋ณ๋ ฌ๋ก ์ํํฉ๋๋ค. ์ฆ, ํด๋ผ์ด์ธํธ IP๊ฐ ํ์ํ์ง ์์ ๋ค๋ฅธ ๋ชจ๋ ์๋น์ค๋ฅผ ์ํด ๋ค๋ฅธ ์์ ์ ์ํํ์ง ์๊ณ ๋ ๋์ผํ ํด๋ฌ์คํฐ์์ ์คํํ ์ ์์ต๋๋ค.
์ ๋ ์๋ฒฝํ ์๋ฃจ์ ์ ์๋์ง๋ง ์์ ์ด ์ด๋ฃจ์ด์ง ๋๊น์ง๋ ์ธ๋ถ ๊ตฌ์ฑ ์์๋ ์ฃผ์ ๋์ปค ๊ตฌ์ฑ ์์ด ํด๊ฒฐํ ์ ์์ต๋๋ค.
@jamiejackson ์ฐ๋ฆฌ๊ฐ ์ฐพ์ "๊ฐ์ฅ ๋์" ํด๊ฒฐ ๋ฐฉ๋ฒ์ Traefik์ ํธ์คํธ ๋ชจ๋์์ ์ ์ญ ์๋น์ค๋ก ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ค ์ ๋ฌธ์ ์ ์ข์
https://github.com/containous/traefik/issues/1880
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋ํ ์ค์ ์์ฒญ์ IP๋ฅผ ํ์ธํ ์ ์๋ ์๋ฃจ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ๋ฌด์ธ๊ฐ๊ฐ ๋ณ๊ฒฝ๋ ๋๊น์ง ์ด kludge ์์ ์ฌํญ์ ์ ์งํด์ผ ํฉ๋๋ค. ์ต์ํ ๋ณด์์์ ์ด์ ๋ก ๋งค์ฐ ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
์ดํดํ์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋์จํ ๋ฒ์ ์ด ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค).
๊ทธ๋ฌ๋ - ์ด ํน์ ๋ฒ๊ทธ์ ์์ ๋ ๊ฐ๋ฐ์์๊ฒ ์์ฒญํ๋ ๊ฒ์ด์์ต๋๋ค.
๊ทธ๊ฒ์ ๋ง๋ฒ์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๊ตฌ์ถํ๊ธฐ ์ํด (์๋ง๋ ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ)
ํ๋กํ ์ฝ ๋๋ ๊ธฐํ ๋ฉ์ปค๋์ฆ)
2018๋
8์ 8์ผ ์์์ผ, 21:22 Maxime Lamothe-Brassard, <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋ฌด์จ ๋ง์ธ์ง 100% ํ์ ํ ์ ์์ง๋ง ์ธ๋ถ์ ์ผ๋ก๋ A๊ฐ ์๋ DNS๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํด๋ฌ์คํฐ ๋ ธ๋๋น ๋ ์ฝ๋ ์ด๊ฒ์ ๋น์ฉ์ด ๋ค์ง ์๊ณ ์ ๋ ดํ "๋ฐธ๋ฐ์ฑ"์ ์ ๊ณตํฉ๋๋ค.
์ธ๋ถ ์ด๋ ๋ถํ. ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ๋ ๋ฌด์์ A๋ฅผ ์ ํํ์ต๋๋ค.
๊ธฐ๋กํ๊ณ ํด๋ฌ์คํฐ ๋ ธ๋ ์ค ํ๋์์ 443์ ์ฐ๊ฒฐํฉ๋๋ค.๊ฑฐ๊ธฐ์์ ํด๋น ํน์ ๋ ธ๋์์ ์คํ ์ค์ธ ์ญ๋ฐฉํฅ ํ๋ก์์
443์์ ์์ ๋๊ธฐ๋ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ํฌํจํ์ฌ ๊ธฐ๋ณธ ์ฐ๊ฒฐ์ ์ป์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ญ๋ฐฉํฅ ํ๋ก์ ์ปจํ ์ด๋๋ ํค๋๋ฅผ ์ถ๊ฐํ๊ณ ์ฐ๊ฒฐ์ ์ ๋ฌํฉ๋๋ค.
Swarm ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ๋ด๋ถ ์ปจํ ์ด๋๋ก
(tasks.backend). task.backend ๋์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์
random ๋ด๋ถ ์๋น์ค์ ๋ํ A ๋ ์ฝ๋.๋ฐ๋ผ์ ์๊ฒฉํ ์๋ฏธ์์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๋ง๋ฒ์ ์ฐํํ๋ ๊ฒ์ ๋๋ค.
์ฐ๊ฒฐ์ ๋ฆฌ๋๋ ์ ํฉ๋๋ค. ๋์ ์ด ๋์์ ๋ค์๊ณผ ๊ฐ์ด ๋ณต์ ํฉ๋๋ค.
์ญ ํ๋ก์ ๋ฐ ํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์ต์ข ํจ๊ณผ๋ ๋์ผํฉ๋๋ค(
๋์จํ ์๋ฏธ) ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ๋ง์ ์ฒ๋ผ. ๊ทธ๊ฒ์ ๋ํ ๊ทธ๊ฒ์ํฉ๋๋ค
Swarm์ ์คํํ๋ ๊ฒ๊ณผ ๋ณํํ์ฌ
์๋ฌด ๊ฒ๋ ํ์ง ์๊ณ ๋์ผํ ํด๋ฌ์คํฐ์ ํด๋ผ์ด์ธํธ IP๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๊ทธ ์ธ.์ ๋ ์๋ฒฝํ ์๋ฃจ์ ์ ์๋์ง๋ง ์์ ์ด ์ด๋ฃจ์ด์ง ๋๊น์ง(๋ง์ฝ ์๋ค๋ฉด)
์ธ๋ถ ๊ตฌ์ฑ ์์๋ ์ฃผ์ ๋์ปค ๊ตฌ์ฑ ์์ด๋ ๊ฐ๋ฅํฉ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ 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, [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@jamiejackson https://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 ๊ตฌ์ฑ์ ์ง๋์น ์ ์์ต๋๊น?
Swarm ๊ตฌ์ฑ์ด ์๋ nginx_proxy?
์ด๊ฒ์ด ์๋ํ๋ฉด ๊ต์ฅํฉ๋๋ค!
2018๋ 9์ 11์ผ ํ์์ผ 17:14 rubot, [email protected]์ด(๊ฐ) ์์ฑํ์ต๋๋ค.
์ฐ๋ฆฌ๋ proxy_protocol nginx ๊ธ๋ก๋ฒ ์คํธ๋ฆผ ์ธ์คํด์ค๋ก ์ ํํ์ต๋๋ค.
๋ณต์ ๋ ์ ํ๋ฆฌ์ผ์ด์ proxy_nginx๋ก ์ ๋ฌ. ์ด๊ฒ์ ์ถฉ๋ถํ ์ ์๋ํฉ๋๋ค
์๊ฐ.์๋น์ค ๊ธ๋ก๋ฒ nginx_stream
๊ฐ์ธ {
resolver_timeout 5์ด;
# 127.0.0.11์ docker swarms dns ์๋ฒ์ ๋๋ค.
๋ฆฌ์กธ๋ฒ 127.0.0.11 ์ ํจ=30์ด;
# set์ ์คํธ๋ฆผ ๋ชจ๋์์ ์๋ํ์ง ์์ต๋๋ค. ์ฌ๊ธฐ์์ map์ ์ฌ์ฉํฉ๋๋ค.
์ง๋ '' $upstream_endpoint {
๊ธฐ๋ณธ ํ๋ก์_ nginx:443;
}server { listen 443; proxy_pass $upstream_endpoint; proxy_protocol on; }
}
์๋น์ค ๋ณต์ nginx_proxy
์๋ฒ {
์์ 443 SSL http2 proxy_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
.
@sandys ํ๊ฒฝ ๋ณ์๋ฅผ ํตํด ๊ตฌ์ฑ๋ ํ๋ก์ ํ๋กํ ์ฝ ๋ถ๋ถ์ ๋ํ haproxy ๊ธฐ๋ฐ ์๋ฃจ์ ์ด ์์ต๋๋ค.
Swarm ๊ตฌ์ฑ์ ์ฌ์ฉํ์ฌ nginx_stream ๋ฐ nginx_proxy์ ๋ํ ์ ์ฒด nginx ๊ตฌ์ฑ์ ์ง๋์น ์ ์์ต๋๊น? ์ด๊ฒ์ด ์๋ํ๋ฉด ๊ต์ฅํฉ๋๋ค!
@sandys ๋ค์ ๊ณผ ๊ฐ์ต๋๋ค.
https://gist.github.com/rubot/10c79ee0086a8a246eb43ab631f3581f
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น? ์ถ์ ์์ ์ธ ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ฒ๋ผ ๋ณด์ ๋๋ค.
๋ฐฐํฌ:
๋ชจ๋: ๊ธ๋ก๋ฒ
ํฌํธ:
- ๋์: 443 ๊ฒ์๋จ: 443 ํ๋กํ ์ฝ: tcp ๋ชจ๋: ํธ์คํธ
์ด ์กฐ์ธ์ ๋ฐ๋ฅด๋ฉด ๋์ปค ์ค์ ๋ฐธ๋ฐ์๊ฐ ์ด์ ๋ฐฉ์ ์์์ ๋ฒ์ด๋ฌ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
๋์๊ฒ๋ ์ฌ์ ํ HA์ด๊ณ ์ด๋ฏธ haproxy(๋์ปค ํ๋ฆ ํ๋ก์ ์ปจํ
์ด๋ ๋ด๋ถ)๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ ํจํ ์๋ฃจ์
์
๋๋ค.
์ ์ผํ ๋ฌธ์ ๋ haproxy ํต๊ณ๊ฐ ๋ชจ๋ ๋ณต์ ๋ณธ์ ๋ฐฐํฌ๋๋ฏ๋ก ์ ์ฒด ํด๋ฌ์คํฐ์ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํ ๋ ํด๋น ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ๋ ์ง๊ณํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ๊ณผ๊ฑฐ์๋ ๋์ปค ์ค์ ๋ฐธ๋ฐ์ ๋ค์ ์๋ ํ๋์ haproxy ์ธ์คํด์ค๋ง ์์์ต๋๋ค.
๊ฑด๋ฐฐ,
์ํฌ
OP์ ์์ฒญ( @PanJ )์ ์ฝ์ ๋ ํ์ฌ ๊ธฐ๋ฅ์ด ๋ช ๋ฌ ๋์ ์ ์๋ ๋๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. OP๋ ์์ ๋ผ์ฐํ + ํด๋ผ์ด์ธํธ IP AFAIK๋ฅผ ์์ฒญํ์ง ์์์ผ๋ฉฐ ๋ณต์ ๋ณธ/์ ์ญ์์ ์ค์ ์๋น์ค๊ฐ ํด๋ผ์ด์ธํธ IP๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์์ฒญํ์ผ๋ฉฐ ์ด์ ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์์ญ:
18.09 ์์ง์ ์ฌ์ฉํ๋ ์ ์๊ฒ๋ ํ ์คํธ์์ ๋ ๊ฐ์ง ์ฅ์ ์ ๋ชจ๋ ์ป์์ต๋๋ค. ๋จ์ผ ์๋น์ค๋ ๋ฐฑ์๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ๊ณ ํธ์คํธ NIC์ ํฌํธ๋ฅผ ๊ฒ์ํ๊ณ ํธ์คํธ IP์์ ๋ค์ด์ค๋ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ๋ณผ ์๋ ์์ต๋๋ค. ๋ฐฑ์๋ ์๋น์ค๋ก ํฅํ๋ ํด๋ผ์ด์ธํธ IP ํธ๋ํฝ์ traefik์ ๊ธฐ๋กํ๊ธฐ ์ํด 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๋ ์์ ๋ผ์ฐํ + ํด๋ผ์ด์ธํธ IP AFAIK๋ฅผ ์์ฒญํ์ง ์์์ต๋๋ค.
๋ ํ๋ฆฌ์นด/๊ธ๋ก๋ฒ์์ ์ค์ ์๋น์ค๊ฐ ํด๋ผ์ด์ธํธ IP๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์ํด,
์ด์ ํ ์ ์์ต๋๋ค. ์ด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ ๋ ๊ฐ์ง ์ฃผ์ ๊ฐ์ ์์ญ:
- ์ด์ ํฌํธ๋ฅผ "๊ฒ์"ํ๋ Swarm ์๋น์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํธ์คํธ IP, ์์ ๋ผ์ฐํ ๋ ์ด์ด ๊ฑด๋๋ฐ๊ธฐ- ๋์ผํ ์๋น์ค๋ ์ค๋ฒ๋ ์ด์ ๊ฐ์ ๋ค๋ฅธ ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
๋์์ ์ค๋ฒ๋ ์ด ์ด์ ์ผ๋ก ๋ค๋ฅธ ์๋น์ค์ ์ก์ธ์คํ ์ ์์ต๋๋ค.18.09 ์์ง์ ์ฌ์ฉํ๋ ์ ์๊ฒ๋ ํ ์คํธ์์ ๋ ๊ฐ์ง ์ฅ์ ์ ๋ชจ๋ ์ป์์ต๋๋ค. NS
๋จ์ผ ์๋น์ค๋ ๋ฐฑ์๋ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ์ฐ๊ฒฐํ๊ณ ๊ฒ์ํ ์๋ ์์ต๋๋ค.
ํธ์คํธ NIC์ ํฌํธ๋ฅผ ํ์ธํ๊ณ ํธ์คํธ IP์์ ๋ค์ด์ค๋ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ํ์ธํฉ๋๋ค. ๋๋
traefik ์ญ ํ๋ก์์ ํจ๊ป ์ด๋ฅผ ์ฌ์ฉํ์ฌ traefik์์ ํด๋ผ์ด์ธํธ IP ํธ๋ํฝ์ ๊ธฐ๋กํฉ๋๋ค.
๋ฐฑ์๋ ์๋น์ค๋ก ํฅํ๋
https://github.com/BretFisher/dogvscat/blob/7e9fe5b998f2cf86951df3f443714beb413d63fb/stack-proxy-global.yml#L75-L83 .
๋๋ ์ด๊ฒ์ด ๋ด๊ฐ ๋ณธ "์ค์ ๋ก๊น "์ ๋ํ ๋๋ถ๋ถ์ ์์ฒญ์ ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ดํผ".@PanJ https://github.com/PanJ ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๊น?
ํต์ฌ์ mode: ingress๊ฐ ์๋ mode: host์์ ํฌํธ๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ ๋๋ค.
๊ธฐ๋ณธ).์ด ๋ชจ๋์ ์ฅ์ ์ ์ค์ ํด๋ผ์ด์ธํธ 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 ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ช ๊ฐ์ง ์ฃผ์ ์ฌํญ์ด ์๋ค๊ณ ๋ง
ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋ฐ๊ฒฌ๋ ์ดํ๋ก ๊ฐ์ ์ฌํญ์ด ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋๋ ๊ฝค ์ค๋ซ๋์ ์ฟ ๋ฒ๋คํฐ์ค๋ก ์ฎ๊ฒจ์์ง๋ง ์ฌ์ ํ ์ด ๋ฌธ์ ๊ฐ 2๋ ๋๊ฒ ์ด๋ ค ์๋ค๋ ์ฌ์ค์ ๋๋๋ค.
์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ๋ด
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ ์ ์ ํ์ง ์์ ๊ด์
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋น์ ์
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ ๋ฐ๋์ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
๋ฐ๋ชฌ์
์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ฐ์ ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์
์ด ์์ต๋๋ค. ๋๊ตฐ๊ฐ ํ ์ ์์๋ค
์์์ ์ค๋ช
ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์
์ ํ์ธํ๊ณ ํฌ์ฅํ์ฌ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์
๋๋ค. ๊ทธ๋ฅ ๋ฐ์๋ค์ฌ, ๊ทธ ๋ฌด๋ฆฌ๋
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์
PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09: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 ๋ณํ์ ์ถ๊ฐํ์ฌ ์์ํ ์๋ ์์ต๋๋ค.
swarn์ฉ kubernetes-ingressproxy. ํ์คํ ์ด๊ฒ์ ๋ชจ๋ ๋ผ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค.
๋น์ ์ด ์๊ณ ์๋ฏ์ด ์ถ๊ฐ ์์คํ
์ปจํ
์ด๋๋ฅผ ์ฌ๋ฆด ๊ฒ์
๋๋ค
๊ทธ๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ก. ๋ ์ฌํ ์์์ ์ํ ๊ตฐ๋จ์ ํ์ด ์๋๊น์?
๋ฆฐ ํ๋ก์ ํธ?
Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09:48:
์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ๋ด
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ ์ ์ ํ์ง ์์ ๊ด์
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋น์ ์
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ ๋ฐ๋์ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
๋ฐ๋ชฌ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ฐ์ ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ๋๊ตฐ๊ฐ ํ ์ ์์๋ค
์์์ ์ค๋ช ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ๊ณ ํฌ์ฅํ์ฌ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฅ ๋ฐ์๋ค์ฌ, ๊ทธ ๋ฌด๋ฆฌ๋
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09: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์ผ๋ก ์ ํ๋ฉ๋๋ค.
ingress(์ด ์ง์์ด ์ถ๊ฐ๋ ์์น). ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์๋น์ค๋ ๊ทธ๊ฒ์ ๊ฐ์ง ๊ฒ์
๋๋ค
์ฌ์ฉ ๊ฐ๋ฅ.
2019๋ 1์ 4์ผ ๊ธ์์ผ 14:36 โโrubot < ์๋ฆผ @github.com ์์ฑ:
dockerflow ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ nginx ๋ณํ์ ์ถ๊ฐํ์ฌ ์์ํ ์๋ ์์ต๋๋ค.
swarn์ฉ kubernetes-ingressproxy. ํ์คํ ์ด๊ฒ์ ๋ชจ๋ ๋ผ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค.
๋น์ ์ด ์๊ณ ์๋ฏ์ด ์ถ๊ฐ ์์คํ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฆด ๊ฒ์ ๋๋ค
๊ทธ๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ก. ๋ ์ฌํ ์์์ ์ํ ๊ตฐ๋จ์ ํ์ด ์๋๊น์?
๋ฆฐ ํ๋ก์ ํธ?Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09:48:
์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ๋ด
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ ์ ์ ํ์ง ์์ ๊ด์
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋
์ด๋ ํ๋
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ ๋ฐ๋์ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
๋ฐ๋ชฌ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ฐ์ ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ๋๊ตฐ๊ฐ ํ ์ ์์๋ค
์์์ ์ค๋ช ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ๊ณ ํฌ์ฅํ์ฌ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฅ ๋ฐ์๋ค์ฌ, ๊ทธ ๋ฌด๋ฆฌ๋
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09: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 ์คํธ๋ฆผ ์๋ฃจ์
์ ํ์ธํ์ญ์์ค.
๊ท์ฝ.
ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ ค๋ฉด ์ปจํ
์ด๋ ๋ด๋ถ์ ๊ตฌ์ฑ๋ ํ์ํฉ๋๋ค.
์๋ฅ ๋ผ์ ์ถ๊ฐ๋์์ต๋๋ค. ๋๋ ๋ ๊นจ๋ํ๊ณ ์๋ง๋ ๋ ๋์ ๊ฒ ์ธ์๋ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทํ์ ์์ฒญ์ ๋ฌธ์ํ๋ ๋ชฉํ
Sandeep Srinivasa [email protected] schrieb am Fr., 2019๋
1์ 4์ผ,
11:37:
๊ทธ๊ฒ๋ค์ ๋ณต์กํ ์๋ฃจ์ ์ ๋๋ค. ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐ ํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ ๋ณด์ด๋ฉฐ haproxy, nginx, AWS elb,
๋ฑ์ด ๋ชจ๋ ๋ฐ๋ฆ ๋๋ค. https://www.haproxy.com/blog/haproxy/proxy-protocol/๋ณ๊ฒฝ์ ํ๋ฉด์ ์ ๋ด์ฅ๋ Swarm์ผ๋ก ์ ํ๋ฉ๋๋ค.
ingress(์ด ์ง์์ด ์ถ๊ฐ๋ ์์น). ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์๋น์ค๋ ๊ทธ๊ฒ์ ๊ฐ์ง ๊ฒ์ ๋๋ค
์ฌ์ฉ ๊ฐ๋ฅ.2019๋ 1์ 4์ผ ๊ธ์์ผ 14:36 โโrubot < ์๋ฆผ @github.com ์์ฑ:
dockerflow ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ nginx ๋ณํ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์์
swarn์ฉ kubernetes-ingressproxy. ํ์คํ ์ด๊ฒ์ ๋ชจ๋ ๋ผ๋ก ๊ฐ๋ ์ฐจ ์์ต๋๋ค.
๋น์ ์ด ์๊ณ ์๋ฏ์ด ์ถ๊ฐ ์์คํ ์ปจํ ์ด๋๋ฅผ ์ฌ๋ฆด ๊ฒ์ ๋๋ค
๊ทธ๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ก. ๋ ์ฌํ ์์์ ์ํ ๊ตฐ๋จ์ ํ์ด ์๋๊น์?
๋ฆฐ ํ๋ก์ ํธ?Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09:48:
์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ๋ด
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ ์ ์ ํ์ง ์์ ๊ด์
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋
์ด๋ ํ๋
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
~ํด์ผํ๋ค
๋ฐ๋ชฌ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๊ฐ์ ๊ฒ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ๋๊ตฐ๊ฐ ํ ์ ์์๋ค
์์์ ์ค๋ช ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ๊ณ ํฌ์ฅํ์ฌ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฅ ๋ฐ์๋ค์ด์ธ์. ๊ทธ ๋ฌด๋ฆฌ๋
~์ด๋ค
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09: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
.
์์ ์๋ฃจ์
์๋ ํธ์คํธ ๋ชจ๋ ๋ฐ์ธ๋ฉ์ด ํ์ํฉ๋๋ค. ๊ทธ๊ฒ์ด ํฐ ๋ฌธ์ ์
๋๋ค. ๊ทธ๊ฒ
์ปจํ
์ด๋๋ฅผ ํ ๋นํ๊ธฐ ์ํด ๋์ปค ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
๋ค๋ฅธ ํธ์คํธ๋ก - ๋ ์ด์ ๋ฉ์ ๋คํธ์ํฌ์ ์ผ๋ถ๊ฐ ์๋๋๋ค.
2019๋ 1์ 4์ผ ๊ธ์์ผ 17:28 rubot < ์๋ฆผ @github.com ์์ฑ:
๋ด๊ฐ ๋งํ๋ฏ์ด ์ด๋ฏธ ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์์ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ์ญ์์ค.
๊ท์ฝ.
ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ ค๋ฉด ์ปจํ ์ด๋ ๋ด๋ถ์ ๊ตฌ์ฑ๋ ํ์ํฉ๋๋ค.
์๋ฅ ๋ผ์ ์ถ๊ฐ๋์์ต๋๋ค. ๋๋ ๋ ๊นจ๋ํ๊ณ ์๋ง๋ ๋ ๋์ ๊ฒ ์ธ์๋ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ทํ์ ์์ฒญ์ ๋ฌธ์ํ๋ ๋ชฉํSandeep Srinivasa [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ,
11:37:๊ทธ๊ฒ๋ค์ ๋ณต์กํ ์๋ฃจ์ ์ ๋๋ค. ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐ ํค๋๋ฅผ ์ถ๊ฐํฉ๋๋ค.
์ ๋ณด์ด๋ฉฐ haproxy, nginx, AWS elb,
๋ฑ์ด ๋ชจ๋ ๋ฐ๋ฆ ๋๋ค. https://www.haproxy.com/blog/haproxy/proxy-protocol/๋ณ๊ฒฝ์ ํ๋ฉด์ ์ ๋ด์ฅ๋ Swarm์ผ๋ก ์ ํ๋ฉ๋๋ค.
ingress(์ด ์ง์์ด ์ถ๊ฐ๋ ์์น). ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์๋น์ค๋
๊ทธ๊ฒ
์ฌ์ฉ ๊ฐ๋ฅ.2019๋ 1์ 4์ผ ๊ธ์์ผ 14:36 โโrubot < ์๋ฆผ @github.com ์์ฑ:
dockerflow ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ nginx ๋ณํ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์์
swarn์ฉ kubernetes-ingressproxy. ํ์คํ ์ด ๋ชจ๋ ๊ฒ์ด ๋ด๊ฒจ์๋ค.
๊ตฐ๋จ
๋ฌด๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก ์ถ๊ฐ ์์คํ ์ปจํ ์ด๋๋ฅผ ๋ฐ์์ํต๋๋ค.
NS
๊ทธ๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ก. ๋ ์ฌํ ์์์ ์ํ ๊ตฐ๋จ์ ํ์ด ์๋๊น์?
๋ฆฐ ํ๋ก์ ํธ?Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 09:48:
์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ๋ด
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ๋ ๊ด์ ์ด ์๋๋๋ค.
์ ๋นํ
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋
์ด๋ ํ๋
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
~ํด์ผํ๋ค
๋ฐ๋ชฌ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋
๊ฐ์
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ์ด๋ค ์ฌ๋
~ ํ ์ ์์๋ค
์์์ ์ค๋ช ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ๊ณ ํฌ์ฅํ์ฌ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฅ ๋ฐ์๋ค์ด์ธ์. ๊ทธ ๋ฌด๋ฆฌ๋
~์ด๋ค
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 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 ,
๋๋
์์๊ฑฐ
์ค๋ ๋
<>
.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ 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 nginx ingress๋ ํธ์คํธ ๋ชจ๋ ๋ฐ์ธ๋ฉ๋ ํ์ํฉ๋๋ค.
๋ฐ๋ชฌ์
. ์ธ๋ถ LB๋ ํธ์คํธ ๋ชจ๋๋ ํ์๋ก ํ๋ ๋
ธ๋ ํฌํธ์ ์ฐ๊ฒฐํฉ๋๋ค.
์๋น์ค ์ค์ด๊ฑฐ๋ ์๋น์ค ์ค์ธ ํ๋ก์ ํ๋กํ ์ฝ์ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค
์ฌ์ ํ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
Swarm์ ๋ํ ๋ด ๊ด์ ์์ ๊ฐ๋ฅํ ํ ๊ฐ์ง ๊ธฐ๋ฅ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋คํธ์ํน ๊ณต๊ธ์๋ฅผ ํ๋ฌ๊ทธํ์ผ๋ก ๋ง๋ญ๋๋ค. ์ด๊ฒ์ ์ฌ์ฉ์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์
๋๋ค
lvs/iptables ์ด์ธ์ ๋ค๋ฅธ ๊ธฐ์
Sandeep Srinivasa [email protected] schrieb am Fr., 2019๋
1์ 4์ผ,
13:05:
์์ ์๋ฃจ์ ์๋ ํธ์คํธ ๋ชจ๋ ๋ฐ์ธ๋ฉ์ด ํ์ํฉ๋๋ค. ๊ทธ๊ฒ์ด ํฐ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๊ฒ
์ปจํ ์ด๋๋ฅผ ํ ๋นํ๊ธฐ ์ํด ๋์ปค ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ ๊ฐ๋ฅ์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
๋ค๋ฅธ ํธ์คํธ๋ก - ๋ ์ด์ ๋ฉ์ ๋คํธ์ํฌ์ ์ผ๋ถ๊ฐ ์๋๋๋ค.2019๋ 1์ 4์ผ ๊ธ์์ผ 17:28 rubot < ์๋ฆผ @github.com ์์ฑ:
๋ด๊ฐ ๋งํ๋ฏ์ด ์ด๋ฏธ ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์์ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ์ญ์์ค.
๊ท์ฝ.
ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ ค๋ฉด ์ปจํ ์ด๋ ๋ด๋ถ ๊ตฌ์ฑ๋ ํ์ํฉ๋๋ค.
๋ง์ฝ
์๋ฅ ๋ผ์ ์ถ๊ฐ๋์์ต๋๋ค. ๋๋ ์ฒญ์๋ถ์ ์๋ง๋
๋ ๋์
๊ทํ์ ์์ฒญ์ ๋ฌธ์ํ๋ ๋ชฉํSandeep Srinivasa [email protected] schrieb am Fr., 4. Jan.
2019๋ ,
11:37:๊ทธ๊ฒ๋ค์ ๋ณต์กํ ์๋ฃจ์ ์ ๋๋ค. ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
ํค๋
์ ๋ณด์ด๋ฉฐ ๋งค์ฐ ์ ์๋ ค์ง ํ์ค์ ๋๋ค - haproxy, nginx, AWS
์ํ,
๋ฑ์ด ๋ชจ๋ ๋ฐ๋ฆ ๋๋ค.
https://www.haproxy.com/blog/haproxy/proxy-protocol/๋ณ๊ฒฝ์ ํ๋ฉด์ ์ ๋ด์ฅ๋ Swarm์ผ๋ก ์ ํ๋ฉ๋๋ค.
ingress(์ด ์ง์์ด ์ถ๊ฐ๋ ์์น). ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์๋น์ค๋
๊ทธ๊ฒ
์ฌ์ฉ ๊ฐ๋ฅ.2019๋ 1์ 4์ผ ๊ธ์์ผ 14:36 โโrubot < ์๋ฆผ @github.com ์์ฑ:
dockerflow ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ nginx ๋ณํ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์์
swarn์ฉ kubernetes-ingressproxy. ํ์คํ ์ด ๋ชจ๋ ๊ฒ์ด ๋ด๊ฒจ์๋ค.
๊ตฐ๋จ
๋ฌด๋ฆฌ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ผ๋ฏ๋ก ์ถ๊ฐ ์์คํ ์ปจํ ์ด๋๋ฅผ ๋ฐ์์ํต๋๋ค.
NS
๊ทธ๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ก. ์ฌ๋ฆผ์ ์ํ ๊ตฐ๋จ์ ํ์ด ์๋๊น์?
์์
๋ฆฐ ํ๋ก์ ํธ?Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ,
09:48:์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ์์
๋์
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ๋ ๊ด์ ์ด ์๋๋๋ค.
์ ๋นํ
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋
์ด๋ ํ๋
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
์ด๋
~ํด์ผํ๋ค
๋ฐ๋ชฌ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋
๊ฐ์
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ์ด๋ค ์ฌ๋
~ ํ ์ ์์๋ค
์์์ ์ค๋ช ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ๊ณ ํฌ์ฅํ์ญ์์ค.
๊ฐ์ ธ ์ค๊ธฐ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ๋ฐ์๋ค์ฌ๋ผ, ๊ทธ ๋ฌด๋ฆฌ๊ฐ ํ์๋ก ํ๋
์๊ฒ
~์ด๋ค
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ,
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
,
๋๋
์์๊ฑฐ
์ค๋ ๋
<>
.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-451389574 ,
๋๋
์์๊ฑฐ
์ค๋ ๋
<>
.
โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ 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/host ์์ค์์ ip ์์ค์ด ์ฃผ์ ๋ฌธ์ ๋ก ๋จ์ ์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ
Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ, 13:11:
๋ด๊ฐ ๋งํ๋ฏ์ด kubernetes nginx ingress๋ ํธ์คํธ ๋ชจ๋ ๋ฐ์ธ๋ฉ๋ ํ์ํฉ๋๋ค.
๋ฐ๋ชฌ์ . ์ธ๋ถ LB๋ ํธ์คํธ ๋ชจ๋๋ ํ์๋ก ํ๋ ๋ ธ๋ ํฌํธ์ ์ฐ๊ฒฐํฉ๋๋ค.
์๋น์ค ์ค์ด๊ฑฐ๋ ์๋น์ค ์ค์ธ ํ๋ก์ ํ๋กํ ์ฝ์ ์๋์ผ๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค
์ฌ์ ํ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ณ ์์ต๋๋ค.
Swarm์ ๋ํ ๋ด ๊ด์ ์์ ๊ฐ๋ฅํ ํ ๊ฐ์ง ๊ธฐ๋ฅ ์์ฒญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋คํธ์ํน ๊ณต๊ธ์๋ฅผ ํ๋ฌ๊ทธํ์ผ๋ก ๋ง๋ญ๋๋ค. ์ด๊ฒ์ ์ฌ์ฉ์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ ๋๋ค
lvs/iptables ์ด์ธ์ ๋ค๋ฅธ ๊ธฐ์Sandeep Srinivasa [email protected] schrieb am Fr., 4. Jan.
2019, 13:05:์์ ์๋ฃจ์ ์๋ ํธ์คํธ ๋ชจ๋ ๋ฐ์ธ๋ฉ์ด ํ์ํฉ๋๋ค. ๊ทธ๊ฒ์ด ํฐ ๋ฌธ์ ์ ๋๋ค. ๊ทธ๊ฒ
๋์ปค ์ค์ผ์ค๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ ๋นํ ๊ฐ๋ฅ์ฑ ์ ๊ฑฐ
์ปจํ ์ด๋
๋ค๋ฅธ ํธ์คํธ๋ก - ๋ ์ด์ ๋ฉ์ ๋คํธ์ํฌ์ ์ผ๋ถ๊ฐ ์๋๋๋ค.2019๋ 1์ 4์ผ ๊ธ์์ผ 17:28 rubot < ์๋ฆผ @github.com ์์ฑ:
๋ด๊ฐ ๋งํ๋ฏ์ด ์ด๋ฏธ ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ์์ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ์ญ์์ค.
๊ท์ฝ.
ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ ค๋ฉด ์ปจํ ์ด๋ ๋ด๋ถ ๊ตฌ์ฑ๋ ํ์ํฉ๋๋ค.
๋ง์ฝ
์๋ฅ ๋ผ์ ์ถ๊ฐ๋์์ต๋๋ค. ๋๋ ์ฒญ์๋ถ์ ์๋ง๋
๋ ๋์
๊ทํ์ ์์ฒญ์ ๋ฌธ์ํ๋ ๋ชฉํSandeep Srinivasa [email protected] schrieb am Fr., 4. Jan.
2019๋ ,
11:37:๊ทธ๊ฒ๋ค์ ๋ณต์กํ ์๋ฃจ์ ์ ๋๋ค. ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
ํค๋
์ ๋ณด์ด๋ฉฐ ๋งค์ฐ ์ ์๋ ค์ง ํ์ค์ ๋๋ค - haproxy, nginx, AWS
์ํ,
๋ฑ์ด ๋ชจ๋ ๋ฐ๋ฆ ๋๋ค.
https://www.haproxy.com/blog/haproxy/proxy-protocol/๋ณ๊ฒฝ์ ํ๋ฉด์ ์ ๋ด์ฅ๋ Swarm์ผ๋ก ์ ํ๋ฉ๋๋ค.
ingress(์ด ์ง์์ด ์ถ๊ฐ๋ ์์น). ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์๋น์ค๋
๊ฐ์ง๋ค
๊ทธ๊ฒ
์ฌ์ฉ ๊ฐ๋ฅ.2019๋ 1์ 4์ผ ๊ธ์์ผ 14:36 โโrubot < ์๋ฆผ @github.com ์์ฑ:
dockerflow ํ๋ก์ ํธ๋ฅผ ํ์ฅํ๊ณ nginx ๋ณํ์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค.
์์
swarn์ฉ kubernetes-ingressproxy. ํ์คํ ์ด ๋ชจ๋ ๊ฒ์ด ๋ด๊ฒจ์๋ค.
๊ตฐ๋จ
๋น์ ์ด ์๊ณ ์๋ฏ์ด ์ถ๊ฐ ์์คํ ์ปจํ ์ด๋๋ฅผ ๋ฐ์์ํฌ ๊ฒ์ ๋๋ค
๋ค๋ฐ
NS
๊ทธ๊ฒ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค๋ก. ์ฌ๋ฆผ์ ์ํ ๊ตฐ๋จ์ ํ์ด ์๋๊น์?
์์
๋ฆฐ ํ๋ก์ ํธ?Ruben Nicolaides [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ,
09:48:์ฌ๋๋ค์ด ์ด๊ฒ์ด ๋ฒ๊ทธ๋ผ๊ณ ์๊ฐํ๋ ์ด์ ์ ๋ํด ๋๋ ์ฌ์ ํ ์ฝ๊ฐ ๋๋์ต๋๋ค. ์์
๋์
kubernetes๋ก ์ด๋ํ๋ ์ง์ ์กฐ์ฐจ๋ ๊ด์ ์ด ์๋๋๋ค.
์ ๋นํ
๋ต๋ณ. ๋ด๊ฐ ๋ณผ ๋ kubernetes๋ ์ ํํ ๋์ผํ ๋ฌธ์ /๋์์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋
์ด๋ ํ๋
์ธ๋ถ LB๊ฐ ์๊ฑฐ๋ nginx ์์ ํ๋ก์์ ๊ฐ์ ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
์ด๋
~ํด์ผํ๋ค
๋ฐ๋ชฌ์ ์ผ๋ก ์คํํฉ๋๋ค. ๋ด๊ฐ ํ๋ ธ๋ค๋ฉด ์ ๋ฅผ ์์ ํ์ญ์์ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋
๊ฐ์
์ฌ๊ธฐ์ ์ ํํ ์ํฉ์ด ์์ง๋ง ์ฌ๊ธฐ์๋ ์ค๋น๋ ์๋ ์๋ฃจ์ ์ด ์์ต๋๋ค. ์ด๋ค ์ฌ๋
~ ํ ์ ์์๋ค
์์์ ์ค๋ช ํ ์ ์๋ tcp ์คํธ๋ฆผ ์๋ฃจ์ ์ ํ์ธํ๊ณ ํฌ์ฅํ์ญ์์ค.
๊ฐ์ ธ ์ค๊ธฐ
nginx ํ๋ก์ ๋์๊ณผ ๊ฐ์ ๊ฒ์ ๋๋ค. ๋ฐ์์ค ๊ทธ ๋ฌด๋ฆฌ
ํ ํ์๊ฐ์๋ค
~์ด๋ค
์์ ์ ์ํด ์ฌ์ฉ์ ์ ์PanJ [email protected] schrieb am Fr., 2019๋ 1์ 4์ผ,
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>,
๋๋
์์๊ฑฐ
์ค๋ ๋
<>
.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-451389574 ,
๋๋
์์๊ฑฐ
์ค๋ ๋
<>
.
โ
์ด ์ค๋ ๋์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฉ์์ง๋ฅผ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ 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
.
๋ฒ๊ทธ๋ผ๊ณ ๋ถ๋ฅด๋ ๊ธฐ๋ฅ ์์ฒญ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฐ์ ์์ค nat๊ฐ ์๋ ์ธ๊ทธ๋ ์ค ๋ฉ์๋ (์ ์๊ฐ์๋) ํ์์ ๋๋ค. ์ค์ ์์ค IP๋ฅผ ๋ณผ ์ ์์ ๋ ์ค๋จ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ง์ด ์์ต๋๋ค. ๋ฌผ๋ก ์น ์๋ฒ์ ๊ฒฝ์ฐ ํธ์คํธ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์๋ฅผ ๋ฆฌ๋ฒ์คํ๊ณ ํด๋ผ์ด์ธํธ IP ํค๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ค๋ฒํค๋๋ฅผ ์ถ๊ฐํ๊ณ ์น ๊ธฐ๋ฐ์ด ์๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ํ ์ต์ ์ด ์๋ ์ ์์ต๋๋ค. ์ค์ ๋ก ํจํท์ ์ค์ ์์ค IP๊ฐ ์ ํํด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ ์ ์ผํ ์ต์ ์ ์ธ๊ทธ๋ ์ค ๋ฉ์๋ฅผ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ฒ์์ swarm์ ์ฌ์ฉํ๋ ์ด์ ์ ์๋น ๋ถ๋ถ์ ์์๊ฐ๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์์ ๋์๋์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ฃผ์ญ์์ค!
๋์ kuberneties๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๊น?
๋๋ ๊ฐ์ ๋ฌธ์ ์์ ๋ฌ๋ ธ๋ค ... ๋๋ ํ์ฌ ์์ ์ฌํญ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค.
๋๊ตฐ๊ฐ ์ด ํ๋์ ๋ํ ํด๊ฒฐ์ฑ ์ ์ฐพ์ผ๋ฉด ์ฌ๊ธฐ์ ๋ณด๊ณ ํ์ญ์์ค.
๊ฐ์ฌ ํด์!
๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ํ์น httpd ์๋ฒ๊ฐ ์๊ณ ๋์ค์ ์์ฒญ์ ๋ฐ๋ ๊ตญ๊ฐ์ ๋ํ ํต๊ณ๋ฅผ ์ถ์ถํ๊ธฐ ์ํด ๋ชจ๋ ์ก์ธ์ค๋ฅผ ๊ธฐ๋กํ๊ณ ์ถ์ต๋๋ค.
php:apache ๊ฐ ํธ์คํธ ํค๋ ํ๋๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ธฐ๋กํ์ง ์๋ ์ด์ ๋ฅผ ์์๋ด๋ ค๊ณ ์๋ํ๋ ๋์ ์ด ๋ฌธ์ ๋ฅผ ์ง์ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ช ๋ ์ด ์ง๋ ํ์๋ ์์ง ์๋ํ์ง ์๋๋ค๋ ๊ฒ์ ์ถฉ๊ฒฉ์ ๋ฐ๊ณ ์ค๋งํ์ต๋๋ค. ํธ์คํธ ํ๋๊ฐ ์ฌ์ฉ์ ์์ญ ํ๋ก์ IP๋ฅผ ๊ณ์ ๊ธฐ๋กํ ๋ ์น ํธ์คํ ์ ์ํด Swarm ๋ชจ๋๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํฉ๋๊น? Swarm Mode์์๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ์ต๋๋ค. 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
์ด๊ฒ์ ์ํ์น๊ฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๋ค ๋์ ํธ์คํธ ์ปดํจํฐ์์ ์์ ํ๋๋ก ํ๋ฉฐ(์ ์ ํ ์๊ฒฉ IP ์ฃผ์ ์ฝ๊ธฐ), ์ฌ์ ํ networks
์ต์
์ ํตํด ๋ค๋ฅธ ์๋น์ค์ ์์ฒญ์ ํ๋ก์ํ๊ณ ์ด๋ฅผ ํตํด "๊ณ ๊ฐ์ฉ์ฑ"์ ๋ฌ์ฑํฉ๋๋ค. ๋์ฒ์ ๋ฌ๋ฆฌ๋ค
@rafaelsierra - ์ฌ๊ธฐ์ ๋ด๊ฐ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. (์๋ชป๋ ๊ฒฝ์ฐ ์์ ), ์ด ๊ตฌ์ฑ์ ํ๋์ Apache/PHP ์ปจํ ์ด๋๊ฐ ์คํ๋๊ณ ํธ์คํธ ๋ ธ๋์ ํฌํธ 80์ ๋ฐ์ธ๋ฉ๋๋๋ก ํ์ฉํฉ๋๋ค. ํฌํธ 80/443์ ๋ฐ์ธ๋ฉ๋ Nginx ์ปจํ ์ด๋๋ก ์๋ง์ Apache ์ปจํ ์ด๋๋ฅผ ์คํํ ๋ค์ ๊ฐ์ ํธ์คํธํด์ผ ํฉ๋๋ค.
@SysEngDan ๋ค, 80/443 ํฌํธ์ ํ๋์ ์ปจํ ์ด๋๋ง ๋ฐ์ธ๋ฉํ ์ ์๋ ๊ฒ์ด ์ฌ์ค์ด์ง๋ง ์ ๊ฒฝ์ฐ์๋ ์ด ํฌํธ์ ๋ฐ์ธ๋ฉํ๋ ์ปจํ ์ด๋๊ฐ ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋ํ ๋ชจ๋ ์์ฒญ์ ํ๋ก์ํ๋ ์ญํ ๋ง ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๋ค์์ ์คํ๋๋
๋จ์ผ nginx/apache ์ปจํ ์ด๋๊ฐ ๋ชจ๋ ์์ฒญ์ ์์ ํ๊ณ ๊ฐ์ ํธ์คํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ์ ํ ์ปจํ ์ด๋๋ก ํ๋ก์ํ๋๋ก ํ์ฌ ๋์ผํ ์๋ฃจ์ ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ํด๋น ์ปจํ ์ด๋๋ ํธ์คํธ์ ๋ฐ์ธ๋ฉํ ํ์๊ฐ ์์ต๋๋ค.
@rafaelsierra - ๊ฐ์ฌํฉ๋๋ค. ์ด ํฐ์ผ์ ์ค๋ช ๋ ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ง์ง๋ง ๋จ๋ฝ์์ ์ธ๊ธํ ๋๋ก ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ ๊ฒฝ์ฐ ๋ฌธ์ ๋ ํด๋ผ์ด์ธํธ IP๊ฐ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์์๋ง ์์ ๋๊ธฐํ๋ ์ปจํ ์ด๋๋ก ์ ๋ฌ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ํธ์คํธ์ ์ง์ ๋ฐ์ธ๋ฉํ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ธ๋ถ(ํธ์คํธ)์์ ๋ด๋ถ(์ค๋ฒ๋ ์ด)๋ก ํ๋ก์ํ๋ ๋์ปค ๋คํธ์ํฌ์ ์์กดํ๋ ๊ฒฝ์ฐ ๋์ Apache ์ปจํ ์ด๋๋ ์๋ ํด๋ผ์ด์ธํธ IP ์ฃผ์๋ฅผ ์์ ํ์ง ์๊ณ ๋์ ํ๋ก์์ IP(๋์ปค ๋คํธ์ํน์์)๋ฅผ ์์ ํฉ๋๋ค.
@SysEngDan ๋๋ ์ด ๋ฌธ์ ๋ฅผ ์ดํดํ๊ณ ์์ผ๋ฉฐ ์ง๋ 2๋ ๋์ ํด๊ฒฐ์ฑ ์ด ์์๊ธฐ ๋๋ฌธ์(์์งํ ์ด๊ฒ์ด "๊ณ ์น ์ ์๋์ง" ํ์คํ์ง ์์) ๋ด ํ์์ ๋ง๋ ๋์ฒด ์๋ฃจ์ ์ ์ฐพ์์ผ ํ์ต๋๋ค(์ก์ธ์ค ์ ํ ์๊ฒฉ IP ์ฃผ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํจ).
๋จ์ผ ์ปจํ ์ด๋๊ฐ ํธ์คํธ์ ํฌํธ 80/443์์ ์์ ๋๊ธฐํ ๋ค์ ๋ค๋ฅธ ์ปจํ ์ด๋(์ด ๋ฌธ์ ์ ๋ฒ์๋ฅผ ๋ฒ์ด๋๋ฏ๋ก ์ธ๊ธํ์ง ์์ ์ ์ ํ HTTP ํค๋ ์ฌ์ฉ)๋ก ํ๋ก์ ์ฒ๋ฆฌํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์์ผ๋ฉฐ ์ด ์๋ฃจ์ ์ ๊ณต์ ํ๊ณ ์ถ์์ต๋๋ค. ์๊ฒฉ IP ์ฃผ์๋ฅผ ์ ๋ฌํ ์ ์๋ ์ค๋ฒ๋ ์ด๋ ๋คํธ์ํฌ๋ก ์ธํด ์ ์ฌํ ๋ฌธ์ ์ ์ง๋ฉดํ๋ ์ฌ๋๋ค์ ์ํด
์ค, ๋น์ ์ด ๊ฑฐ๊ธฐ์์ ๋ฌด์์ํ๋์ง ๋ดค์ด ..... ์ฃ์กํฉ๋๋ค. ๋์ณค์ต๋๋ค. ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ์๋ผ๋ด๋ ๋์ ์ธ๋ถ ์ปจํ ์ด๋๋ฅผ ์๋น์ค ๋คํธ์ํฌ์ ์ง์ ์ฐ๊ฒฐํ์ต๋๋ค(๋คํธ์ํฌ๋ฅผ ์ง์ ํ์ง ์๊ณ ์ ์๋น์ค๋ฅผ ์์ํ ๋ ์๋์ผ๋ก ์์ฑ๋จ). ์๊ฒ ์ต๋๋ค. ํจ๊ณผ๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ถ๊ฐ๋ ์ค๋ฒํค๋๋ ์๋น์ค ๋คํธ์ํฌ๋ฅผ docker-compose ํ์ผ์ ์ถ๊ฐํ๋ ์์ ์ ๋๋ค. ํธ์คํธ ์ปจํ ์ด๋๊ฐ ์์๋๊ณ ํด๋น ์๋น์ค ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋๋์ง ๊ถ๊ธํฉ๋๋ค.
์ด ๊ฒฝ์ฐ 502๋ฅผ ์ป์ต๋๋ค.
๋จ์ผ docker-compose.yml์ด ์๊ณ ์ค๋ฒ๋ ์ด๋ ๋คํธ์ํฌ๋ฅผ ํตํด ์๋ก ํต์ ํ๋ ์ฌ๋ฌ ์๋น์ค๊ฐ ์๋ ์ฌ๋ฌ ์คํ์ด ์์ผ๋ฉฐ ํธ์คํธ ์๋ฒ์ ๋ฐ์ธ๋ฉ๋์ง๋ง ์ฌ์ ํ ์ก์ธ์คํ ์ ์๋ ๊ณต๊ฐ ์๋น์ค๊ฐ ์์ต๋๋ค. ๋ชจ๋ ์์ฒญ์ ํ๋ก์ํ ์ ์๋๋ก ๋ค๋ฅธ ๋ชจ๋ ์ค๋ฒ๋ ์ด๋ ๋คํธ์ํฌ.
ํธ์คํธ ๋ชจ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ด ๋ฌธ์ ์ ๋ํด ์ด๋ฏธ ์ฌ๋ฌ ๋ฒ ๋ ผ์๋์์ต๋๋ค. ์ผ๋ถ ์ ํ๋ ์๋๋ฆฌ์ค(์: ํน์ ์ญ๋ฐฉํฅ ํ๋ก์ ์น ํธ๋ํฝ ์ค์ )์์๋ ๊ด์ฐฎ์ ์ ์์ง๋ง ์ด ๋ฌธ์ ์ ๋ํ ์ผ๋ฐ์ ์ธ ์๋ฃจ์ ์ ์๋๋๋ค. ๊ฐ์ "ํด๊ฒฐ์ฑ "์ ๋ค์ ํด์ฑํ์ง ๋ง๊ณ ์ด์ ๊ฒ์๋ฌผ์ ์ฝ์ผ์ญ์์ค.
@darrellenns ์ฌ๊ธฐ์ 200๊ฐ๊ฐ ๋๋ ๋๊ธ์ด ์์ต๋๋ค. ๊ธฐ๋ณธ "ํด๋น๋๋ ๊ฒฝ์ฐ ํธ์คํธ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํ์ธ์"๋ผ๋ ๊ธฐ๋ณธ ์๋ฃจ์ ์ ์ ๊ณตํ๋ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ทธ๊ณ ์ ๋ฆฌํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ ๋๋ค. ๊ณต์ ์๋ฃจ์ ์ด ์ ๊ณต๋์ง ์์ผ๋ฉด ์ ์ ๊ฐ์ ์ฌ๋๋ค์ด ๊ทธ๋ฆฌ์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณ์ ๊ฐ์ ๋ด์ฉ์ ๊ณ์ํด์ ๋๊ธ์ ๋ฌ๊ณ
๋ฐ๋ผ์ ์ด ๋ฒ๊ทธ๊ฐ IP๋ฅผ ํ์ดํธ๋ฆฌ์คํธ์ ์ถ๊ฐํ๋ traefiks ๊ธฐ๋ฅ์ ์ํฅ์ ๋ฏธ์น๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ ๋ง์ต๋๊น?
์ด์จ๋ Swarm ๋ชจ๋๋ฅผ ์คํํ๋ ค๋ ์ฌ๋์ ์ํด ์ด๊ฒ์ ํธ์คํธ ๋ชจ๋๋ฅผ ์ฌ์ฉํ์ฌ ํฌํธ๋ฅผ ๊ฒ์ํ๋ ์์ ๋๋ค.
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 ์๋น์ค์ ๋ณต์ ๋ณธ์ ํ๋๋ง ์คํํ ์ ์์ผ๋ฉฐ ์ ๋ง ๊ทธ๋ฐ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค์ ๋ํ ์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ค๊ณํ์ง ์๊ณ traefik ์์ ์ฑ์ ์์ ํ ์ ๋ขฐํด์ผ ํฉ๋๋ค.
๋ํ ์ฒ์ ๋ณด๊ณ ๋ ๋๋ก traefik์ ํน๋ณํ ์๊ตฌ ์ฌํญ๊ณผ๋ ๊ด๋ จ์ด ์์ผ๋ฉฐ ์๋ ip๋ฅผ ์์ ํ์ง ์๋ ์ผ๋ฐ http ์๋น์ค๋ก ํ ์คํธ๋์์ต๋๋ค. ์ฆ, docker swarm ๋ชจ๋๊ฐ ์์๋์์์ ์๋ฏธํฉ๋๋ค(์ด ์ค์ํ ๊ธฐ๋ฅ์ด ๋๋ฝ๋จ). ์๋ฌด๋ ์ ๊ฒฝ์ฐ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ ๋๋ค.
์์์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ ์ฌ๋์ ๋ฐฉํดํ๊ธฐ๋ฅผ ๋ฐ๋ผ๊ธฐ ๋๋ฌธ์ ์ด ํญ๋ชฉ์ ๋ํด ๊ณ์ ์ธ๊ธํ๊ณ ์ถ์ต๋๋ค.
ํธ์คํธ ๋ชจ๋์์๋ traefik ์๋น์ค์ ๋ณต์ ๋ณธ์ ํ๋๋ง ์คํํ ์ ์์ผ๋ฉฐ, ์ ๋ง ๊ทธ๋ฐ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค์ ๋ํ ์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ค๊ณํ์ง ์๊ณ traefik ์์ ์ฑ์ ์์ ํ ์ ๋ขฐํด์ผ ํฉ๋๋ค.
ํธ์คํธ๋น ํ๋์ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ํธ์คํธ ๋ชจ๋์์๋ traefik ์๋น์ค์ ๋ณต์ ๋ณธ์ ํ๋๋ง ์คํํ ์ ์์ผ๋ฉฐ, ์ ๋ง ๊ทธ๋ฐ ๊ฒ ๊ฐ์ง๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์๋น์ค์ ๋ํ ์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ค๊ณํ์ง ์๊ณ traefik ์์ ์ฑ์ ์์ ํ ์ ๋ขฐํด์ผ ํฉ๋๋ค.
ํธ์คํธ๋น ํ๋์ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ya, ํ์ง๋ง traefik์ ๊ด๋ฆฌ์ ๋ ธ๋์์ ๊ฐ์ ๋ก ์๋ํด์ผ ํฉ๋๋ค. ์ ๋๋ก ์๋ํ๋ ค๋ฉด ์ด๊ฒ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ๊ด๋ฆฌ์ ๋ ธ๋, ํ๋์ ํธ์คํธ, ํ๋์ ์ธ์คํด์ค
traefik์
๋์ปค ์์ผ ํ๋ก์, ์๊ฒฉ ์์ผ ๋๋ traefik ์ํฐํ๋ผ์ด์ฆ. ์ฌ๊ธฐ์๋ค
์ด๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ ์คํ ํ์ผ:
https://github.com/BretFisher/dogvscat/blob/master/stack-proxy-global.yml
2019๋
3์ 16์ผ ํ ์์ผ ์คํ 5:25 Daniele Cruciani [email protected]
์ผ๋ค:
ํธ์คํธ ๋ชจ๋์์๋ traefik ์๋น์ค์ ๋ณต์ ๋ณธ์ ํ๋๋ง ์คํํ ์ ์์ผ๋ฉฐ ์คํํ์ง ์์ต๋๋ค.
์ ๋ฟ์ด๋ผ๊ณ ์๊ฐํ์ธ์. ์ด๋ ๊ฒํ๋ฉด traefik ์์ ์ฑ์ ์์ ํ ์ ๋ขฐํด์ผํฉ๋๋ค.
์๋น์ค์ ๋ํ ์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ค๊ณํ์ง ์์ต๋๋ค.ํธ์คํธ๋น ํ๋์ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
ya, ํ์ง๋ง traefik์ ๊ด๋ฆฌ์ ๋ ธ๋์์ ๊ฐ์ ๋ก ์์ ํด์ผ ํฉ๋๋ค. ์ด ์์ ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ ๋๋ก ์๋ํฉ๋๋ค. ๋ฐ๋ผ์ ํ๋์ ๊ด๋ฆฌ์ ๋ ธ๋, ํ๋์ ํธ์คํธ, ํ๋์ ์ธ์คํด์คโ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-473593956 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAwW31DHIwEJE1EqN3-8qj44WopocuQTks5vXWE_gaJpZM4Jf2WK
.
ํฅ๋ฏธ๋กญ๊ฒ๋ ์ด ๊ธฐ๋ฅ์ kubernetes์์ ์ฌ์ฉํ ์ ์์ง๋ง docker swarm ๋ชจ๋์์๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ traefik์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์๋ ์ต์
์ด ์๋ค๊ณ ์ฃผ์ฅํ์ง๋ง ์ฌ๋ฌ ๋
ธ๋์์ ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ์คํํ๋ ค๋ ๊ฒฝ์ฐ ๋จ์ผ ๋
ธ๋๋ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๋ํ ์์ฒญ์ ํ๋ก์ํ์ง ์๋ ๋ค๋ฅธ ์๋น์ค๋ ๋ชจ๋ ํธ์คํธ๋ฅผ ๋งคํํด์ผ ํ๋ ํน๋ณํ ์ข
๋ฅ์ ๊ตฌ์ฑ์ด ํ์ํ๊ณ ์ด์จ๋ ์ธ์คํด์ค๋น ์ ์ด๋ ํ๋์ ๋ค์ค ๋
ธ๋๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ํฌํธ๋ฅผ ๋งคํํ ์ ์์ต๋๋ค. .
๋ฑ๋ฑ. ์ด ํ ๋ก ์ ์๋ก ์คํฌ๋กคํ๊ณ ๊ทธ๊ฒ์ ๋ํด ๋ค๋ฅธ ๊ฒ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ ์งํ๊ธฐ ์ด๋ ต๊ณ ๋ฐ๋ฅด๊ธฐ ์ด๋ ค์ด ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ๋จ์ ์๊ธฐ ๋๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์์ฑํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ข์์ง ๋ณด์ฌ์ฃผ๋ ๊ฒ์ผ๋ก ์ถ์๋ ์ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํน๋ณํ ๊ฒฝ์ฐ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ์งํ๋ ๋ฐ ์์๋๋ ๋ชจ๋ ์๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋ ์ ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ๋ฉด์ ์ด๋ฐ ์ข ๋ฅ์ ๊ธฐ๋ฅ์ด docker swarm ๋ชจ๋ธ์ ๋ณด์ ๋ฌธ์ ๋ผ๋ฉด ๊ทธ๋ฅ wontfix๋ก ํ์ํ๊ณ kubernetes๋ก ์ ํํ ๊ณํ์ด๋ฉฐ, ๊ทธ๋ ๋ค๋ฉด ํ๋ก์ ํธ ๊ฐ์ ์ถฉ๋์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ฒฐ์ฝ ์ผ์ด๋์ง ์์ ๊ฒ์ด๋ผ๊ณ ๋ช ์ ์ ์ผ๋ก ๋งํ๋ ๊ฒ์ด๋ฏ๋ก ๋ชจ๋ ์ข ๋ฅ์ ๋ ธ๋ ๋ผ์ ๋ํด ๋์ปค ๋ผ ๋ชจ๋๋ฅผ ์ ํํ๊ธฐ ์ ์ ๊ฐ๋ฅํ๋ฉด ๋ชจ๋ ์ฌ๋์ด ์กฐ์น๋ฅผ ์ทจํ ์ ์์ต๋๋ค.
kubernetes์๋ Swarm์ ์๋ ๋ง์ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ๊ทธ ๋ฐ๋์ ๊ฒฝ์ฐ๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ฐ๋ฆฌ ๋ชจ๋๋ ๊ธฐ๋ฅ์ ํฌํจํ ๋ง์ ์์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํน์ ์๋ฃจ์ ์ ์ฌ์ฉํ ์ค์ผ์คํธ๋ ์ดํฐ๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ชจ๋ ๋ฌธ์ /์๊ตฌ๋ฅผ ํด๊ฒฐํ๋ ๋๊ตฌ๋ ์์ต๋๋ค.
์ ๋ ๋์์ ์ฃผ๋ ค๋ ์ปค๋ฎค๋ํฐ ํ์์ผ ๋ฟ์ ๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ํ์ฌ ์๋ฃจ์ ์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด kubernetes์ ๊ฐ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค. ์ฟ ๋ฒ๋คํฐ์ค์ ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ์์ด ๋น์ ์ ์ทจํฅ์ ๋ ๋ง๋ค๊ณ ์๊ฐํ๋ค๋ฉด ์ด๊ฒ์ด ๋ค๋ฅธ ์ค์ผ์คํธ๋ ์ดํฐ๋ณด๋ค ํ๋์ ์ค์ผ์คํธ๋ ์ดํฐ๋ฅผ ์ ํํ๋ ํฉ๋ฆฌ์ ์ธ ์ด์ ์ ๋๋ค.
์ญ์ฌ์ ์ผ๋ก moby์ swarm ๊ด๋ฆฌ์๋ ๋ด์ผ ์ปค๋ฎค๋ํฐ์ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฌธ์ ์ ๋ํ ์๋ฃจ์ ์ผ๋ก PR์ ์ค๋จํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ wontfix๋ก ์ข ๋ฃํ์ง ์์ต๋๋ค. ๋ํ ๊ทธ๋๊น์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ ผ์ํ๋ ๊ฒ์ด ์ด ๋ฌธ์ ์ค๋ ๋์ ์ ํจํ ์ฌ์ฉ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. :)
Swarm ์ ์ง ๊ด๋ฆฌ์๋ ์๋์ง๋ง ์ญ์ฌ์ ์ผ๋ก ํ์ ํ์ฌ ์ ์ฅ์์์ ์ปค๋ฐ์ ๋ฐ๋ ๊ฒ์ ๋ณผ ์ ์๋ PR ์ด์์ ๋ฏธ๋ ๊ธฐ๋ฅ ๊ณํ์ ๊ณต๊ฐํ์ง ์๋๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
๋ฌผ๋ก ๊ทํ์ ์๊ฒฌ์ ํ์ํ๋ค๊ณ ๋งํ๋ ๊ฒ์ ์์์ต๋๋ค(๋๋ ์ ๊ฐ ๋ชจํธํ ๋ฐฉ์์ผ๋ก ๋งํ์ต๋๋ค, ์ฃ์กํฉ๋๋ค). ํ์ง๋ง ์๋ @PanJ ๋ณด๊ณ ์๋ฅผ ๊ฐํํ๊ณ ์ถ์ต๋๋ค.
๊ทธ ๋์ Swarm ๋ชจ๋ ์ธ๋ถ์์ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ํํ๊ณ Swarm ๋ชจ๋์์ ๊ฒ์๋ ํฌํธ๋ก ์ ๋ฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค(SSL ์ข ๋ฃ๋ ์ด ์ปจํ ์ด๋์์ ์ํ๋์ด์ผ ํจ). ์ด๋ Swarm์ ๋ชฉ์ ์ ๊นจ๋จ๋ฆฝ๋๋ค. ์๊ฐ ์น์ ๋ฐ ์ค์ผ์คํธ๋ ์ด์ ์ ์ํ ๋ชจ๋์ ๋๋ค.
๋ฌผ๋ก ์ด ํน์ ์ฃผ์ ์ ๋ํด์๋ง "๊ตฐ์ง ๋ชจ๋์ ๋ชฉ์ ์ ๊นจ๋ ๊ฒ"์ ๋ ๋ง์ ๊ด์ฌ์ ๊ฐ์ง ๊ฐ์น๊ฐ ์ถฉ๋ถํฉ๋๋ค.
ํ์์ ํ๋ก์ ํ๋กํ ์ฝ์ ์ถ๊ฐํ๋ PR์ ๊ตฌ์ถํ๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ. ์ฐ๋ฆฌ๋ Golang ํ๋ก๊ทธ๋๋จธ๊ฐ ์๋๋ฏ๋ก ์ฝ๊ฐ ์ฐพ์ต๋๋ค.
๊ตํํ.
ํ์ง๋ง ์ ๋ Docker ํ์ด
(์ํ๊ณ ์ ๋ฐ์ ๊ฑธ์ณ) ํธํ ๊ฐ๋ฅํ ์๋ฃจ์
์ ํ๋ก์ ํ๋กํ ์ฝ์ ๊ณ์ธตํํ๋ ๊ฒ์
๋๋ค.
์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ๋ฅผ ์ง์ํฉ๋๋ค.
๋ณต์ก์ฑ์ ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ๊ฐ
์์ฒด ํค๋๋ฅผ ์ฝ์
ํ์ง๋ง ๋ค์์ด ์์ ์ ์๋ค๋ ์ฌ์ค์ ์ง์ํด์ผ ํฉ๋๋ค.
์ด๋ฏธ ์ฝ์
๋ ์
์คํธ๋ฆผ ํ๋ก์ ํ๋กํ ์ฝ ํค๋(์: Google LB ๋๋
AWS ELB) .
2019๋
3์ 17์ผ ์ผ์์ผ, 12:17 Daniele Cruciani, [email protected]
์ผ๋ค:
๋ฌผ๋ก ๊ทํ์ ์๊ฒฌ์ ํ์ํ๋ค๊ณ ๋งํ๋ ๊ฒ์ ์์์ต๋๋ค.
๋ชจํธํ ๋ฐฉ๋ฒ, ์ฃ์กํฉ๋๋ค). ํ์ง๋ง ๋๋ ์๋ @PanJ๋ฅผ ๊ฐํํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค.
https://github.com/PanJ ๋ณด๊ณ ์:๊ทธ๋์ ์คํ ์ค์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ํํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ค์ ๋ชจ๋ ์ธ๋ถ์ ํ๋ก์ ์ปจํ ์ด๋๋ฅผ ๊ฒ์ํ๊ณ ๊ฒ์๋ ํฌํธ๋ก ์ ๋ฌํ๋๋ก ํฉ๋๋ค.
Swarm ๋ชจ๋์์(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
๊ณ์ธตํ๋๊ณ ์์ ํ๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ k8์ ๋ํ ์์ฒญ
docker swarm์ด ์๋ digitalocean์์ nginx๋ฅผ ์คํํ๊ณ nginx ๋ก๊ทธ ๋ด์์ 10.255.0.2
๋์ ์ค์ $remote_addr
๋ฅผ ์ป์ผ๋ ค๋ ์ฌ๋์ ์ํด; @coltenkrauter์ ์๋ฃจ์
์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์บ์น ๋น์ ์ ๋๋ถ๋ถ์ ์ฌ๋๋ค์๊ฒ ํ์ธ์ํด์ผ์ด ์๋ฃจ์
๊ณผ ํจ๊ป ํธ์คํธ์์ ํ๋ ๊ฐ์ 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
_Edit : ์ง๊ธ ์ฐ๋ฆฌ๋ํ๊ณ ๋ณด์ฅ ๊ถ๋ฆฌ answer_๋ฅผ ์ป์ ์
์ธ๊ทธ๋ ์ค( mode: host
)๋ฅผ ์ฌ์ฉ ํ์ง ์๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ์ธ๊ทธ๋ ์ค ๋คํธ์ํน์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ๋ช
์๋์ด ์๋ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด
์๋ฌด๋ ์ญ ํ๋ก์๋ก ๋จ์ผ ํธ์คํธ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค. ์ ๋ IP๊ฐ ์๋ ์ฌ๋ฌ ํธ์คํธ๊ฐ ํ์ํ๋ฉฐ ์ด ์ค์ ์ ๋ฌ์ฑํ๋ ค๋ฉด ์ค์ ๋ฉ์๊ฐ ํ์์
๋๋ค.
์๋ง๋ ๋ถ๊ฐ๋ฅํ ์๋ ์์ง๋ง 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
๋์์ผ๋ก swarm์ ์๋ ์์ค IP๋ฅผ ๊ฐ์ ธ ์์ X-Forwarded-For
ํค๋๋ฅผ ๋ง๋ค ์ ์์ต๋๊น?
์๋ฌด๋ ์ญ ํ๋ก์๋ก ๋จ์ผ ํธ์คํธ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ์ ๋ IP๊ฐ ์๋ ์ฌ๋ฌ ํธ์คํธ๊ฐ ํ์ํ๋ฉฐ ์ด ์ค์ ์ ๋ฌ์ฑํ๋ ค๋ฉด ์ค์ ๋ฉ์๊ฐ ํ์์ ๋๋ค.
๋ผ์ ๊ฐ ๋ ธ๋๋ ์ญ๋ฐฉํฅ ํ๋ก์์ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์๊ณ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ๊ธฐ๋ณธ ์๋น์ค๋ก ํธ๋ํฝ์ ๋ผ์ฐํ ํ ์ ์์ต๋๋ค(๊ทธ๋ฌ๋ ํ๋ก์๋ง ์๋ IP ์ฃผ์์ ๋ํด ์ ์ ์์).
์ ์ฒด ์ค๋ ๋๋ฅผ ์ฝ์ผ์ญ์์ค. (GitHub๋ ์ ์ฉํ ์ฃผ์์ ์จ๊ธฐ๊ณ ์์ผ๋ฏ๋ก ํ์ฅํด์ผ ํฉ๋๋ค :disappointed:);
๋์์ผ๋ก swarm์ ์๋ ์์ค IP๋ฅผ ๊ฐ์ ธ ์์
X-Forwarded-For
ํค๋๋ฅผ ๋ง๋ค ์ ์์ต๋๊น?
https://github.com/moby/moby/issues/25526#issuecomment -367642600์ ์ฐธ์กฐ X-Forwarded-For
๋ L7 ํ๋กํ ์ฝ์
๋๋ค. Swarm ์ง์
์ DNAT์ ํจ๊ป IPVS๋ฅผ ์ฌ์ฉํ๋ L4์
๋๋ค.
@port22 ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ฃจ์ ์ด ์๋๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์๋ฃจ์ ์ ๊ณ์ธตํํ ์ ์๋๋ก ๋ง๋๋ ๊ฒ์ ๋๋ค. #25526 comment ์์ @sandys ์ ์ ์ฐธ์กฐ
๋์์ผ๋ก, ์๋ ์์ค IP๋ฅผ ๊ฐ์ ธ ์์ ์์ฑํ ์ ์์ต๋๋ค.
X-Forwarded-For ํค๋?
#25526(๋๊ธ) ์ฐธ์กฐ
https://github.com/moby/moby/issues/25526#issuecomment-367642600 ;
X-Forwarded-For๋ L7 ํ๋กํ ์ฝ์ ๋๋ค. Swarm ์ง์ ์ DNAT์ ํจ๊ป IPVS๋ฅผ ์ฌ์ฉํ๋ L4์ ๋๋ค.
์ฌ๊ธฐ์ ์ฌ๋ฐ๋ฅธ ์๋ฃจ์
์ L4์ ์ฃผ์
๋ ํ๋ก์ ํ๋กํ ์ฝ์
๋๋ค. ์ผ๋ถ๊ฐ์๋ค
๋์ผํ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ Envoy์ ๊ด๋ จ ์ฐฌ๋ฐ ํ ๋ก
https://github.com/envoyproxy/envoy/issues/4128 ๋ฐ
https://github.com/envoyproxy/envoy/issues/1031
2019๋
4์ 10์ผ ์์์ผ ์ค์ 1:40 Sebastiaan van Stijn <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์๋ฌด๋ ์ญ ํ๋ก์๋ก ๋จ์ผ ํธ์คํธ๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์ ๋๋ค. ๋น์ ์ ์ฌ๋ฌ
์ ๋ IP๊ฐ ์๋ ํธ์คํธ์ด๊ณ ์ด๋ฅผ ๋ฌ์ฑํ๋ ค๋ฉด swarm-mesh๊ฐ ํ์์ ๋๋ค.
์ค์ .Swarm์ ๊ฐ ๋ ธ๋๋ ๋ฆฌ๋ฒ์ค ํ๋ก์์ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์๊ณ ๋ผ์ฐํ ํ ์ ์์ต๋๋ค.
์ค๋ฒ๋ ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ๊ธฐ๋ณธ ์๋น์ค์ ๋ํ ํธ๋ํฝ(๊ทธ๋ฌ๋
ํ๋ก์๋ ์๋ IP ์ฃผ์์ ๋ํด ์๊ณ ์์ต๋๋ค).์ ์ฒด ์ค๋ ๋๋ฅผ ์ฝ์ด์ผ ํฉ๋๋ค(GitHub์ด ๊ฝค ์ ์ฉํ
์ฃผ์, ๊ทธ๋์ ๋น์ ์ ๊ทธ๊ฒ๋ค์ ํ์ฅํด์ผ ํ ๊ฒ์ ๋๋ค ๐);๋์์ผ๋ก, ์๋ ์์ค IP๋ฅผ ๊ฐ์ ธ ์์ ์์ฑํ ์ ์์ต๋๋ค.
X-Forwarded-For ํค๋?#25526(๋๊ธ) ์ฐธ์กฐ
https://github.com/moby/moby/issues/25526#issuecomment-367642600 ;
X-Forwarded-For๋ L7 ํ๋กํ ์ฝ์ ๋๋ค. Swarm ์ง์ ์ DNAT์ ํจ๊ป IPVS๋ฅผ ์ฌ์ฉํ๋ L4์ ๋๋ค.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526#issuecomment-481415217 ๋๋ ์์๊ฑฐ
์ค๋ ๋
https://github.com/notifications/unsubscribe-auth/AAEsU5KdnWQ21hJx_xzc-QROJiWbAlulks5vfPOigaJpZM4Jf2WK
.
Swarm์ ๊ฐ ๋ ธ๋๋ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์ธ์คํด์ค๋ฅผ ์คํํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋๋ Swarm ๋ก๋ ๋ฐธ๋ฐ์์ ๊ธฐ๋ฅ์ ์ ๊ฑฐํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ฌธ์ ๋ ๊ตฌ์ฒด์ ์ผ๋ก 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, [email protected]
์ผ๋ค:
@port22 https://github.com/port22 ์์ ์ ์์ง๋ง ๋์ปค ๊ด๋ฆฌ
๊ทธ๊ฒ์ ๋คํธ์ํฌ ์์ฒด๋ก, ๋๋ ๊ทธ๊ฒ์ด Shorewall๊ณผ ํจ๊ป ์๋ํ๋๋ก ์๋ํ์ง๋ง
์ ์ผํ ๋ฐฉ๋ฒ์ ๋์ปค ๊ท์น/์ฒด์ธ์ ๋ํ ์์ธ๋ฅผ ๋ง๋๋ ๊ฒ์ ๋๋ค.
docker swarm ๋ชจ๋๋ก ์ฑ๊ณต (๊ทธ๋ฌ๋ swarm ๋ชจ๋์ 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๊ฐ ์์ต๋๋ค. ํธ์คํธ ๋ชจ๋์์ ํ๋ก์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๊ณ keepalive๋ฅผ ์ฌ์ฉํ์ฌ HA๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ด์ฐฎ์ง๋ง ์ ์ผํ ๋๋ฝ๋ ๋ถ๋ถ์ ๋ก๋ ๋ฐธ๋ฐ์ฑ์ผ ๊ฒ์ ๋๋ค. ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ๋จ์ํ ์น ํ๋ก์์์๋ ๊ทธ๋ค์ง ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ณต์กํ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ง ์๊ฑฐ๋ ํ๋ก์์ ๋ฐฑ์๋๊ฐ ๋์ผํ ๋ฌผ๋ฆฌ์ ์์คํ ์ ์์ง ์๊ณ ๋คํธ์ํฌ ํธ๋ํฝ์ด ํ๋์ NIC์ ๋ํด ๋๋ฌด ๋๊ณ ...
๊ทธ๋ ๋ค๋ฉด ๋ด๋ถ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ ๊ฐ์ธ ์ฃผ์๊ฐ ์๋ Docker Swarm ์ธ๋ถ์์ ์์ฒญ์ ์์ค IP ์ฃผ์๋ฅผ ๋ณด๋ ๊ฒ์ด ์ค์ ๋ก ๋ถ๊ฐ๋ฅํฉ๋๊น? ์์ง?
@thaJeztah Docker Inc ํ์ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฌธ์ ์ ์ํ๋ฅผ
@thaJeztah https://github.com/thaJeztah Docker Inc์ ๋๊ตฐ๊ฐ๊ฐ ๊ฐ๋ฅ ํฉ๋๊น?
ํ์์ ์ด ๋ฌธ์ ์ ์ํ๋ฅผ ์๋ ค๋๋ฆฝ๋๋ค. ์์ง ๊ณ ๋ ค์ค์ธ๊ฐ์
๋ฐ/๋๋ ์์ ? ๋ชจ๋ ๋์ฐฉ ์์ ์๊ฐ? ์๋๋ฉด Docker ์ดํ๋ก ์์ ํ ๋ฌด์๋ฉ๋๊น?
์ฟ ๋ฒ๋คํฐ์ค์์ ํตํฉ? ๊ฑฐ์ 3๋ ์ ์ ๋ณด๊ณ ๋์์ต๋๋ค :/
๋ด๊ฐ ์์ ํ ํ ์ ์๋๋ก ์ด ์ง์ ("์์ ํ์ง ์์ ๊ฒ")
์ฟ ๋ฒ๋คํฐ์ค๋ก์ ๋ง์ด๊ทธ๋ ์ด์
์ ์ ๋นํํฉ๋๋ค. ๊ทธ๋ฐ ๋ถ๋๋ฌ์.
๊ฐ์ฌ ํด์.
>
ํธ์ํฐ์์ ๋ต์ฅ์ ํด์ค๊น์?
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ ์ ์๋ ๊ฐ์ ์์ฒญ์ด ์์ต๋๋ค - https://github.com/moby/moby/issues/39465
๊ฑฐ๊ธฐ์ ๋น์ ์ ์๊ฐ๊ณผ ์๊ฒฌ์ ์ถ๊ฐํ์ญ์์ค
๋๋ ์ด๋ฏธ ๊ทธ ๋ฌธ์ ์ ๋ํด ์ธ๊ธํ์ต๋๋ค :-)
์ด๊ฒ์ ํ๋์ ๋๋ฅผ ์ํด ์ฐจ๋จ๋์์ต๋๋ค. IP ์ฃผ์๋ฅผ ํต๊ณผํด์ผ ํ๋ฉฐ ๋ง์ ๊ฒ์(์ด ์ค๋ ๋์์ ๋ค๋ฅธ ์ฌ๋๋ค๊ณผ ํจ๊ป ๊ฑฐ์ 3๋ ๋์ ๊ฒ์ํ ๊ฒฐ๊ณผ์ ๋๋ค...) ํ ๋ฌด๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ ์ ์๋ ์๋ฃจ์ ์ ์์ง ์ฐพ์ง ๋ชปํ์ต๋๋ค.
์ด ๋ฌธ์ ๋ก ์ธํด ํ๋ก๋์ ์์ Swarm์ ์ฌ์ฉํ ์ ์์์ผ๋ฉฐ ์ด๊ฒ์ด ์ถ๊ฐ๋ ์ ์๋์ง ์ฌ๋ถ์ ๋ํ ๊ณต์์ ์ธ ๋ต๋ณ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ์ด๊ฒ์ด ์ถ๊ฐ๋์ง ์๋ ๊ฒฝ์ฐ ์ ์๋ ๋์ ์๋ฃจ์ ์ ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ haproxy ๋ค์ traefik์ ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์์ต๋๋ค. 2016๋ ์ดํ 254๊ฐ์ ๋๊ธ์ด ๋ฌ๋ฆฐ ๊ฒ์ ๋ณด๊ณ ๋๋์ต๋๋ค.
@Betriebsrat traefik ํธ๋ค ์์ฒญ์ ์ฆ์ ํ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? haproxy๋ ์ ๋ง ํ์ํ๊ฐ์, ์๋๋ฉด ๊ทธ๋ฅ ์ต๊ด์ธ๊ฐ์? ํธ์คํธ ๋ชจ๋์์ traefik์ ๋ ธ์ถํ๋ฉด ํด๋ผ์ด์ธํธ IP ์ฃผ์๊ฐ ํ์๋๊ณ ๋ชจ๋ ๊ฒ์ด ์ ์์ ๋๋ค. :)
๋๋ ์ด "ํด๊ฒฐ์ฑ "์ด ์ฌ๋ฌ ๋ฒ ์ธ๊ธ๋์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฌ๋๋ค์ ๊ณ์ ๊ทธ๊ฒ์ ๋์น๊ณ ์์ต๋๋ค.
๋๋ ๋ํ ๊ทธ๊ฒ์ด ๋๋๋ก ์ ํ ์ฌํญ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ด๊ฒ์ด ๊ฐ๋ฅํด์ผ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค.
@ajardan ๋ด๊ฐ ์๋ํ์ง๋ง ํ๋ก ํธ ์๋์์ ์๋ตํ๋ ๋จ์ผ ํธ์คํธ ์ด์์ด๋ฏ๋ก ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. ์ด์์ ์ผ๋ก๋ ์ ์ฒด ๋ฌด๋ฆฌ๊ฐ ์์ฒญ์ ๋ผ์ฐํ
ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์๊ท๋ชจ ์์
์ ๊ฒฝ์ฐ ํ๋์ ์๋น์ค๋ฅผ host
๋ชจ๋๋ก ์ ํํ๊ณ ์ด๋ฅผ ์์ง ์๋ฒ๋ก ์ฌ์ฉํ๋ฉด ์ ์๋ํ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
traefik๊ณผ ๊ฐ์ ๊ฒ์ ํธ์คํธ ๋ชจ๋์ ๋๋ ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ Swarm์ ์ฌ์ฉํ์ฌ ์ด์ฉํ๋ ค๋ ์ด์ ์ ๋ฌดํจํํฉ๋๋ค.
@pattonwebz ํธ์คํธ ๋ชจ๋๋ ์ฌ๋ฌ ํธ์คํธ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ฅผ ์คํํ๋ ์๋น์ค์ ๋ํด ํ์ฑํํ ์ ์์ผ๋ฉฐ mode=global์ ์ฌ์ฉํ์ฌ ์ํํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ traefik์ ๋ชจ๋ Swarm ๋ ธ๋์์ ์คํ๋๊ณ ์ง์ ๋ ํฌํธ์ ๋ํ ์ฐ๊ฒฐ์ ์๋ฝํ ๋ค์ ์ด๋ฌํ ์ฐ๊ฒฐ์ ํ์ธํด์ผ ํ๋ ์๋น์ค์ ๋ด๋ถ์ ์ผ๋ก ์์ฒญ์ ๋ผ์ฐํ ํฉ๋๋ค.
์ด ์ค์ ์ ๊ธ๋ก๋ฒ ๋ชจ๋์ ์๋น์ค์ ํจ๊ป ์ฌ์ฉํ์ง๋ง ๊ด๋ฆฌ์ ๋ ธ๋๋ก ์ ํ๋์์ผ๋ฉฐ ์๋ง ๊ฐ์ ์์ฒญ/์ด์ ๋ํด ์๋ฒฝํ๊ฒ ์๋ํ์ต๋๋ค.
์์ธํ ๋ด์ฉ์ด ํ์ํ ๊ฒฝ์ฐ ์์ธํ ์ค๋ช ํ๊ฒ ์ต๋๋ค.
@pattonwebz @ajardan ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ๊ตฌ์ฑ ๊ฐ๋ฅํ haproxy ์๋น์ค ๋ฅผ ์ฌ์ฉํ๊ณ
@pattonwebz ์์ @ajardan ์๋ฃจ์ ์ธ์๋ ํธ์คํธ ๋คํธ์ํน์ ์ฌ์ฉํ์ฌ ์ ์ญ ๋ชจ๋์์ https://hub.docker.com/r/decentralize/swarm-tcp-proxy ๋ฅผ ์คํํ์ฌ ์ธ๋ฐ์ด๋ ํธ๋ํฝ์ PROXY ํ๋กํ ์ฝ ์ง์์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ก์ ํ๋กํ ์ฝ ํค๋๋ฅผ ๋์ฝ๋ฉํ๋๋ก ๊ตฌ์ฑ๋ Traefik์ผ๋ก ์ ๋ฌํฉ๋๋ค.
์ด ๋ชจ๋ ๊ฒ์ด ์๋๋ผ ์ ์ ํ Docker Swarm์ ์ผ๋ถ์ธ ํ๋๊ทธ์ฌ์ผ ํฉ๋๋ค.
๋ณต์กํ ์๋ฃจ์
IMHO.
์ฐ๋ฆฌ๋ ์ธ์ฆ์๋ฅผ ๊ด๋ฆฌํ๊ณ SSL์ ์คํ๋ก๋ํ๊ธฐ ์ํด haproxy๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ฌ๋๋ค์ "์คํ์ ํธ์คํธ ๋ชจ๋" ์๋ฃจ์
์ด ์๋ฃจ์
์ด ์๋๋ผ๋ ์ฌ์ค์ ๊ณ์ ๋์น๊ณ ์์ต๋๋ค.
๊ทธ๋ค์ ๋์ปค ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ํ์ฉํ๊ธฐ ์ํด ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ์ ํจ๊ป ์๋ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์ ์ฒด ์ค๋ ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก 3๋
๋์ ์งํ๋๋ 'ํธ์คํธ ๋ชจ๋ ์ฌ์ฉ' -> '์ด์ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅ' ์ํด์
๋๋ค.
์ฌ๊ธฐ์ ๋ค์ ์คํ ๊ฐ๋ฅํ ๋์์ผ๋ก swarm-tcp-proxy
๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณผ๊ฑฐ์ ๋น์ทํ ๊ฒ์ ๋ณด๋ฉด ํญ์ ๊ทธ๋ฐ ์์ด๋์ด๋ก ์ ์๊ฒ ๊ฑฐ๋ ๋น์ปค๊ฐ ๋์์ต๋๋ค.
์๋ฒฝํ ์ธ๊ณ์์ ๋ด ๊ธฐ์กด(๊ทธ๋ฆฌ๊ณ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ์ ์๋ํ๋) ๋ฌด๋ฆฌ๋ ํ๋ก์๋ฅผ ํตํ ์ถ๊ฐ ์๋น์ค ๊ณ์ธต์ด๋ ๋ ๋ง์ ํ๋ก์ ์์ด๋ IP ๋ฐ์ดํฐ๋ฅผ ํตํด ์๋ํ๊ณ ์ ๋ฌํ ๊ฒ์ ๋๋ค.
์ฌ๋๋ค์ "์คํ์ ํธ์คํธ ๋ชจ๋" ์๋ฃจ์ ์ด ์๋ฃจ์ ์ด ์๋๋ผ๋ ์ฌ์ค์ ๊ณ์ ๋์น๊ณ ์์ต๋๋ค.
์์ฒด ์๋ฃจ์ Docker์ ๊ธฐ๋ณธ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค . Docker์ ์๋น์ค ๋ฉ์์ ๋๋ฌํ๊ธฐ ์ ์ ํธ์คํธ ๋คํธ์ํฌ ์คํ์ ๊ณ์ธต์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
@Betriebsrat traefik์ ์ธ์ฆ์์ SSL์ ๋งค์ฐ ์ ์ํํ ์ ์์ผ๋ฏ๋ก ์ฌ์ ํ ์ ํ์ํ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ํ ์ด์ ์ @matthanley๊ฐ ์ธ๊ธํ๋ฏ์ด ๋์ปค ๋ก๋ ๋ฐธ๋ฐ์ฑ์ ์ฌ๋ผ์ง์ง ์์ต๋๋ค. traefik์ด ๋ฐฑ์๋์์ ์์ฒญ์ ๊ท ํ์ ๋ง์ถ๋ ๋ฐฉ์์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด Swarm์ LB๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋์ค์ Swarm์ด ์ฒ๋ฆฌํ ์๋น์ค VIP์ ์์ฒญ์ ๋ณด๋ ๋๋ค.
์ด๋ ์๋น์ค๋ณ๋ก ๊ตฌ์ฑํ ์ ์์ผ๋ฏ๋ก ๋งค์ฐ ์ ์ฐํฉ๋๋ค.
docker swarm ํด๋ฌ์คํฐ ์ธ๋ถ์ ๋ค๋ฅธ Nginx ์๋ฒ๋ฅผ ์ค์ ํ๊ณ Swarm ์๋น์ค์ ์์ฒญ์ ์ ๋ฌํ ์ ์์ต๋๋ค. ์ด Niginx conf์์ ์ ๋ฐฉํฅ ํค๋๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด
์์น / {
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;
๋์ปค ์ค์ ๋ชจ๋์์ ์ค์ ํด๋ผ์ด์ธํธ IP๋ฅผ ์ป๋ ์๋ฃจ์ ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋์ผํ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ค์์ ๊ตฌํํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
https://github.com/moby/moby/issues/25526#issuecomment -475083415
๋จ์ผ ๋ ธ๋์์ ์ฌ๋ฌ ์ธ๊ทธ๋ ์ค ์ปจํ ์ด๋๋ฅผ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์์ ์ด์ง ์์ ์๋ฃจ์ ์ ๋๋ค.
์ด๋ ค์์ Docker๊ฐ TCP/UDP๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ๋ฉด ์ด๊ฒ์ HTTP ํ๋กํ ์ฝ ๋ฌธ์ ์ ๋๋ค. ์ต์ํ ๋์ปค๊ฐ ์์ค IP๋ฅผ ์๊ฒฉ ํธ์คํธ๋ก "์์กฐ"ํ๊ณ Swarm Mesh์์ ์์ฒด ๋ด๋ถ IP๋ฅผ ์ ๊ณตํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ํ์ง๋ง ๋ฐํ ํธ๋ํฝ์ด ์๋ชป๋ ์์น๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ http ์์ฒญ์ ๋ํด ์๋ IP์ ํค๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
์ณ์. ๊ตฌ์ฒด์ ์ผ๋ก - l4์์ ์๋ํ๋ ํ๋ก์ ํ๋กํ ์ฝ ํค๋๋ก
๋ฐ l7 ๋ฐ ๋๋ถ๋ถ์ ์๋ ค์ง ์์ฉ ํ๋ก๊ทธ๋จ ์ํํธ์จ์ด(๋ฐ
๋ํ ํด๋ผ์ฐ๋ ์ ๊ณต์
์ฒด).
๋๋ ๊ทธ๊ฒ์ ๋ํด ๋ณ๋์ ๋ฒ๊ทธ๋ฅผ ์ ์ถํ์ผ๋ฉฐ ๋ช ๊ฐ์ง ์๊ฒฌ์ด ๋งํฌ๋์ด ์์ต๋๋ค.
์์. ๊ด์ฌ์ด ์๋ ๊ฒฝ์ฐ ํด๋น ๋ฒ๊ทธ์ ์ถ๊ฐํ์ญ์์ค.
2019๋ 9์ 5์ผ ๋ชฉ์์ผ 18:56 Vladimir, [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ์ต๋๋ค.
๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ ์๋ณธ IP์ ๋ํ ํค๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
http ์์ฒญ.โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธ
https://github.com/moby/moby/issues/25526?email_source=notifications&email_token=AAASYU7APUNJPLZ6AJ6XXMDQIECIJA5CNFSM4CL7MWFKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LDNMVXH
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AAASYU4VZGKUFLL5STZ44GDQIECIJANCNFSM4CL7MWFA
.
2019๋ ์ธ๋ฐ ์ด๊ฒ ์์ง๋ ๋ฌธ์ ์ผ?? ๊ทธ๊ฒ์ traefik์ IP ํ์ดํธ๋ฆฌ์คํธ๋ฅผ ๊ณ ํต์ค๋ฝ๊ฒ ๋ง๋ญ๋๋ค. ๋ชจ๋ ๋ ธ๋์ ํธ์คํธ ํฌํธ๊ฐ ํ์ํ์ง ์์์ผ ํฉ๋๋ค.
@kaysond ์ฐ๋ฆฌ์ ์ ์ฅ์ Swarm์ ํฌ๊ธฐํ๋ ๊ฒ์ด์์ต๋๋ค. AWS์ ECS๋ก ์ด์ ํ์ต๋๋ค. ๋ ๊ฑด์ค์ ์ธ ๊ฒ์ ๊ฒ์ํ ์ ์์ด ์ ๊ฐ์ด์ง๋ง ๊ถ๊ทน์ ์ผ๋ก ์ฐ๋ฆฌ๋ ํจ๊ณผ๊ฐ ์๋ ๊ฒ์ด ํ์ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ์ํฅ์ ๋ฏธ์น๋ ์ ์ผํ ์ฃผ์ Swarm ๋ฒ๊ทธ(๋๋ ๊ธฐ๋ฅ ๋ถ์กฑ)๊ฐ ์๋๋๋ค. ์ต๊ทผ ๋ช ๋ ๋์ ๋ช ๋ฐฑํ ์์ /ํผ๋๋ฐฑ์ด ์์ต๋๋ค. ๊ฐ์ฅ ์ค๋ง์ค๋ฝ์ง๋ง ์์ต๋๋ค.
@jmkgreen ์ฐ๋ฆฌ๋ ๊ฐ์ ์์น์ ์์ผ๋ฉฐ ์ด ๋ฌธ์ ๊ฐ ์ฌ์ ํ ์งํ ์ค์ด๊ธฐ ๋๋ฌธ์ ์ง๋ 6๊ฐ์ ์ด์ docker swarm์์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ์ด๋ํ๋ ๋ฐ ๋ณด๋์ต๋๋ค. ๋๋ ์์ฉ ๊ฐ๋ฅํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์ง ๋ชปํ ์ฑ ์ด๋ฏธ ์์ญ ์๊ฐ๊ณผ ์๋ฐฑ ์๊ฐ์ ํ์ ์๊ฐ์ ์ฌ๊ธฐ์ ํฌ์ํ์ต๋๋ค. ๋ชจ๋ ํธ์คํธ ํฌํธ์ ๋ฐ์ธ๋ฉํ๋ฉด ํ๋กํ LB์ ๋ชฉ์ ์ด ์์ ํ ๋ฌดํจํ๋ฉ๋๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น? ํธ์คํธ ๋ชจ๋ + ์ ์ญ์์ ์๋น์ค๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๋ ธ๋์ ๋๋ฌํ๋๋ก LB๋ฅผ ์ค์ ํ๋ฉด ์๋ํฉ๋๋ค. ํ๋ก์๊ฐ ๊ฐ๋ณ๊ธฐ ๋๋ฌธ์(์ ๋ https ์คํ๋ก๋ฉ ๋ฐ ๊ธฐํ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ nginx๋ฅผ ์ฌ์ฉํฉ๋๋ค) ๋ชจ๋ ์๋ฒ์ ๋ฐฐํฌ๋๋ค๋ ์ฌ์ค์ ์๋ฒ ๋ฆฌ์์ค์ 1% ๋ฏธ๋ง์ ์ฌ์ฉํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์งํ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค([email protected]).
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น? ํธ์คํธ ๋ชจ๋ + ์ ์ญ์์ ์๋น์ค๋ฅผ ์ ์ธํ๊ณ ๋ชจ๋ ๋ ธ๋์ ๋๋ฌํ๋๋ก LB๋ฅผ ์ค์ ํ๋ฉด ์๋ํฉ๋๋ค.
@RemiBou ํ๋ก์ ์์ฒด๋ฅผ ์ ๋ฐ์ดํธ/์ฌ์์ํด์ผ ํ ๋ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ ์ค๋จ์ ์ฆ์ ๊ฐ์งํ์ง ์๊ณ ํ๋ก์๊ฐ ์ฌ์ ํ ๋ค์ ์์๋๋ ๋ ธ๋์ ์์ฒญ์ ๊ณ์ ๋ณด๋ ๋๋ค. ๋ฐ๋ผ์ ์ธ๋ถ LB ๊ตฌ์ฑ์ ๋ฐ๋ผ ~30์ด์ ์ค๋จ์ด ์์ต๋๋ค.
Swarm์์๋ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํธ์ถํ๊ณ ์
๋ฐ์ดํธ ์ค์ ๋
ธ๋๋ฅผ ์๋น์ค์์ ์ ์ธํ๊ธฐ ์ํด ์๋น์ค ์
๋ฐ์ดํธ ํ๋ก์ธ์ค์ ํํฌ๋ฅผ ๋ฃ์ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. ๋ํ ์
๋ฐ์ดํธ๋๊ธฐ ์ ์ ์ปจํ
์ด๋ ๋ด๋ถ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋๋ก ํธ๋ฆฌ๊ฑฐํ ์ ์์ต๋๋ค(์: " i_am_healthy
" ํ๋๊ทธ๋ฅผ ์ ๊ฑฐํ๊ณ ์ธ๋ถ LB๊ฐ ํด๋ง์ ํตํด ์๋น์ค๊ฐ ์ค๋จ๋จ์ ๋ฐ๊ฒฌํ๋๋ก ํ๊ธฐ ์ํด).
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น?
๋ด ๋ฌธ์ ๋ ๊ทธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํธ์คํธ์์ ์ฌ๋ฌ ๋์ผํ ์๋น์ค(๋๋ ๋์ผํ ํฌํธ๋ฅผ ์ํ๋ ์ฌ๋ฌ ์๋น์ค)๋ฅผ ์คํํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋ด๊ฐ ์์ ํ๋ ํ๋ก์ ํธ์ ํ์ํ ๊ฒ์ ๋๋ค.
์ค์ ๋ก ์ด ์์ ๋ง ์ํํ๋ ํ๋ก์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์ ์์ผ๋ฉฐ ip๊ฐ swarm ๋ด๋ถ์ ์์ ๋ ๋ค๋ฅธ ์๋น์ค์ http ํค๋๋ก ์ ๋ฌํ ์ ์์ต๋๊น?
์ค์ ๋ก ์ด ์์ ๋ง ์ํํ๋ ํ๋ก์ ์๋น์ค๋ฅผ ๋ฐฐํฌํ ์ ์์ผ๋ฉฐ ip๊ฐ swarm ๋ด๋ถ์ ์์ ๋ ๋ค๋ฅธ ์๋น์ค์ http ํค๋๋ก ์ ๋ฌํ ์ ์์ต๋๊น?
์... ๊ทธ๋ฆฌ๊ณ ํด๋น ์ฌ ํ๋ก์ ์๋น์ค๋ฅผ ์ฌ๊ตฌ์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ํ์๊ฐ ์๋ ํ Swarm LB๋ฅผ ์ฌ์ฉํ์ฌ ๊ทธ ๋ค์ ์๋ ๊ตฌ์ฑ ์์๋ฅผ ์ ๋ฐ์ดํธํ์ฌ ๊ฐ๋ ์ค์ง ์๊ฐ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ haproxy๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฃํ๋ https://hub.docker.com/r/decentralize/swarm-tcp-proxy ๋ฅผ ์ง์ ํ์ต๋๋ค.
๊ทธ๋๋ ์ผ์ข ์ ๊ณ ํต. ํ๋ก์๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ๋ค์ดํ์์ด ์์ต๋๋ค.
@ms1111 Nginx ๋์ปค ์ด๋ฏธ์ง๊ฐ ๋ช ์ด ์์ ์์๋๊ณ ์ด ์๋น์ค๊ฐ ์ด ๋ถ๋ถ๋ง ๊ด๋ฆฌํ๋ค๋ฉด ์์ฃผ ์ ๋ฐ์ดํธํ ํ์๊ฐ ์์ต๋๋ค. IMHO ๋จ์ ์ ๊ทธ๋ค์ง ์ค์ํ์ง ์์ง๋ง ๊ทํ์ ๊ฒฝ์ฐ์๋ ๋ค๋ฅผ ์ ์์ต๋๋ค
ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ํ ๋ฌธ์ ๋ ๋ฌด์์ ๋๊น?
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ์ด ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ํธ์คํธ์ ๋
ธ์ถ๋ ํฌํธ๋ฅผ ํน์ IP ์ฃผ์์ ๋ฐ์ธ๋ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์กฐํฉ์
๋๋ค. ๋์ ์ค์ ๋ฐฉ๋ฌธ์์ IP๋ฅผ ํ์๋ก ํ๊ณ PROXY ํ๋กํ ์ฝ์ ์ง์ํ๋ ๋ชจ๋ ๋ด๋ถ ์๋น์ค๋ ์ต์ ์ด ์๋ ํธ์คํธ์ 0.0.0.0
์ ํด๋น ํฌํธ๊ฐ ๋
ธ์ถ๋ฉ๋๋ค.
๋ ๋ค๋ฅธ ํ๋๋ ์ด๋น ์๋ฐฑ ๊ฐ์ ์๋ก์ด ์ฐ๊ฒฐ์ด ์์ ๋ ๋ฌด์ํ ์ ์๋ ์ฑ๋ฅ ์ ํ์
๋๋ค. ๋
ธ์ถ๋ ๋ชจ๋ ํฌํธ๋ ์ค์ ๋ก conntrack
๊ฐ ํ์ํ๊ณ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๋ iptables์ DNAT ๊ท์น์
๋๋ค(k8๋ ์ ์คํ์ง๋ง Swarm์๋ ์ด ๊ธฐ๋ฅ์ด ์์ต๋๋ค. ์ํฉ์ ์
ํ์ํค๋ ์ถ๊ฐ ์์ค์ NAT).
๋์ปค์๊ฒ,
๊นจ์ฐ๋ค! ์ด ๋ฌธ์ ์ ์ผ๋ง๋ ๋ง์ ์ฌ๋๋ค์ด ๊ด๋ จ๋์ด ์๋์ง๋ฅผ ๊ฐ์ํ ๋ ๋ช ๋ฐฑํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค(๊ฐ์ ์์ธ์ ๊ฐ์ง ๋ค๋ฅธ ์ฌ๋๋ค์ด ์์ต๋๋ค). ์ฐ๋ฆฌ๊ฐ ์ป๋ ๊ฒ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ฃจ์ ์ด ์๋ ์ด์ ๊ฐ ๊ฝค ์ฌ๋ฌ ๋ฒ ์ค๋ช ๋์์์๋ ๋ถ๊ตฌํ๊ณ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ๊ณ์ํด์ ๋ฐ๋ณตํ๋ ์ฌ๋๋ค์ ๋๋ค. "ํด๊ฒฐ์ฑ "์ด๋ผ๋ ๋จ์ด๋ ๋์ค์ ํด๊ฒฐ๋ ์ผ์์ ์ธ ๋ฌธ์ ์์ ๋ํ๋ ๋๋ค. ๋ฌธ์ ๊ฐ ์์ฑ๋ ์ง 3๋ ์ด ๋์๊ณ ๊ทธ ๋์ ์๋ต์ "ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค"์ ๋๋ค.
๋ชจ๋ Swarm ์ฌ์ฉ์์๊ฒ,
ํ์ค์ ํฉ์๋ค. ์ฌํ ์ง์ค์ Docker๋ฅผ ํฌํจํ์ฌ ๋๊ตฌ๋ Swarm์ ์ง์ ์ผ๋ก ๊ด์ฌ์ ๊ฐ๊ณ ์์ง ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ชจ๋๊ฐ k8๋ก ์ด๋ํ์ผ๋ฉฐ Swarm์ ๋ํ "์ค์ " ํฌ์๋ ์์ต๋๋ค. ์ด ํ๋ก์ ํธ๋ ์ฌ๋ง์ ๊ธฐ๋ค๋ฆฌ๋ ์๋ช ์ ์ง ์ฅ์น์ ์์ผ๋ฏ๋ก ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง ๋ง์ญ์์ค. ํ๋ช ํ๊ฒ k8๋ก ์ด๋ํ์ญ์์ค.
์ด ๋ฌธ์ ๋ ๋๋ฌด ์ค๋ซ๋์ ๋ฌด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๊ตฌํ๋ ์ผ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฅ ์ซ์๊ฐ์ k8์ ์ฌ์ฉํ์ธ์.
@leojonathanoh k8 ์ด ์ด ํน์ ๋ฌธ์ ๋ฅผ ์ ํํ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ์์ธํ ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น? :)?
๋จ์: ํ๋ก์ ํ๋กํ ์ฝ
@ajatkj ๋งํ๋ฏ์ด. ๋๋ ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ Service
๋ฆฌ์์ค์ ๋ํ ์ธ๋ถ ๋ก๋ ๋ฐธ๋ฐ์ ๋ฐ externalTrafficPolicy: Local
์
๋๋ค. ๊ทธ๊ฒ์ด ๋ด๊ฐ ์ฌ๊ธฐ์ ๋งํ ์ ๋ถ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์ค๋ ๋์์ ๊ตฌ๋
์ ์ทจ์ํฉ๋๋ค.
์ฌ๋๋ค์ ์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์์ ์ ์ํด ์ผํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํฉ๋๊น?
๋๋ ์์ ์ด ๋์ด ์ด๊ฒ์ ๋๋ณด๊ณ ์ถ์ง๋ง ํ์ค์ ๋ด๊ฐ ๋ค๋ฅธ ๋ง์ ์ผ์ ํ๊ณ ์๊ณ ์ด๊ฒ์ ๋์ ์ผ์์ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋น์ ์ ์ผ์์ ์ํฅ์ ์ค๋๊น? ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค!
๋๋ ๋ํ ์ด๊ฒ์ ์ฌ๋ฌ ๋ฒ ๋ณด์๊ณ ์ค์ ๋ก ๋ง๋ฒ์ ๋ฌด๋ฆฌ ๋ผ์ฐํ ์ด ์ฌ์ฉํ๋ IPVS NAT์ ํจ๊ป ์๋ํ๋๋ก ํ๋ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ k8์ด ์ฌ๊ธฐ์์ ํจ์ฌ ๋ ์ ์ฐํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทํ์ ์๊ตฌ์ ๋ ์ ๋ง๋๋ค๋ฉด ๊ทธ๊ฒ์ ์ฌ์ฉํ์ญ์์ค.
๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์๋ค๊ณ ๋ถํํ๊ณ k8๋ก ์ ํํ๊ฒ ๋ค๊ณ ์ํํ๋ ๊ฒ์ ์ค์ ๋ก ๋ฌธ์ ์ถ์ ๊ธฐ์์ ์ค ์๋ฆฌ๊ฐ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋์์ด ๋์ง ์์ต๋๋ค.
์ฌ๋๋ค์ ๊ทธ๋ค์ด ๊ฐ์ง ์ง์์ผ๋ก ๋์ต๋๋ค. ๋ชจ๋ ์ฌ๋์ด ์ฝ๋ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ธฐ์ ์ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ์๋๋ฏ๋ก ํ์ํ ๋ณ๊ฒฝ์ ๋ํ ํฉ์๋ฅผ ๋ฌ์ฑํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์ด์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ง๋ญ๋๋ค.
์ฌ๊ธฐ์ ์๋ ๋๊ตฌ๋ ํน๋ณํ ๋ณ๊ฒฝํด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ์ง ์์ง๋ง @sandys ๊ฐ ํ๋ก์ ํ๋กํ ์ฝ์ ๋ํด ๊ณต๊ฐํ ๋ฌธ์ ์ ์์์ต๋๋ค . ๋ณ๊ฒฝ ์ฌํญ์ด ์๋ฝ๋ ์ง ์ฌ๋ถ๋ฅผ ๋ชจ๋ฅด๋ ์ฌ๋์ด ์ด๋ป๊ฒ ์ด ์์ ์ ์ํํ ์ ์์ต๋๊น?
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ ์์ ํ๋ ๊ฒ์ ๋๋ค. ์์ ์ด ์๋ฃ๋ ํ ์ํคํ ์ฒ๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ ๊ฒ์ผ๋ก ์์ํ์ญ๋๊น? ๋ฌด์์ ๊ฐ์ ธ์ค๋๊ฐ? ์ฐ๋ฆฌ๋ ๋ฌด์์ ์์ต๋๊น?
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ ์์ ํ๋ ๊ฒ์ ๋๋ค. ์์ ์ด ์๋ฃ๋ ํ ์ํคํ ์ฒ๊ฐ ์ด๋ป๊ฒ ๋ณด์ผ ๊ฒ์ผ๋ก ์์ํ์ญ๋๊น? ๋ฌด์์ ๊ฐ์ ธ์ค๋๊ฐ? ์ฐ๋ฆฌ๋ ๋ฌด์์ ์์ต๋๊น?
์ฌ๊ธฐ์์ ์ด๋ฏธ ์๋ฃ: #39465
ํธ์คํธ ๋ชจ๋ ๋คํธ์ํน ์๋
๋๊ธ์ ์์ฑํ๊ธฐ ์ ์ ์ ์ฒด ์ค๋ ๋๋ฅผ ์ฝ์ผ์ญ์์ค.
"ํ๋ก์ ํ๋กํ ์ฝ ์ฌ์ฉ", ์ค์ ๋ก ํฅ๋ฏธ๋ก์ด ๊ฒ์ ๋ฌด์์ธ์ง ์ค๋ช
ํ์ง ์์ต๋๋ค.
์ฝ๋ ๋ฒ ์ด์ค๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์ด์ฉ๋ฉด ์ด๊ฒ์ ์์งํ ์ง๋ฌธ์ด์ง๋ง ์ฒ์๋ถํฐ ์์ค IP๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ด์จ๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ํธ๋ํฝ์ด ๋ฐํ๋์ง ์์ต๋๊น? Swarm ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ์จ ๊ฒฝ์ฐ์๋ ๊ฒ์ดํธ์จ์ด๋ ํธ๋ํฝ์ด ์ด๋์์ ์๋์ง ์ด๋ฏธ ์๊ณ ์๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ๋ฐํํ ์ ์์ต๋๋ค.
์ด์ฉ๋ฉด ์ด๊ฒ์ ์์งํ ์ง๋ฌธ์ด์ง๋ง ์ฒ์๋ถํฐ ์์ค IP๋ฅผ ๋ค์ ์์ฑํด์ผ ํ๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ด์จ๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด๋ฅผ ํตํด ํธ๋ํฝ์ด ๋ฐํ๋์ง ์์ต๋๊น? Swarm ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ์จ ๊ฒฝ์ฐ์๋ ๊ฒ์ดํธ์จ์ด๋ ํธ๋ํฝ์ด ์ด๋์์ ์๋์ง ์ด๋ฏธ ์๊ณ ์๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ๋ฐํํ ์ ์์ต๋๋ค.
์ด๋ค IP์์ ์์ฒญ์ด ์ค๋์ง ์์์ผ ํฉ๋๋ค. ํน์ ์ฌ์ฉ์๊ฐ IP๋ฅผ ์ ํํ๊ธฐ๋ฅผ ์ํ ์ ์์ผ๋ฉฐ ์คํ ์ค์ธ ์๋น์ค ์ธ๋ถ์์ ์ด๋ฅผ ์ํํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒ์ ip๋ง์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค(์ด ์์ ์ ์ฑ ์ ip + request-content => ํ์ฉ/๋นํ์ฉ์ด๊ธฐ ๋๋ฌธ์).
๋๋ ๋ ์์ฃผ, ์ฐ๊ฒฐ์ ๋ก๊น ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๋ด ์๋น์ค ์ฌ์ฉ์ ๋ํด ๊ณ ๊ฐ์๊ฒ ์ฒญ๊ตฌํด์ผ ํ๋ฉฐ ์์ฒญ ์๊ฐ, ๋ฆฌ์์ค ์, ์์ฒญ ์์ค IP๋ฅผ ํ ํ์์ผ๋ก ์ ๊ณตํด์ผ ํฉ๋๋ค. ์ฒญ๊ตฌ๋๋ ๊ฑฐ์ ๋ชจ๋ ์๋น์ค๋ ์ด๋ฌํ ์ข ๋ฅ์ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ ์ง๋ฌธ์ ์๋ชป ์ดํดํ์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋น์ค๊ฐ ์ค์ ์์ค IP๋ฅผ ๋ณด๊ณ ์ถ์ดํ๋ ์ด์ ๋ฅผ ์ดํดํฉ๋๋ค. Docker๊ฐ ์ปจํ ์ด๋์ ๋๋ฌํ๊ธฐ ์ ์ Docker๊ฐ ๋ณ๊ฒฝํ๋ ์ด์ ๋ฅผ ์๊ณ ์ถ์ต๋๋ค.
2019๋ 11์ 1์ผ ์ค์ 1์ 47๋ถ, ์ค์ 1์ 47๋ถ์ Daniele Cruciani [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ด์ฉ๋ฉด ์ด๊ฒ์ ์์งํ ์ง๋ฌธ์ด์ง๋ง ์ ๋ค์ ์์ฑํด์ผํฉ๋๊น?
์์ํ๋ ์์ค ip? ํธ๋ํฝ์ด
์ด์จ๋ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ฒ์ดํธ์จ์ด? ๋ฌด๋ฆฌ์ ๋ถํ๋ฅผ ํตํด ์๋ค ํด๋
๋ฐธ๋ฐ์, ๊ฒ์ดํธ์จ์ด๋ ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํตํด ๋ฐํํ ์ ์์ต๋๋ค.
ํธ๋ํฝ์ด ์ด๋์์ ์๋์ง ์ด๋ฏธ ์๊ณ ์์ต๋๋ค ...์ด๋ค IP์์ ์์ฒญ์ด ์ค๋์ง ์์์ผ ํฉ๋๋ค. ์ด์ฉ๋ฉด
ํน์ ์ฌ์ฉ์๊ฐ ip๋ฅผ ์ ํํ๊ณ ์ถ์ดํ๊ณ ์ธ๋ถ์์ ํ ์ ์์ต๋๋ค.
์๋น์ค ์คํ, ์ฆ traefik์ ์์ฒญ ๋ด์ฉ์ ๋ชจ๋ฆ ๋๋ค.
์ด๋ค ์ฌ์ฉ์๊ฐ ๋ง๋ค๊ณ ์๋์ง ์ง์ ํ ์ ์์ผ๋ฏ๋ก ์ผ๋ถ๋ฅผ ์ ์ธํ ์ ์์ต๋๋ค.
์ฌ์ฉ์์ด๊ณ ip๋ง์ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๊ฒ์ ํ์ฉํฉ๋๋ค(์ด ์ ์ฑ ์
์๋ ip + request-content => ํ์ฉ/๋นํ์ฉ)์ ๋๋ค.๋๋ ๋ ์์ฃผ, ์ฐ๊ฒฐ์ ๋ก๊น ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ๊ณ ๊ฐ์๊ฒ ์ฒญ๊ตฌํด์ผ ํฉ๋๋ค.
๋ด ์๋น์ค ์ฌ์ฉ์ ์ํด ๋ค์ ํ ํ์์ผ๋ก ์ ๊ณตํด์ผ ํฉ๋๋ค.
์์ฒญ, ๋ฆฌ์์ค ์, ์์ฒญ์ ์์ค IP. ๊ฑฐ์ ๋ชจ๋ ์๋น์ค
์ด๋ฌํ ์ข ๋ฅ์ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํฉ๋๋ค.--
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/moby/moby/issues/25526#issuecomment -548711563
@kaysond ๋ฌผ์ด๋ณผ ์ข์ ๊ณณ์ด ์๋๋๋ค.
๊ทํ๋ ๋ณธ์ง์ ์ผ๋ก ๋ ๊ฐ์ง ์ง๋ฌธ์ ํ๊ณ ์์ต๋๋ค.
๋ ๋ค ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋๋ตํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์ด๋ฌํ ์ง๋ฌธ์ ํ๋ ๊ฐ์ฅ ์ข์ ๊ณณ์ด ์ด๋์ธ์ง ๊ถ๊ธํฉ๋๋ค. ์๋ํ๋ฉด ์ ๋ ์ด์ ์ด๋ฌํ ์ ํ์ ์ญ์ฌ์ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ฝ๊ณ ์ฌ๊ธฐ์ ๋ ๋ง์ ๋งฅ๋ฝ์ ์ป์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
@kaysond ๋ฌผ์ด๋ณผ ์ข์ ๊ณณ์ด ์๋๋๋ค.
๊ทํ๋ ๋ณธ์ง์ ์ผ๋ก ๋ ๊ฐ์ง ์ง๋ฌธ์ ํ๊ณ ์์ต๋๋ค.
- IPVS๊ฐ ๊ธฐ์ ์ ์ผ๋ก ์๋ํ๋ ๋ฐฉ์ ๋ฐ
- libnetwork๊ฐ IPVS๋ฅผ ์ ํํ๋ ์ด์
๋ ๋ค ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ๋๋ตํ๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
๋ชจ๋ ์ ๋ฐ์ดํธ?
๋๋ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ๊ธฐ ๋๋ฌธ์ ์ ์ ๋์ ์ด ์ค๋ ๋๋ฅผ ๋ฐ๋ผ ๋ค๋ ์ง๋ง traefik ๋ค์ ๋ฌด๋ฆฌ์์ ๋ช ๊ฐ์
๋ค์์ ์ฌ์ฉํ์ฌ ๋ค์ ์๋ํ์ต๋๋ค.
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
๋ค์ ๋์ปค๋ ๋ค์์ ๊ตฌ์ฑํฉ๋๋ค.
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
๋ค์ ๋์ปค๋ ๋ค์์ ๊ตฌ์ฑํฉ๋๋ค.
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'๋ผ๋ Docker ๋คํธ์ํฌ์ ์์ผ๋ฉฐ Apache ์๋น์ค์๋ ์์ฒด ์คํ ๋คํธ์ํฌ๊ฐ ์์ง๋ง ์ธ๋ถ๋ก 'ingress' ๋คํธ์ํฌ์ ์ผ๋ถ์ด๊ธฐ๋ ํฉ๋๋ค.
https://autoize.com/logging-client-ip-addresses-behind-a-proxy-with-docker/
2020๋ ์ด๊ณ ์์ง ์์ ๋์ง ์์ ์ํฉ์ ๋๋ค. ๋งค์ฐ ์ค์ํ ๊ธฐ๋ฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค
์ด๊ฒ์ ๋งค์ฐ ํ์ํฉ๋๋ค. ์ผ๋ถ ํธ์คํธ ๋ชจ๋๋ ํจ์น์ผ ๋ฟ์ด๋ฉฐ ๋คํธ์ํฌ ๋ค์์ NGINX๋ฅผ ์คํํด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค(์ฌ์ฉ ๋ฐ ์ค์ ์ ๋ฐ๋ผ ๋ค๋ฆ). ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ธ์.
๋๋ ์ด๊ฒ์ ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ๊ณผ ํธ์คํธ๋ฅผ ์ค์ ํ์ง ์๊ณ docker swarm์ ์คํํ๋ ๊ฒ์ ํด๋ผ์ด์ธํธ ์ธก์์ IP๋ฅผ ์ป๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ . ์น ๋ฐ ๋ชจ๋ฐ์ผ ํด๋ผ์ด์ธํธ์ js๋ฅผ ์ฌ์ฉํ๊ณ ์ ๋ขฐํ ์ ์๋ ์์ค์์๋ง ์๋ฝํฉ๋๋ค. ์ . js -> get ip, ๋ฐฑ์๋๋ user-token ๋ฑ์ ํฌํจํ๋ ip๋ง ํ์ฉํฉ๋๋ค. ip๋ ํค๋์ ์ค์ ํ๊ณ https๋ฅผ ํตํด ์ํธํํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์ฑ๋ฅ์ ๋ํด ๋ชจ๋ฅธ๋ค
@Damidara16 ๊ทธ๊ฒ ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ํ๊ณ ์ถ์ง ์์ ์ผ์ ๋๋ค. ๊ทธ๋ ๊ฒ ํ๊ธฐ์๋ ์ ๋ง ๋ถ์ํฉ๋๋ค. ์ํ๋ ๋๋ก ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
์ฌํ๊ฒ๋ ์ด๊ฒ์ ์ฌ์ ํ โโ๋ฏธํด๊ฒฐ ๋ฌธ์ ์ ๋๋ค. ์ฌํ๊ฒ๋ ... ๊ณง ์์ ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
์ฌํ๊ฒ๋ ์ด๊ฒ์ ์ฌ์ ํ โโ๋ฏธํด๊ฒฐ ๋ฌธ์ ์ ๋๋ค. ์ฌํ๊ฒ๋ ... ๊ณง ์์ ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
๊ณง ๋ด์ ์ํด ๋ซํ ๊ฒ ๊ฐ์ต๋๋ค. github์์ ์ด ๊ธฐ๋ฅ์ ์ถ์ํ ์ดํ๋ก ๋ง์ ๋ฒ๊ทธ๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค.
์ฌํ๊ฒ๋ ์ด๊ฒ์ ์ฌ์ ํ โโ๋ฏธํด๊ฒฐ ๋ฌธ์ ์ ๋๋ค. ์ฌํ๊ฒ๋ ... ๊ณง ์์ ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
๊ณง ๋ด์ ์ํด ๋ซํ ๊ฒ ๊ฐ์ต๋๋ค. github์์ ์ด ๊ธฐ๋ฅ์ ์ถ์ํ ์ดํ๋ก ๋ง์ ๋ฒ๊ทธ๋ฅผ ๋ฌด์ํ ์ ์์ต๋๋ค.
์ด๊ฒ์ ๊ธฐ์ ์ ๋ถํ๋ ค์ง ํ์ด ์ปค๋ฎค๋ํฐ๋ฅผ ์ ์ดํ ์ ์๋ ์ต๊ณ ์ ๊ธฐ๋ฅ์ ๋๋ค.
์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๊ฐ๋ฅ์ฑ์ ๊ฑฐ์ ์์ต๋๋ค. AFAIK ๋ชจ๋๊ฐ k8์ด "๊ฒฝ์ฃผ"์์ ์ด๊ฒผ๋ค๊ณ ์๊ฐํ๊ณ ๋ฌด๋ฆฌ๊ฐ ํ์ํ์ง ์์ง๋ง ๋ ๋ค ๊ณต์กดํ๊ณ ์ด๋ค์ ์ฌ์ฉํ๋ ํ์ ํ์์ ๊ธฐ์ ์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ์ฌ์ฉํ ์ ์๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. ๋ฆฝ ์ค์ :)
์ ๋ ๊ด๋ฆฌํ 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
Swarm์ ์คํ ์ค์ธ ๊ฒฝ์ฐ Swarm(๋๋ ๊ณ ์ ๋ฑ)์ ๋ํ ์์ฒญ์ ๋ผ์ด๋ ๋ก๋นํ๊ธฐ ์ํด ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ํ์ํฉ๋๋ค.
์ง๊ธ๊น์ง ์ด ์ํคํ ์ฒ ๊ฒฐ์ ์ "๋๋ฝ๋ ๋ถ๋ถ"์ฒ๋ผ ๋ณด์ผ ์ ์์ง๋ง, ์ด๋ ์ต์ ์ ์ ๊ณตํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์๊ตฌ์ ๋ ์ ํฉํ ๊ฒ์ผ๋ก ๋์ฒดํ๊ธฐ ์ํด ๋ด์ฅ ๊ธฐ๋ฅ์ ๋นํ์ฑํํ ํ์๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ ์ ์ฐ์ฑ์ ์ถ๊ฐํฉ๋๋ค.
์๋น์ค ์ปจํ ์ด๋ ๋ณต์ ๋ณธ์ด ๋ชจ๋ ๋จ์ผ ๋ ธ๋์ ๋ฐฐํฌ๋์ด์ผ ํ๋ _current_ ์ ํ(์: --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. ๋ชจ๋ ์ ์๋น์ค ์ปจํ ์ด๋๊ฐ ์์ฑ ์ ์ฆ์ ์ค์น๋๋๋ก ์ ์ฑ ๋ผ์ฐํ ๊ท์น ์ถ๊ฐ๋ฅผ ์๋ํํฉ๋๋ค.
nsenter --net=/var/run/docker/netns/ingress_sbox iptables -t nat -I POSTROUTING -d $INGRESS_SUBNET -m ipvs --ipvs -j ACCEPT
(๋์ปค๊ฐ ์๋น์ค๋ฅผ ์์ฑํ๋ ๊ณผ์ ์์ SNAT ๊ท์น์ ์ฌ๋ฌ ๋ฒ ๋ค์ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด SNAT ๊ท์น์ ์ญ์ ํ๋ ๋์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ํด๋น ๊ท์น์ ๋์ฒดํ๋ฏ๋ก ๋ ํ๋ ฅ์ ์ ๋๋ค.)
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"
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
๋ฅผ ์๋น์ค๋ฅผ ์์ฑํ๊ธฐ _์ _ _each ๋ฐ ๋ชจ๋ swarm ๋
ธ๋์์ ๋ฃจํธ๋ก ์คํํ์ญ์์ค. (์๋น์ค๊ฐ ์ด๋ฏธ ์์ฑ๋ ๊ฒฝ์ฐ ์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ค์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ธฐ ์ ์ 0์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค.) ๋ฐ๋ชฌ์ iptables๋ฅผ ์ด๊ธฐํํ๊ณ ๋์ปค๊ฐ ์ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋ ๊ฐ์งํ๊ณ ๊ฐ๊ฐ์ ์ ์ปจํ
์ด๋์ ์ ๋ผ์ฐํ
๊ท์น์ ์ ์ฉํฉ๋๋ค.
์์ ๋ด์ฉ์ ๋ค์ค ๋ ธ๋ ๋ฌด๋ฆฌ์์ ์คํ๋๋ ์๋น์ค์ ๋จ์ผ ๋ ธ๋๋ก ์ ํ๋ ๋ค์ค ๋ณต์ ๋ณธ์ ์ฌ์ฉํ์ฌ ํ ์คํธ๋์์ต๋๋ค.
๋ํ ์ฌ๋ฌ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธํ์ผ๋ฉฐ ๊ฐ๊ฐ ํด๋น ๋ ธ๋์ ๋ํด ๋ณ๋์ ๋ ธ๋๋ณ ์๋น์ค๊ฐ ์ ํ๋์ด ์์ง๋ง ๊ฐ ๋ ธ๋๋ณ ์๋น์ค์ ๋ํด ๊ฒ์๋ ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๋ ์ ํ์ด ์์ต๋๋ค. ๊ทธ๋๋ ์ผ๋ถ ์ฌ์ฉ ์ฌ๋ก์์๋ ์๋ํ ์ ์์ต๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๊ฐ๊ฐ์ด ์์ฒด ๊ตฐ์ง์์ ๋จ์ผ ๋ ธ๋๋ก ๊ตฌ์ฑ๋ ๊ฒฝ์ฐ ์ฌ๋ฌ ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํด์ผ ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ๋์ปค ์ค์์ ๋ ์ด์ ๋ ธ๋ ๊ฐ์ ์ปจํ ์ด๋๋ฅผ ๋ฐฐํฌํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ค๋ ํ๊ณ๊ฐ ์์ง๋ง ์ปจํ ์ด๋ ๋ณต์ ๋ณธ ๋ฐ ์๋ช ์ฃผ๊ธฐ ๊ด๋ฆฌ์ ๊ฐ์ ๋์ปค ์๋น์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ ํ ๋ค๋ฅธ ๊ด๋ฆฌ ์ด์ ์ด ์์ ์ ์์ต๋๋ค.
์ถ๊ฐ ๊ฐ๋ฐ์ ํตํด ์ด ๋ฐฉ๋ฒ์ ๋ณ๋์ ๋ ธ๋๋ณ ์๋น์ค๋ ์ค์ ๋ถํ ์์ด ์ฌ๋ฌ ๋ ธ๋๋ก ํ์ฅํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ ๊ฐ์ง ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ์๊ฐํ ์ ์์ต๋๋ค. 1. Docker ๋๋ ๋ง์ถคํ ๋ฐ๋ชฌ์ ๋ฐฐ์ดํ์ฌ ๊ฐ ๋ ธ๋์ ipvsadm ํ ์ด๋ธ์์ ๋ชจ๋ ๋น๋ก์ปฌ IP๋ฅผ ์ ๊ฑฐํฉ๋๋ค. 2. ์ถ๋ ฅ ํจํค์ง๋ฅผ ์ฌ๋ฐ๋ฅธ ๋ ธ๋๋ก ๋ค์ ๋ผ์ฐํ ํ ์ ์๋๋ก ์ ์ฑ ๋ผ์ฐํ ๊ท์น์ ํ์ฅํฉ๋๋ค.
1์ ๊ฒฝ์ฐ ipvsadm -S -n์ ํด๋งํ์ฌ ์๋น์ค์ ์ถ๊ฐ๋ ์ IP๋ฅผ ์ฐพ๊ณ , ๊ฐ๊ฐ์ด ๋ก์ปฌ์ธ์ง ํ์ธํ๊ณ , ๊ทธ๋ ์ง ์์ IP๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ ๋ ธ๋๊ฐ ์ ์ฒด ์๋น์ค ๋ด์์ ์์ฒด ์ปจํ ์ด๋์ ๋ํ ๋ก๋ ๋ฐธ๋ฐ์๋ก ๊ธฐ๋ฅํ ์ ์์ง๋ง ํ ๋ ธ๋์ ๋๋ฌํ๋ ์์ฒญ์ด ๋ค๋ฅธ ๋ ธ๋๋ก ์ ๋ฌ๋ ์ ์์ต๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ ๊ณ ์ ์ IPVS ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ์๋ฒ ์ธํธ ์์ ๋๊ณ ๊ฐ๊ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ๋ด ์ฌ์ฉ ์ฌ๋ก๋ฅผ ํ์คํ ๋ง์กฑ์ํฌ ๊ฒ์ ๋๋ค. , ์ ์ฒด ์๋ฒ๋ฅผ ์์ง ์๊ณ ์ ๋ฐ์ดํธ๋ฅผ ๋กค์์ํ ์ ์์ต๋๋ค.
2์ ๊ฒฝ์ฐ iptables๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ๋ ธ๋์ ingress_sbox iptable(์: ๋ ธ๋ ์์ ๋คํธ์ํฌ IP์ ๋ง์ง๋ง ๋ฐ์ดํธ)์ ๋ ธ๋๋ณ TOS๋ฅผ ํ ๋นํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ปจํ ์ด๋์์ TOS ๊ฐ์ ์ฐ๊ฒฐ ํ์์ ๋งคํํ๊ณ ๋๊ฐ๋ ํจํท์ ๋ํด ์ฐ๊ฒฐ ํ์์์ ๋ฐฉํ๋ฒฝ ํ์๋ก ๋งคํํ๊ณ ๊ฐ ๋ฐฉํ๋ฒฝ ํ์์ ๋ํด ํจํท์ ์๋ ๋ ธ๋๋ก ๋ค์ ๋ผ์ฐํ ํ๋ ๋ค๋ฅธ ๋ผ์ฐํ ํ ์ด๋ธ์ ์ ํํฉ๋๋ค. ์ด์ ๋ํ ๊ท์น์ ์ฝ๊ฐ ํฌ๋ฐํ์ง๋ง 2-16๊ฐ ๋ ธ๋๋ก ํ์ฅํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์์ ๋ด์ฉ์ด ์ ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๋๋ ๋ํ (2)์ ๊ฐ ๊ฒ์ด๋ฉฐ, ์งํ ์ํฉ์ด ๋๋ฉด ์ถ๊ฐ ์ ๋ฐ์ดํธ๋ฅผ ๊ฒ์ํ ๊ฒ์ ๋๋ค.
๋ค์์ SNAT ์์ด๋ ๊ฐ ์ปจํ
์ด๋๊ฐ ์ถ๋ ฅ ํจํท์ ์ฌ๋ฐ๋ฅธ ๋
ธ๋๋ก ๋ค์ ๋ผ์ฐํ
ํ ์ ์๋๋ก ์ ์ฑ
๋ผ์ฐํ
๊ท์น ๋ชจ๋ธ์ ํ์ฅํ๋ ์์ ๋ผ์ฐํ
๋ฐ๋ชฌ ingress-routing-daemon-v2
์ ๊ฐ์ ๋ ๋ฒ์ ์
๋๋ค.
์ด์ ๋ชจ๋ธ์ ๋ฐ๋ผ SNAT ๊ท์น์ ๊ธ์งํ๋ ๊ฒ ์ธ์๋ ์ ๋ชจ๋ธ์๋ IPVS ๋ก๋ ๋ฐธ๋ฐ์ ์๋ํฌ์ธํธ๋ก ์ฌ์ฉํ๋ ค๋ ๊ฐ ๋ ธ๋์ ingress_sbox ๋ค์์คํ์ด์ค์ iptables ๊ท์น์ด ํ์ํฉ๋๋ค(์ผ๋ฐ์ ์ผ๋ก ๊ด๋ฆฌ์ ๋ ธ๋ ๋๋ ๊ทธ ํ์ ์งํฉ ๊ด๋ฆฌ์ ๋ ธ๋), ์์ ๋คํธ์ํฌ์ ๋ชจ๋ ๋ ธ๋๋ก ํฅํ๋ ๋ชจ๋ ํจํท์ ๋ ธ๋๋น TOS ๊ฐ์ ํ ๋นํฉ๋๋ค. (๋ ธ๋์ ์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ IP์ ๋ง์ง๋ง ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.)
TOS ๊ฐ์ ํจํท ๋ด์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ ๋ค์ด์ค๋ ์์ฒญ์ด ์ ๋ฌ๋๊ณ ํจํท์ด ์ ์ก๋ ๋ชฉ์ ์ง ๋ ธ๋์์ ์ฝ์ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋์ ๋ ธ๋์ ์ปจํ ์ด๋์์ ์์ ํจํท์ TOS ๊ฐ์ ๋์ผํ ๊ฐ์ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ ํ์์ ๋งคํํ๋๋ก ์ ๋ ฌํฉ๋๋ค.
์ด์ ๋์ผํ ์ฐ๊ฒฐ์ ๋๊ฐ๋ ํจํท์ด ๋์ผํ ์ฐ๊ฒฐ ํ์๋ฅผ ๊ฐ๊ธฐ ๋๋ฌธ์ ๋๊ฐ๋ ํจํท์ ์ฐ๊ฒฐ ํ์๋ฅผ ๋ค์ ๋์ผํ ๊ฐ์ ์ฌ์ฉํ์ฌ ๋ฐฉํ๋ฒฝ ํ์์ ๋งคํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ผ๋ จ์ ์ ์ฑ ๋ผ์ฐํ ๊ท์น์ ๋ฐฉํ๋ฒฝ ํ์ ๊ฐ์ ๋ฐ๋ผ ๋๊ฐ๋ ํจํท์ ํ์ํ ๋ก๋ ๋ฐธ๋ฐ์ ๋์ ๋ ธ๋๋ก ๋ค์ ๋ผ์ฐํ ํ๋๋ก ์ค๊ณ๋ ๋ค๋ฅธ ๋ผ์ฐํ ํ ์ด๋ธ์ ์ ํํฉ๋๋ค.
์ด์ ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ผ์ ๋ ธ๋์ ๋ํด ๊ฒ์๋ ํฌํธ์ ๋์ฐฉํ๋ฉด ์์ฒญ์ด ์ ๋ฌ๋๋ ์ปจํ ์ด๋(๋์ผ ๋ฐ/๋๋ ๋ค๋ฅธ ๋ ธ๋์ ๊ด๊ณ์์ด)๋ ์์ฒญ์ ํ๋ ํด๋ผ์ด์ธํธ์ ์๋ IP ์ฃผ์๋ฅผ ๋ณด๊ฒ ๋ฉ๋๋ค. ์๋ต์ ์๋ ๋ก๋ ๋ฐธ๋ฐ์ ๋ ธ๋๋ก ๋ค์ ๋ผ์ฐํ ํ ์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋ต์ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ๋ผ์ฐํ ํ ์ ์์ต๋๋ค.
๋ก๋ ๋ฐธ๋ฐ์ ์๋ํฌ์ธํธ๋ก ์ฌ์ฉํ๋ ค๋ swarm ๋
ธ๋์ ๋ชจ๋ ๋
ธ๋์์ ๋ฃจํธ๋ก ingress-routing-daemon-v2
๋ฅผ ์คํํ์ฌ Swarm์ ํน์ ํ INGRESS_NODE_GATEWAY_IPS
๊ฐ์ ์์ฑ ํฉ๋๋ค (์ผ๋ฐ์ ์ผ๋ก ๊ด๋ฆฌ์๋ง ๋
ธ๋ ๋๋ ๊ด๋ฆฌ์ ๋
ธ๋์ ํ์ ์งํฉ) INGRESS_DEFAULT_GATEWAY
๋ํด ํ์๋ ๊ฐ์ ์ ์ํ์ญ์์ค. ์ด ์์
์ ํ ๋ฒ๋ง ์ํํ๊ฑฐ๋ ๋
ธ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ๋๋ง๋ค ์ํํ๋ฉด ๋ฉ๋๋ค. INGRESS_NODE_GATEWAY_IPS
๋ 10.0.0.2 10.0.0.3 10.0.0.4 10.0.0.5
์ ๊ฐ์์ผ ํฉ๋๋ค(์ธ๊ทธ๋ ์ค ๋คํธ์ํฌ์ ๋ํด ์ ์๋ ์๋ธ๋ท ๋ฐ ๋
ธ๋ ์์ ๋ฐ๋ผ ๋ค๋ฆ).
์๋น์ค๋ฅผ ์์ฑํ๊ธฐ _์ ์_ Swarm ๋
ธ๋(๊ด๋ฆฌ์ ๋ฐ ์์
์)์ ๊ฐ ๋ฐ ๋ชจ๋ _ ์์ ๋ฃจํธ๋ก INGRESS_NODE_GATEWAY_IPS="<Node Ingress IP List>" ingress-routing-daemon-v2 --install
๋ฅผ ์คํํ์ญ์์ค. (์๋น์ค๊ฐ ์ด๋ฏธ ์์ฑ๋ ๊ฒฝ์ฐ ์์ ๋ณต์ ๋ณธ์ผ๋ก ๋ค์ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ธฐ ์ ์ 0์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํด์ผ ํฉ๋๋ค.) ๋ฐ๋ชฌ์ iptables๋ฅผ ์ด๊ธฐํํ๊ณ ๋์ปค๊ฐ ์ ์ปจํ
์ด๋๋ฅผ ์์ฑํ ๋ ๊ฐ์งํ๊ณ ๊ฐ๊ฐ์ ์ ์ปจํ
์ด๋์ ์ ๋ผ์ฐํ
๊ท์น์ ์ ์ฉํฉ๋๋ค.
๋ฐ๋ชฌ์ ํ๋์ ํน์ ์๋น์ค๋ก ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ [ -n "$SERVICE" ]
๋ฅผ [ "$SERVICE" = "myservice" ]
.
๊ฐ ๋
ธ๋์์ ingress-routing-daemon-v2 --uninstall
๋ฅผ ์คํํฉ๋๋ค.
ingress-routing-daemon-v2
์คํฌ๋ฆฝํธ๋ 4๋
ธ๋ ์ค์์ ๋ฐฐํฌ๋ ์น ์๋น์ค์ ๋ณต์ ๋ณธ 8๊ฐ๋ก ํ
์คํธ๋์์ต๋๋ค.
์ง์ ๋ ๋ก๋ ๋ฐธ๋ฐ์ฑ๋ ์๋ํฌ์ธํธ ๋ ธ๋ IP๋ก ์ ๋ฌ๋ ์๋น์ค์ ๋ํ Curl ์์ฒญ์ ์ฑ๊ณต์ ์ธ ์๋ต์ ๋ฐํํ์ผ๋ฉฐ ์ปจํ ์ด๋ ๋ก๊ทธ๋ฅผ ์กฐ์ฌํ ๊ฒฐ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ ์์ฒญ์ด Curl ํด๋ผ์ด์ธํธ์ IP์์ ์์๋ ๊ฒ์ผ๋ก ํ์ธํ์์ ๋ณด์ฌ์ค๋๋ค.
TOS ๊ฐ์ 8๋นํธ ์ซ์๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฏ๋ก ์ด ๋ชจ๋ธ์ ์์น์ ์ผ๋ก ์ต๋ 256๊ฐ์ ๋ก๋ ๋ฐธ๋ฐ์ ์๋ํฌ์ธํธ ๋ ธ๋๋ฅผ ์ง์ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ชจ๋ธ์ ๋ชจ๋ ์ปจํ ์ด๋์ ํ๋์ iptables ๋งน๊ธ ๊ท์น + ํ๋์ ์ ์ฑ ๋ผ์ฐํ ๊ท์น + ๊ด๋ฆฌ์ ์๋ํฌ์ธํธ ๋ ธ๋๋น ํ๋์ ์ ์ฑ ๋ผ์ฐํ ํ ์ด๋ธ์ ์ค์นํด์ผ ํ๋ฏ๋ก ์ด๋ฌํ ์๋ํฌ์ธํธ ๋ ธ๋์ ์๊ฐ ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ฝ๊ฐ์ ์ฑ๋ฅ ์ ํ๊ฐ ์์ ์ ์์ต๋๋ค. ์ต์ ํ๋์จ์ด์์ <= 16๊ฐ์ ๋ก๋ ๋ฐธ๋ฐ์ ์๋ํฌ์ธํธ ๋ ธ๋์์๋ ๋์ ๋์ง ์์ ๊ฒ์ ๋๋ค).
๋ก๋ ๋ฐธ๋ฐ์ ์๋ํฌ์ธํธ ๋
ธ๋๋ฅผ ๋ฌด๋ฆฌ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ด๋ฆฌ์ ๋
ธ๋๋ฅผ ๋ก๋ ๋ฐธ๋ฐ์ ์๋ํฌ์ธํธ๋ก ์ฌ์ฉํ๊ธฐ ์์ํ๋ ค๋ ๊ฒฝ์ฐ ๊ธฐ์กด ์ปจํ
์ด๋๊ฐ ํธ๋ํฝ์ ์ ์๋ํฌ์ธํธ ๋
ธ๋๋ก ๋ค์ ๋ผ์ฐํ
ํ ์ ์์ผ๋ฏ๋ก ์ ์คํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. ๋ค์ ์์ํ์ญ์์ค INGRESS_NODE_GATEWAY_IPS="<Node Ingress IP List>" ingress-routing-daemon-v2
์ํ ์
๋ฐ์ดํธ ๋ ๊ฐ์ผ๋ก INGRESS_NODE_GATEWAY_IPS
๋ค์ ์๋ก๋ ๋ฐธ๋ฐ์ ์๋ ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์, ๋ชจ๋ ์ปจํ
์ด๋์ ์ง์์ ์
๋ฐ์ดํธ๋ฅผ ์ํํฉ๋๋ค.
์ ๋ Docker ์ฝ๋๋ฒ ์ด์ค์ ์ต์ํ์ง ์์ง๋ง ingress-routing-daemon-v2
๊ฐ ํ๋ ๊ฒ์ ๋ณผ ์ ์์ผ๋ฉฐ, ์์น์ ์ผ๋ก Docker์์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํํ ์ ์์ง๋ง Docker ํ์ ๋งก๊ธธ ๊ฒ์
๋๋ค. Docker ์ฝ๋์ ์ต์ํ ์ฌ๋์ ์ํ ์ฐ์ต์ผ๋ก ๊ณ ๋ คํ์ญ์์ค.
๋ค์์ ์๋ก์ด 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 ๋ฃจํ๊ฐ ์์์ ์ ์ ์์ต๋๋ค. ์ด๊ฒ์ --uninstall
์ฌ์ฉํ ๊ฐ์
ํธ์ถ ์์ด ์คํฌ๋ฆฝํธ๊ฐ --install
์ฌ๋ฌ ๋ฒ ์ฐ์์ ์ผ๋ก ์คํ๋๋ ๊ฒฝ์ฐ์ ์์ ์กฐ์น์
๋๋ค.
๋ฐ๋ผ์ --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 ํ๋ก์ ํธ์ ๋ํ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๋์ ๊ณผ ๊ฐ์ ์์คํ ๋ด๋ถ์์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ํจ๊ป Docker Swarm์ ์ฌ์ฉํ๊ณ VM์ด ์ฝ 4๊ฐ ์๋ ๋ง์ง๋ง ํ ์คํธ๊ฐ ์๋ํ์ต๋๋ค. ๋๋์ด ์ค์ IP ์ฃผ์๋ฅผ ์ป์ ์ ์์์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์ค๋ซ๋์ ๊ณต๊ฐ๋์ด ๋๋ฌด ๊ธฐ์์ง๋ง ์ด๊ฒ์ด ๋ต์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ์ฌ์ฉํ ๋ฒ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Docker version: 19.03.8
NGINX version: nginx/1.14.2
๊ทํ์ ํผ๋๋ฐฑ์ ๊ธฐ๋ค๋ฆฌ๊ฒ ์ต๋๋ค. ์ ์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๊ฑด๋ฐฐ!
์ธ๋ฐ์ค์ฐฌ.
์ถ์ : ์ค์ IP ์ฃผ์ ๋์ ๋ก๊ทธ์์ "-"๋ฅผ ์ฐพ์ ์ ์๊ธฐ ๋๋ฌธ์ localhost ์ธ๋ถ์ ๋ค๋ฅธ ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ์๋ํด ๋ณด์ญ์์ค. ํ ๋คํธ์ํฌ ์ธ๋ถ์์ ์ธํฐ๋ท์ ํตํด ํ ์คํธํด ๋ณด์ญ์์ค.
๋ณด๋์ค: ๋ํ ์กฐํ ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ IP ์ฃผ์๋ฅผ ์ง๋ฆฌ์ ์์น์ ๋งคํํ๊ณ ์ซ์๋ฅผ ์ธ์ด ์ง๋์ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋๋ต์ '์'์ ๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ์ฐ๋ฆฌ๊ฐ ์ฐพ๊ณ ์๋ ๊ฒ์ ๋๋ค :)
@sebastianfelipe ์ค๋ ์ธ์์ด ์ง๋ ํ ํฐ ์ฃผ์ฅ์ ๋๋ค. ์ด ์ค๋ ๋์์ ํธ์คํธ ๋ชจ๋๋ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ง ์์ต๋๊น?
@sebastianfelipe ์ค๋ ์ธ์์ด ์ง๋ ํ ํฐ ์ฃผ์ฅ์ ๋๋ค. ์ด ์ค๋ ๋์์ ํธ์คํธ ๋ชจ๋๋ ๋ค๋ฅธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ง ์์ต๋๊น?
ํ์คํด. ์ฐ๊ฒฐ๋ ๋ชจ๋ ์๋น์ค์์ ๋คํธ์ํฌ ํธ์คํธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์์ต๋๋ค. ๋ฐฉ๊ธ Digital Ocean ๋ก๋ ๋ฐธ๋ฐ์๋ฅผ ํฌํจํ์ฌ ํ๋ก๋์ ๊ณผ ์ ์ฌํ ํ๊ฒฝ์์ ์ค๋ฒ๋ ์ด ๋คํธ์ํฌ์ ํจ๊ป ์คํ์ ๋ฐฐํฌํ๋๋ฐ ์๋ํ์ต๋๋ค. ๋ด ๋ง์, ๋๋ ์ด๊ฒ๋ณด๋ค ๋ ์ ํ ์คํธ ํ ์ ์์ต๋๋ค. 100% ์คํ์ ๋๋ค.
@sebastianfelipe Digital Ocean ๋ก๋ ๋ฐธ๋ฐ์๊ฐ X-Forwarded-For ํค๋์ ์ฌ์ฉ์์ IP ์ฃผ์๋ฅผ ์ถ๊ฐํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ๋ ๋ฆฝํ Docker Swarm ๋ชจ๋์์ ์ฌ์ฉ์์ IP๋ฅผ ๊ฒ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง ๋ชปํ๋ ์๋ ค์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค.
@beornf ์ ์ ์๋ ค๊ณ ํ๋ค๊ฐ ๋น์ ์ ์๋ฆผ์ ์ฝ์๊ธฐ ๋๋ฌธ์ ์ผ์ด๋์ Digital Ocean ๋ก๋ ๋ฐธ๋ฐ์ ์์ด ์ ๊ทผ์ ์๋ํด์ผ ํ๊ณ ์คํจํ์ต๋๋ค. ๋ง์ต๋๋ค. Digital Ocean์ ๋ก๋ ๋ฐธ๋ฐ์๊ฐ ์ถ๊ฐ๋ ๋ ๋ง๋ฒ์ ์ถ๊ฐํฉ๋๋ค. ์ด๊ฒ์ $http_x_forwarded_for
๋ณ์์ ๋ฐ์ํฉ๋๋ค. Digital Ocean ๋ก๋ ๋ฐธ๋ฐ์๋ Docker Swarm์์ ์ง์ ์ถ๊ฐํ์ง ์์ ์ ๋ณด์ธ ๋ค๋ฅธ NGINX ๋ณ์์ ์ ๋ณด๋ฅผ ์ถ๊ฐํฉ๋๋ค. ์๋ง๋ ์ด๊ฒ์ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํ ์ค์ ์๋ฃจ์
์ ๊ฐ๊ธฐ ์ํด "๋๋ฏธ์ ๊ฐ์" ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ ์ด๋ Digital Ocean ๊ณ ๊ฐ์ ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ๊ธฐ๋ปํ ์ ์์ต๋๋ค.
@beornf @sebastianfelipe ์ปจํ
์คํธ์ ์ถ๊ฐํ์ฌ CloudFlare๋ X-Forwarded-For
๋ ์ถ๊ฐํ๋ฉฐ ๋๋ถ๋ถ ๋ฌด๋ฃ์
๋๋ค.
@beornf @sebastianfelipe ์ปจํ ์คํธ์ ์ถ๊ฐํ์ฌ CloudFlare๋
X-Forwarded-For
๋ ์ถ๊ฐํ๋ฉฐ ๋๋ถ๋ถ ๋ฌด๋ฃ์ ๋๋ค.
์ค์ IP๋ฅผ ์ป๊ธฐ ์ํด ํ์ถ๊ตฌ๊ฐ ํ์ํ ๋ง์ ์ฌ๋๋ค์๊ฒ ์ด๊ฒ์ด ํจ๊ณผ๊ฐ ์์ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Cloudfare๋ ํ๋ก์ ๋๋ DNS๋ก๋ง ์กฐ์ ํ ์ ์์ต๋๋ค. Digital Ocean ๊ณ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ์ ์๋ฒฝํ๊ฒ ๋ง์ต๋๋ค. ์ง๊ธ๊น์ง ๋ ๊นจ๋ํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค. ํ์ง๋ง @beornf์ ๋์ํฉ๋๋ค. ์ด ์์ ์ ์ํํ๋ ค๋ฉด Digital Ocean์ด๋ Cloudfare์ ์์กดํ์ง ์๋ ์ค์ ์๋ฃจ์ ์ด ํ์ํฉ๋๋ค.
๊ฐ์ฌ ํด์!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ํ ์ฌ๋ฌ ํธ์คํธ์์ syslog ๋ฉ์์ง๋ฅผ ์์งํ๊ธฐ ์ํด swarm ๋ชจ๋์์ logstash๋ฅผ ์คํํ๋ ค๊ณ ํ ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. logstash "ํธ์คํธ" ํ๋๋ ์ฐ๊ฒฐ ํธ์คํธ์ ์ค์ IP ๋์ ํญ์ 10.255.0.x๋ก ๋ํ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ก๊ทธ ๋ฉ์์ง๊ฐ ์ด๋ ํธ์คํธ์์ ์ค๋์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ ์์ ํ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค. ์์ค IP ๋ณํ์ ํผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?