容器网络

一、Docker网络模型


image

二、如何与外界通信


Docker使用iptables实现网络通信

1. 外部访问容器

image

- 外界地址经过DNAT转换成能到达docker0的容器地址
[root@localhost ~]# iptables -t nat  -vnL DOCKER
Chain DOCKER (2 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  docker0 *       0.0.0.0/0            0.0.0.0/0           
    2   104 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8080 to:172.17.0.3:8080
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:3306 to:172.17.0.4:3306
    0     0 DNAT       tcp  --  !docker0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:6379 to:172.17.0.5:6379
[root@localhost ~]# ip route
default via 192.168.2.1 dev ens33 proto static metric 100 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 
192.168.2.0/24 dev ens33 proto kernel scope link src 192.168.2.62 metric 100 
- 通过对应的veth pair把数据流向隔离的容器网络
[root@localhost ~]# docker exec -it 8477d8fd9c51 bash
root@8477d8fd9c51:/usr/local/tomcat# cat /sys/class/net/eth0/iflink
17
[root@localhost ~]# ip addr|grep "17:"
17: veth74baa09@if16: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default 
2.容器访问外部
- 容器地址(172.17.0.3)通过eth0到达docker0(veth pair解决网络隔离),172.17.0.3经SDNT转换成宿主机地址(可通过eth0流到外部)

image

[root@localhost ~]# iptables -t nat -vnL POSTROUTING|grep 8080
    0     0 MASQUERADE  tcp  --  *      *       172.17.0.3           172.17.0.3           tcp dpt:8080
posted @ 2022-02-20 10:46  曾某某scau  阅读(73)  评论(0)    收藏  举报