手把手教你如何給 Docker 開啓 IPv6 網絡支持

Docker默認是不開啓IPv6支持的,但是我們某些業務往往又需要IPv6的支持,特別是IPv6普及大勢所趨,本文主要介紹的是如何開啓Docker橋接網絡IPv6支持,這篇文章具體操作僅供參考,建議以官方文檔爲準。

本文最重要的先決條件是主機商已經分配給你一個公網IPv6地址段,我們可以通過查看主機控制面板中信息、詢問主機供應商或者直接SSH登錄主機使用命令ip -f inet6 addr show eth0獲取。命令方式獲取的ipv6地址輸出如下:

6: eth0:  mtu 9000 
    inet6 2607:f0d0:1002:51::4/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::230:48ff:fe33:bc33/64 scope link 
       valid_lft forever preferred_lft forever

其中inet6 2607:f0d0:1002:51::4/64 scope global這行指示的IPv6地址是我們需要的目標地址,注意我們這裏選取的是公網IP,也就是後面scope global指示的,大家注意到後續還有一個fe80開頭的IPv6地址,這個後面沒有global,也就是通常意義內網IPv6,本文不使用,當然讀者可以根據實際需要選擇內網IPv6繼續參照下面介紹的步驟完成操作。

1IPv6地址段劃分
Docker可以配置多個虛擬網絡,對於IPv4來說通過形如172.17.0.1/16、172.18.0.1/16、172.19.0.1/16這樣內網私有IP地址段配置多個IPv4虛擬網段,那麼同樣的道理IPv6也建議劃分多個段,如果手動劃分不便,可以通過IPv6 Subnetting Calculator自動劃分,如下圖所示:

比如剛纔的IPv6地址劃分爲4個網段如下:

2607:f0d0:1002:51::/66
2607:f0d0:1002:51:4000::/66
2607:f0d0:1002:51:8000::/66
2607:f0d0:1002:51:c000::/66

2配置默認Docker IPv6
編輯Docker配置文件/etc/docker/daemon.json,如果該文件不存在,請手動建立。配置文件內容如下,如果你已有的配置文件缺少相應的配置項,添加上即可,沒有必要完全覆蓋內容。

{
  "experimental": true,
  "ipv6": true,
  "ip6tables": true,
  "fixed-cidr-v6": "2607:f0d0:1002:51::/66"
}

這裏ip6tables是指由Docker自動配置IPv6的防火牆規則,如果你希望自己手動配置,請改爲false或者移除此項,否則容器將無法連接IPv6網絡;fixed-cidr-v6則是我們劃分的子網段的第一個,這裏僅作示例請讀者根據實際情況修改。

完成配置後請使用systemctl restart docker重啓docker服務生效。完成此步後Docker算是完成對於IPv6的支持了。

3配置Docker Compose的IPv6支持(可選)
這個主要是我編排容器時用的比較多,這裏也記錄一下作爲一個備忘吧。

Docker Compose的配置文件內容關於IPv6部分重點是網絡節配置,如果另外配置網絡的話,必須選擇與默認daemon.json不同的IPv6子網段,例如:

networks:
  example:
    enable_ipv6: true
    driver: bridge
    driver_opts:
      com.docker.network.enable_ipv6: "true"
    ipam:
      config:
       - subnet: 172.23.0.0/16
       - subnet: "2607:f0d0:1002:51:4000::/66"
         gateway:2607:f0d0:1002:51:4000::1

這裏example網絡我們通過配置開啓IPv6支持,其中網絡段配置IPv4是172.23.0.0/16,IPv6選用餘下的第二個網段2607:f0d0:1002:51:4000::/66注意這裏不能和daemon.json配置的IPv6網段一樣。這裏的IP配置同樣是一個示例,讀者請根據實際情況進行修改。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章