[Day 06]: Docker Network-2



容器網路

Docker 預設的網路型態即為透過 Network Namespace創建隔離的容器網路,並透過 Veth Pair (Virtual Ethernet Pair) 打穿 Network Namespace 並與 bridge 相通,再由 bridge 與 host 網卡相互連接

Bridge to Host

其實負責連接容器的 bridge 也是由 host 虛擬產生,並不能直接與 host 中的網卡溝通,那麼又是透過何種方法達成的呢?

答案是 Iptables !

Iptables

Linux 中用於網路過濾的程式
根據指定規則,最 netfilter進行操作
可實現 port之間的映射,使 外部主機可以存取容器的連接埠
也是防火牆的角色

藉由 DNAT(Destination Network Address Translation,目標網路位址轉換)來進行連接埠轉發功能

* docker run -d -P/-p 80:80 nginx

透過啟動指令中的 -P -p 參數,容器內連接埠映射至主機時,docker會在 iptables 新增一筆 以容器網路連到容器 的DNAT,透過Iptables 指令可查看

* iptables -t nat -L -n

若要從 host 中找出其隨機分配給與容器連接的port

可尋找 /proc/sys/net/ipv4/ip_local_port_range檔案中找到

* more /proc/sys/net/ipv4/ip_local_port_range
// 會回傳 映射的連接埠

總結,所以構成 docker 網路的有四個部分

  • Network Namespace
  • Veth Pair
  • Bridge
  • Iptables

以上為 docker 預設的網路模式


而隨著 docker技術的發展,逐漸形成 容器網路模型,CNM(Container Network Model)

此模型規範 Docker 容器使用網路的方式,使許多開發者可根據網路模型定義的結構與介面,進而實現所需的網路驅動程式

模型中主要為三大部分:

  • Sandbox:

    • 容器中隔離網路配置的虛擬環境,對照原本的網路實作,功能類似於原本的 Network Namespace
  • Endpoint:

    • 用來傳遞網路資料的通道入口,依附於沙盒之上,功能類似於原本的 Veth Pair
  • Network:
    • 由一組端點構成的網路,端點之間可相互通訊,功能類似於院本的 Linux Bridge

而一般 docker 還是採用最初的網路設計

* docker network ls

// 此指令可以看到 bridge、host 等詳細資訊

而 bridge 在 host 的網路中對應到的為 docker0 網路
用 ifconfig看會發現它在 host 中所建立的 docker0

* docker network inspect bridge

// 此指令可以看到容器網路中的詳細資訊,例如使用此網路的容器有哪些之類的...

自訂網路

在docker中除了預設網路外,亦可將不同容器組成一個小型模組,使其存取同個網路
並隔絕其他網路的容器

步驟

  1. 先建立一個可供容器進行連接的網路
* docker network create --driver bridge isolated
// --driver 指令網路驅動程式,預設使用bridge
  1. 從網路清單中找出已建好的網路
docker network ls / docker network inspect isolated
  1. 從網路清單中檢查新建網路與預設網路 網段是否一樣

  2. 若不同則成功,此時 連到isolated 網路的容器與連到預設網路的容器彼此相互隔絕無法通訊

容器與外部通訊

若容器享想與外界正常通訊,則要確定Ip forward功能是否正常

啟動 Docker Daemon時,可加入 --ip-forward參數來d控制 docker是否使用IP forward
預設為開啟,但開啟後若仍然無法與外部連線,則必須檢查 host是否有禁用 IP forward

* sudo sysctl net.ipv4.conf.all.forwarding

// 若返回值為0,則代表 host 禁用 IP forward

* sudo systcl net.ipv4.conf.all.forwarding = 1
// 令值為1,則啟用

由於電腦目前出狀況,可能會晚點補上截圖~


參考資料

[1]:
https://ithelp.ithome.com.tw/articles/10205481?sc=pt

#docker #虛擬化技術 #Network







你可能感興趣的文章

記一次軟體工程師面試心得

記一次軟體工程師面試心得

JavaScript 學習筆記 - Object

JavaScript 學習筆記 - Object

Day 120

Day 120






留言討論