docker 호스트 간 네트워크 통신 실현
2대의 docker 호스트의 용기와 용기 사이, 용기와 호스트 사이의 네트워크 호환을 실현하다
자원 준비
2대의 서버를 각각 실행합니다: mkdir -p/opt/flannel/{bin,conf}
구현 시작
flanneld와 mk-docker-opts를sh/opt/flannel/bin 디렉터리로 복사
etcdctl 도구를 가진 기계에서 다음 명령을 실행합니다. 이 백엔드는 vxlan을 사용하고 기본 UDP를 사용하지 않습니다.
etcdctl --endpoints "http:// etcd ip:2379" set /xieyanke/network/config '{"NetWork":"10.0.0.0/16", "SubnetMin": "10.0.1.0", "SubnetMax": "10.0.10.0", "Backend": {"Type": "vxlan"}}'
ETCD_ENDPOINTS="http:// etcd1 IP:2379,http:// etcd2 IP:2379,http:// etcd3 IP:2379"
ETCD_PREFIX="/xieyanke/network"
vi/usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service
[Service]
EnvironmentFile=/opt/flannel/conf/flanneld.conf
User=root
ExecStart=/opt/flannel/bin/flanneld \
--etcd-endpoints=${ETCD_ENDPOINTS} \
--etcd-prefix=${ETCD_PREFIX} \
--iface= IP \
--ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
systemctl daemon-reload systemctl start flanneld
:/opt/flannel/bin/mk-docker-opts.sh -i
생성된 매개변수는/run/dockeropts.env 기록
vi/usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
EnvironmentFile=/run/docker_opts.env
ExecStart=/usr/bin/dockerd \
$DOCKER_OPT_BIP \
$DOCKER_OPT_IPMASQ \
$DOCKER_OPT_MTU
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
실제 테스트
docker 호스트 2대에 용기 2개 만들기
192.168.9.1# docker run -it busybox sh
# IP
/ # cat /etc/hosts
10.0.2.2 44ceb6a97c90
192.168.9.2# docker run -it busybox sh
# IP
/ # cat /etc/hosts
10.0.3.2 f914961f8d3c
각각 용기 10.0.2.2와 10.0.3.2에서 ping 192.168.9.1, 192.168.9.2, 10.0.2.2, 10.0.3.2를 실행하고 네트워크가 서로 통하는지 확인한다. 만약에 ping이 성공하지 않으면 호스트 방화벽이 열렸다는 것을 표시하고 수동으로 방화벽을 닫으면 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.