运维课第 15 周作业
1、总结 Underlay 和 Overlay 网络的区别
2、在 kubernetes 集群实现 underlay 网络;
3、总结网络组件 flannel vxlan 模式的网络通信流程;
4、总结网络组件 calico IPIP 模式的网络通信流程;
扩展:
1、基于二进制实现高可用的 K8S 集群环境
总结 Underlay 和 Overlay 网络的区别
网络有基于二层的三层的情况,其中二层是经过 mac 地址交换的,三层是通过 ip 地址路由的。通常分为 underlay 和 overlay 两种情况。
underlay 网络
underlay 的网络是传统的 IT 基础网络设施,比如直接使用交换机,路由器等,依赖于物理网络通信。优点是性能比较好,缺点是依赖物理网络。常见的方案有 mac vlan,ip vlan 和直接路由等。
mac vlan: 同一个以太网,有多个子接口,每个接口都有独立 mac@和 IP@。
ip vlan:和 mac vlan 类似,但每个虚拟接口共享 mac@。
网络包的流向是:
container eth0->veth->kernel->eth0。收包是相反的。
overlay 网络
overlay 网络叫叠加网络。是在原网络基础上加上新的 header。优点是对网络兼容性好,跨子网通信方便。缺点是封装和解封有额外的开销。一般通过 UDP/VXLAN/host-gw 等封装,UDP 性能不够好。host-gw 比较新,可以加解密,会消耗一部分 CPU,目前使用不多。当下使用最多的是 vxlan,vxlan 扩展了 vlan 的个数,默认 vlan 只有 12 位,最多是 4096 个,当使用 VXLAN 后,可以扩展为 2^24 个不同的配置。
overlay 网络一般有 flannel 和 calico,通常来说 calico 性能更好。阿里的 hybrid 也支持 overlay 网络。
网络包的流向是:
container eth0->veth->cni0->flannel.1->kernel->eth0。其中 kernel 和 eth0 是都会经过的,如果通过 DPDK,不经过 kernel,直接用户态发出去。收包是反过来的。
hybridnet既支持 overlay,也支持 underlay。
在 kubernetes 集群实现 underlay 网络
virtualbox 选择 1 个桥接网卡,接到路由器访问外网。3 个 host-only 的网络,用于内部通信。
virtualbox 的 host interface 配置为:
这里的 172.31.0.2 可以给后面的 underlay 网络,作为外部网关地址。
netplan 配置为(master 的例子):
node1 的例子:
配置好之后,网络如下:
其中 192.168.31.101 是连到小米路由器的。
api server 用 192.168.6.201 地址。master 和 node 的布局采用杰哥的地址。
确保主机可以 ping 通这 2 个 IP。
启动 master:
首先 pull image,注意这里需要 pause 3.6 和 3.7 的 2 个版本 image 才行。
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.24.10
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.
6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.5.6-0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.8.6
然后启动 master:
kubeadm init --apiserver-advertise-address=172.31.7.101 --apiserver-bind-port=6443 --kubernetes-version=v1.24.10 --pod-network-cidr=10.200.0.0/16 --service-cidr=172.31.5.0/24 --service-dns-domain=cluster.local --image-repository=registry.cnhangzhou.aliyuncs.com/google_containers --cri-socket unix:///var/run/cri-dockerd.sock
这里的 service-cidr 是 underlay 的网络,也就是用宿主机的网络。
hybridnet
helm install hybridnet hybridnet/hybridnet -n kube-system --set init.cidr=10.200.0.0/16
注意这里的 cidr 是 etcd 网段的地址。
Warning FailedScheduling 4m3s (x7 over 34m) default-scheduler 0/3 nodes are available: 3 node(s) didn't match Pod's node affinity/selector. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling.
这个错误提示表示需要加上 label 才行。
kubectl label node k8s-node01 node-role.kubernetes.io/master=
kubectl label node k8s-node02 node-role.kubernetes.io/master=
可以看到,当 node03 没有标记时,无法被调度过去,这时候的 ROLES 是 none,改为 master 就可以调度了。
当前配置,node1-3 都支持 underlay 网络。
配置 underlay 网络
k create ns myserver
打标签,建 pod 时,写 node selector。
k label node k8s-node01 network=underlay-nethost
k apply -f underlay-cases-files/1.create-underlay-network.yaml
下面的 underlay 网络就是自己建的网络了。V4TOTAL 表示总共有 254 个 IPv4 的地址。
可以在 yaml 里选择配置为 underlay 的模式。
3.tomcat-app1-underlay.yaml 里
annotations: #使用 Underlay 或者 Overlay 网络
networking.alibaba.com/network-type: Underlay
然后创建 tomcat 的 pod。
目前 pod 建不起来,有点问题。
这个 443 的端口没有建,但是 ip 是有的。
ip 地址 172.31.5.1。
flannel vxlan 模式的通信流程
网络数据的流向是:
发送:pod eth0->host veth->host cni0->host vxlan(flannel.1)->host eth0
接收:host eth0->host flannel.1-> host cni0 -> host veth0 -> pod eth0
calico IPIP 模式的通信流程
网络数据的流向是:
发送:pod eth0->host cali -> host tun0 -> host eth0
接收:host eth0->host tun0 ->host cali -> pod eth0
基于二进制实现高可用的 K8S 集群环境
可以使用 ezdown 的来部署 k8s 集群。
主机 CPU 有限,暂时无法部署起来,未来需要可以参考:https://github.com/easzlab/kubeasz/blob/master/ezdown
评论