部署
平台:virtualBox
工具:vagrant
版本:kubenetense(v1.21.2),docker(20.10.7);脚本:Vagrantfile
工具:kubeadm
集群配置(单网卡,单控):
控制点:192.168.10.111
计算A:192.168.10.112
计算B:192.168.10.113
计算C:192.168.10.114
Docker的网络模式
四个基本模型
-
host模式:容器和宿主机共享Network namespace
场景:宿主机网络插件(例如 ovs网络组件,flannel、weave等K8S网络插件),日志收集,系统监控
-
container模式:容器和另外一个容器共享Network namespace(例如kubernetes中的pod就是多个容器共享一个Network namespace)
-
none模式:容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。(例如没有网络服务或无需联网的应用)
-
bridge模式:默认为该模式(普通docker容器,或者kubenetes的pause容器)
跨主机通信
在docker的默认网络模型下,是不能实现跨节点通信的,所以需要跨主机通信的解决方案
docker原生方案
-
macvlan 需要linux内核支持(Linux内部版本是v3.9–3.19和4.0+)虚拟物理网卡成多个虚拟网卡
实现方法
-
配置网卡为混杂模式
ip link set eth2 promisc on
-
创建macvlan驱动
docker network create -d macvlan --subnet 172.16.100.0/24 --gateway 172.16.100.1 -o parent=eth2 macv
-
创建容器并且指定地址
docker run -itd --name box1 --ip 172.16.100.10 --network macv busybox
-
Tunnel(overlay)方式, 通过在主机之间建立隧道的方式
-
NAT方式,利用宿主机的IP和Iptables来达到容器,主机之间的通信
-
在配置文件daemon.json添加bip字段
[root@DockerA ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://owb6brqx.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "graph": "/tol/docker-data", "bip": "10.0.10.1/24" }
-
添加路由
[root@DockerA ~]# route add -net 10.0.11.0/24 gw 192.168.10.122
第三方方案
-
flannel 是用于组建容器间网络的工具,用于解决跨主机的docker containers之间的连通性问题
-
weave 创建一个虚拟网络,连接部署在多个主机上的Docker容器。对于应用容器来说,Weave建立的网络类似于一个巨大的以太网交换机,所有容器都连接在一起,并且可以轻松地相互访问服务。
-
calico 是一个开源的网络和网络安全解决方案,适用于容器、虚拟机和基于主机的工作负载
Kubenetes中需要解决网络问题
-
容器间通信:同一个Pod内的多个容器间的通信
-
pod间通信:pod间通信k8s要求他们之间的通信必须是所见即所得,即一个pod的IP到另一个pod的IP之间通信不经过任何NAT转换,要直达
-
pod与service通信:即pod IP 与cluster IP之间直接通信,他们其实不在同一个网段,但是他们通过我们本地的IPVS或者iptables规则能实现通信,而且我们知道1.11上的kube-proxy也支持IPVS类型的service,只不过我们以前没有激活过。即pod IP与cluster IP通信是通过系统上已有的iptables或ipvs规则来实现的,这里特别提醒一下ipvs取代不了iptables&#x
-
-