1-5 容器网络

最后更新于:2022-04-02 07:36:58

#### 网络基础 ``` # 网络模型 TCP/IP 5层模型 ISO/OSI 7层模型 ``` #### 模拟Docker建立命名空间 ``` # 查看当前命令空间 ip netns list # 创建命名空间 ip netns add test1 ip netns add test2 # 创建网卡并绑定 ip link add veth-test1 type veth peer name veth-test2 # 将网卡绑定到命名空间 ip link set veth-test1 netns test1 ip link set veth-test2 netns test2 # 启动网卡 ip netns exec test1 ip link set dev veth-test1 up ip netns exec test2 ip link set dev veth-test2 up # 设置IP地址 ip netns exec test2 ip addr ad 192.168.1.2/24 dev veth-test2 ip netns exec test1 ip addr add 192.168.1.1/24 dev veth-test1 # 查看IP地址 ip netns exec test2 ip a ip netns exec test1 ip a # 测试联通 ip netns exec test2 ping 192.168.1.1 ip netns exec test1 ping 192.168.1.2 ``` #### 容器网络 容器间通过将网络空间都连接到docker0进行通信 容器访问外网通过NAT方式,由iptables的默认网关实现 ``` # 命名空间添加默认网关 ip netns exec 27383 route add default gw 192.168.1.1 # 宿主机添加默认路由 sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o em1 -j MASQUERADE ``` ![](index_files/df439389-515c-4850-b0b9-29efd5dd6067.jpg) #### docker --link 容器间通过名字通信 ``` docker run -d --name test2 --link test1 centos:7 /bin/sh -c "while true;do sleep 3600; done" ``` #### docker --link原理 ``` # 增加 docker network create -d bridge my-bridge # 查看 docker network ls # 创建网络时指定 docker network create -d bridge my-network # 让容器连接到这个网络 docker network connect my-network test2 docker network connect my-network test3 ``` #### 端口映射 ``` # 第一个80是docker端口,第二个80是宿主机端口 docker run -d --name web -p 80:80 nginx ``` #### Overlay网络(多主机间容器互联) ``` # 需结合Etcd服务,实现数据通信,启动服务时进行注册 # 后续集成K8s后,自动实现 ```
';