1,docker配置ipv6
参考:https://www.cnblogs.com/yangyuliufeng/p/9989812.html
公司计划在2020年前完成IPV6化改造,于是我先行查阅了一些资料了解Docker进行IPv6化的可能性。
预计明年正式开始测试。
方法一、使容器中的服务支持IPv6地址
不为容器中的服务特别分配IPv6地址。只要Docker把外部的IPv6地址端口映射到容器的IPv4端口上,随后访问主机的IPv6相应端口即可。
方法二、为Docker网络分配IPv6地址
(1)Docker daemon默认只支持IPv4地址,通过在运行Docker时增加–ipv6参数可以使其同时支持ipv4和ipv6地址。
(2)此时容器仅获得了本地ipv6地址,如果要获得全局ipv6地址,必须确保机器有至少/80的地址段,通过在运行Docker时增加–fixed-cidr-v6参数为其配置ipv6子网。
该参数会在路由表中添加一条路由,相当于执行了一下命令:
$ ip -6 route add 2001:db8:1::/64 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
随后,所有路由往2001:db8:1::/64的流量都会通过docker0接口路由
(3)除了在运行时添加参数,还可以直接编辑/etc/docker/daemon.json文件,加入以下内容:
{
“ipv6”: true,
“fixed-cidr-v6”: “2001:db8:1::/64”
}
其中2001:db8:1::/64是IPv6地址段。
(4)使用systemctl restart docker命令重启Docker。
(5)使用ifconfig命令查看分配到Docker网络的IPv6地址段
(6)完成了上面的配置之后,无需特意配置,只需正常建立容器,即可为容器分配IPv6地址。可以使用“docker inspect容器名”查看容器的IP地址。
docker0 Link encap:以太网 硬件地址 02:42:51:fd:5e:28
inet 地址:172.17.0.1 广播:172.17.255.255 掩码:255.255.0.0
inet6 地址: 2001:db8:1::1/64 Scope:Global
inet6 地址: fe80::1/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:0 (0.0 B) 发送字节:0 (0.0 B)
2,配置ipv6网桥
参考下面的链接:
https://blog.csdn.net/taiyangdao/article/details/83066009
1.设置Docker Engine支持IPv6
- 启动Docker Engine时即开启对IPv6的支持
默认启动时Docker Engine只支持IPv4。
启动Docker Engine时,指定–ipv6选项即可支持IPv6。
- 对于已经启动的Docker Engine开启对IPv6的支持
配置/etc/docker/daemon.json文件如下。
{
“ipv6”: true,
“fixed-cidr-v6”: “fd00:daad:beee::/48”
}
说明:Docker Engine支持IPv6后,docker0将拥有IPv6的link-local地址fe80::1。但要使得docker0拥有IPv6的global地址,还需要设置–fixed-cidr-v6,以指定Docker容器实例可用的IPv6子网。
执行systemctl reload docker重载Docker Engine的配置文件,Docker Engine将会添加几条新的路由规则到iptables。以上述配置文件为例,Docker Engine将会执行如下等价操作:
$ ip -6 route add fd00:dead:beef::/48 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
如果Docker宿主机的网卡(例如eth0)是通过路由广播获取Docker Engine的IPv6配置参数,则上述配置文件的生效将引起Docker Engine将会执行如下等价操作:
$ ip -6 route add fd00:dead:beef::/48 dev docker0
$ sysctl net.ipv6.conf.default.forwarding=1
$ sysctl net.ipv6.conf.all.forwarding=1
$ sysctl net.ipv6.conf.eth0.accept_ra=2
2 创建Docker网络支持IPv6
事实上,Docker Engine支持IPv6后,Docker Engine默认的bridge网络就支持IPv6,直接使用bridge网络即可(默认即使用bridge网络)。
如果要使用定制网络,则创建网络时docker network create带–ipv6选项,示例如下:
docker network create -d bridge --ipv6 --subnet "fd00:daad:beee:1::/64" --gateway="fd00:daad:beee::1" --subnet=172.18.0.0/16 --gateway=172.18.0.1 myNet
3 创建容器实例支持IPv6
Docker Engine支持IPv6后,创建容器时docker run带–ip6选项即可。
注意,如果docker run命令带–ip或–ip6选项,则其网络不能是默认的bridge网络,否则会抛出如下异常:
user specified IP address is supported on user defined networks only.
必须为创建的容器采用定制网络,才能够通过–ip或–ip6选项指定容器实例的IP。
首先要保证定制网络(如myNet)支持IPv6,然后创建容器时docker run带–ip6选项和–network=myNet即可。
docker run -itd -P --ip=172.18.0.101 --ip6="fd00:daad:beee:1::101" --network=myNet --name=my101 centos:7
参考链接:
https://docs.docker.com/config/daemon/ipv6/
https://docs.docker.com/v17.09/engine/userguide/networking/default_network/ipv6/#how-ipv6-works-on-docker
https://github.com/moby/moby/issues/29443#issuecomment-495808871
————————————————
版权声明:本文为CSDN博主「易生一世」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/taiyangdao/article/details/83066009