docker 네트워크 설정 방법 요약
7176 단어 docker
1. flannel
CoreOS팀은 etcd 기반 덮어쓰기 네트워크 (overlay network) 를 제작하여 호스트마다 독립된 서브넷 서비스를 제공합니다.Rudder는 집단에서 Docker 용기의 네트워크 설정을 간소화하고 여러 호스트에서 용기 서브넷 충돌 문제를 피하며 포트 매핑 방면의 작업을 대폭 줄일 수 있다.구체적인 코드는 https://github.com/coreos/flannel이고 그 작업 원리는 다음과 같다.
An overlay network is first configured with an IP range and the size of the subnet for each host. For example, one could configure the overlay to use 10.100.0.0/16 and each host to receive a/24 subnet. Host A could then receive 10.100.5.0/24 and host B could get 10.100.18.0/24. flannel uses etcd to maintain a mapping between allocated subnets and real host IP addresses. For the data path, flannel uses UDP to encapsulate IP datagrams to transmit them to the remote host. We chose UDP as the transport protocol for its ease of passing through firewalls. For example, AWS Classic cannot be configured to pass IPoIP or GRE traffic as its security groups only support TCP/UDP/ICMP.(https://coreos.com/blog/introducing-rudder/)
2. Kubernetes
Kubernetes는 Google이 내놓은 용기 관리 및 편성을 위한 소스 오픈 프로젝트로 용기 호스트 클러스터 내에서 용기화 응용 프로그램의 배치를 쉽게 관리, 모니터링, 제어할 수 있습니다.Kubernete는 SDN과 매우 비슷한 특수한 네트워크화 개념을 가지고 있다. 하나의 서비스 에이전트를 통해 임의의 용기에 분배할 수 있는 IP 주소를 만들고, 전방의 응용 프로그램이나 이 서비스를 사용하는 사용자는 이 IP 주소를 통해서만 서비스를 호출할 수 있으며, 그의 세부 사항에 신경 쓸 필요가 없다.이런 에이전트 방안은 약간 SDN의 맛이 있지만 전형적인 SDN의 2-3층 메커니즘 위에 세워진 것은 아니다.
Kubernetes uses a proxying method, whereby a particular service — defined as a query across containers — gets its own IP address. Behind that address could be hordes of containers that all provide the same service — but on the front end, the application or user tapping that service just uses the one IP address.
This means the number of containers running a service can grow or shrink as necessary, and no customer or application tapping the service has to care. Imagine if that service were a mobile network back-end process, for instance; during traffic surges, more containers running the process could be added, and they could be deleted once traffic returned to normal. Discovery of the specific containers running the service is handled in the background, as is the load balancing among those containers. Without the proxying, you could add more containers, but you’d have to tell users and applications about it; Google’s method eliminates that need for configuration. ( https://www.sdncentral.com/news/docker-kubernetes-containers-open-sdn-possibilities/2014/07/ )
3. 서로 다른 숙박 호스트의 모든 용기에 같은 네트워크 구간의 IP 주소를 설정하기 위해 설정하는 방법은 http://www.cnblogs.com/feisky/p/4063162.html이다. 이 글은 Linuxbridge를 바탕으로 한 것이다. 물론 OpenvSwitch+GRE로 숙박 호스트 간의 연결을 구축할 수도 있다.
# From http://goldmann.pl/blog/2014/01/21/connecting-docker-containers-on-multiple-hosts/
# Edit this variable: the 'other' host.
REMOTE_IP=188.226.138.185
# Edit this variable: the bridge address on 'this' host.
BRIDGE_ADDRESS=172.16.42.1/24
# Name of the bridge (should match/etc/default/docker).
BRIDGE_NAME=docker0
# bridges
# Deactivate the docker0 bridge
ip link set $BRIDGE_NAME down
# Remove the docker0 bridge
brctl delbr $BRIDGE_NAME
# Delete the Open vSwitch bridge
ovs-vsctl del-br br0
# Add the docker0 bridge
brctl addbr $BRIDGE_NAME
# Set up the IP for the docker0 bridge
ip a add $BRIDGE_ADDRESS dev $BRIDGE_NAME
# Activate the bridge
ip link set $BRIDGE_NAME up
# Add the br0 Open vSwitch bridge
ovs-vsctl add-br br0
# Create the tunnel to the other host and attach it to the
# br0 bridge
ovs-vsctl add-port br0 gre0 -- set interface gre0 type=gre options:remote_ip=$REMOTE_IP
# Add the br0 bridge to docker0 bridge
brctl addif $BRIDGE_NAME br0
# iptables rules
# Enable NAT
iptables -t nat -A POSTROUTING -s 172.16.42.0/24 ! -d 172.16.42.0/24 -j MASQUERADE
# Accept incoming packets for existing connections
iptables -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Accept all non-intercontainer outgoing packets
iptables -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
# By default allow all outgoing traffic
iptables -A FORWARD -i docker0 -o docker0 -j ACCEPT
# Restart Docker daemon to use the new BRIDGE_NAME
service docker restart
4.weave를 사용하여 용기에 IP 설정 (사용방법은 http://www.cnblogs.com/feisky/p/4093717.html 참조),weave의 특성은
5. 호스트 docker의 기본 가상 구역을 수정한 다음에 각 호스트에 각각 상대방의 docker 구역을 루트 테이블에 추가하고 IPtables에 맞추면 docker 용기 과장 호스트 통신을 실현할 수 있다.구성 방법은 다음과 같습니다.
가상 머신 2대 설치
VM docker0 세그먼트 변경, v1 172.17.1.1/24, v2 172.17.2.1/24
#v1
sudo ifconfig docker0 172.17.1.1 netmask 255.255.255.0
sudo bash -c 'echo DOCKER_OPTS="-B=docker0" >> /etc/default/docker'
sudo service docker restart
# v2
sudo ifconfig docker0 172.17.2.1 netmask 255.255.255.0
sudo bash -c 'echo DOCKER_OPTS="-B=docker0" >> /etc/default/docker'
sudo service docker restart
그리고 v1에서 v2의 docker 가상 구역을 루트 테이블에 추가하고 v2에서 v1의 docker 가상 구역을 자신의 루트 테이블에 추가합니다
# v1 192.168.124.51
sudo route add -net 172.17.2.0 netmask 255.255.255.0 gw 192.168.124.52
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -s 172.17.1.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
# v2 192.168.124.52
sudo route add -net 172.17.1.0 netmask 255.255.255.0 gw 192.168.124.51
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -s 172.17.2.0/24 ! -d 172.17.0.0/16 -j MASQUERADE
이로써 두 가상 기기의 docker 용기가 서로 접근할 수 있게 되었다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swarm의 도커 비밀이 게시물에서는 Redis를 사용한 실제 시나리오 예제를 제공하여 사용 방법을 보여주고자 합니다. Docker 기술에 대한 기본 지식 Docker Swarm 오케스트레이터에 대한 기본 지식 "Docker Swarm ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.