Kubernetes网络部署方案

现在网络上流传很多kubernetes的部署和搭建的文档,其中比较出名就是kubernetes the hard way
还有基于这个翻译和衍生的版本follow-me-install-kubernetes-cluster
这两篇文章带我走过了kubernetes的搭建的童年,我第一搭建成功就是抄袭的张俊的follow-me-install-kubernetes-cluster,然后随着新版的发展,越来越多的配置参数存在各种各样的问题,最大的问题是在cni产生后,两篇文章的配置参数和系统默认或者cni配置参数有稍微的冲突导致很多人在利用cni做网络方案的时候会出现很多问题,这篇文章目的第一是向两位前辈致敬,第二是共享下在flanneld和calico部署过程中遇到挫折和问题。
为啥只说明以下两种方案的部署模式,因为其他网络方案不争气。
flanneld [systemd部署模式]
flannel部署相对来说简单容易、坑少,直接上配置。
flannel.service
[unit]description=flanneld overlay address etcd agentafter=network.targetafter=network-online.targetwants=network-online.targetbefore=docker.service[service]type=notifyexecstart=/usr/local/bin/flanneld -etcd-cafile=/etc/kubernetes/ssl/ca.pem -etcd-certfile=/etc/kubernetes/ssl/kubernetes.pem -etcd-keyfile=/etc/kubernetes/ssl/kubernetes-key.pem -etcd-endpoints=https://{etcd ip}:2379 -iface=ens3 --ip-masqrestart=on-failure[install]wantedby=multi-user.targetrequiredby=docker.service
记住一定要提前在etcd把你的backend写进去。
host-gw的配置:
etcdctl --endpoints=https://{etcd-ip}:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem set /coreos.com/network/config '{network:'10.200.0.0/16', subnetlen: 24, backend: {type:host-gw}}'
vxlan的配置:
etcdctl --endpoints=https://{etcd-ip}:2379 --ca-file=/etc/kubernetes/ssl/ca.pem --cert-file=/etc/kubernetes/ssl/kubernetes.pem --key-file=/etc/kubernetes/ssl/kubernetes-key.pem set /coreos.com/network/config '{network:'10.200.0.0/16', subnetlen: 24, backend: {type:vxlan}}'
然后可以开始你的表演,如果你创建2个pod,互ping一下发现不通,你部署dns服务,一直报错no route to host(就是kubernetes那个svc对应的ip),恭喜你,你下面要做的就是:
iptables -p forward accept
因为1.13版本以上docker好似在iptable写了这么一条策略:
iptables -p forward drop
到此为止你起来flanneld就可以开始你的kubernetes之旅,当然现在好似还不行记得在/etc/cni/net.d下写一个.conf结尾的文件,当然叫什么名字无所谓。etc:
10-flanneld-cni.conf
{ name: cbr0, type: flannel, delegate: { isdefaultgateway: true }}
然后继续你的表演就可以了。
calico [systemd部署模式]
其实吧,calico在kubernetes网络方案用用的比flanneld多,calico懂得玩伸缩,技术也比较牛,在很多物理设备不开启bgp的情况下做了折中,用的ip-ip虽然性能有点损失,在云上被大面积使用。flanneld的host-gw模式性能虽然不错,但是只能在2层玩下,过了二层路由被重写就gg了。
开始表演ip-ip模式。
第一步创建ippool,pool就是所有calico分配ip的池子,其实就是kubernetes的pool,不过calico分配出来是/26的ip,一下少很多。其实我觉得/26比较符合机器配置的现状至少,不会造成ip的浪费。
设置pool
calicoctl apply -f - << eofapiversion: v1kind: ippoolmetadata:cidr: 10.200.0.0/16spec:ipip:enabled: truemode: cross-subnetnat-outgoing: trueeof
部署calico-node(其实就2个文件)
calico.env
etcd_endpoints=https://{etcd1}:2379,https://{etcd2}:2379etcd_ca_file=/etc/kubernetes/ssl/ca.pemetcd_cert_file=/etc/kubernetes/ssl/kubernetes.pemetcd_key_file=/etc/kubernetes/ssl/kubernetes-key.pemcalico_nodename=node46calico_no_default_pools=calico_ip={host-ip}calico_ip6=calico_as=calico_libnetwork_enabled=truecalico_networking_backend=bird
calico.service[unit]description=calico-nodeafter=docker.servicerequires=docker.service[service]environmentfile=/etc/calico/calico.envexecstartpre=-/usr/bin/docker rm -f calico-nodeexecstart=/usr/bin/docker run --net=host --privileged --name=calico-node -e nodename=${calico_nodename} -e ip=${calico_ip} -e ip6=${calico_ip6} -e calico_networking_backend=${calico_networking_backend} -e calico_startup_loglevel=debug -e no_default_pools=${calico_no_default_pools} -e felix_defaultendpointtohostaction=accept -e calico_libnetwork_enabled=${calico_libnetwork_enabled} -e etcd_endpoints=${etcd_endpoints} -e etcd_ca_cert_file=/etc/kubernetes/ssl/ca.pem -e etcd_cert_file=/etc/kubernetes/ssl/kubernetes.pem -e etcd_key_file=/etc/kubernetes/ssl/kubernetes-key.pem -v /var/log/calico:/var/log/calico -v /run/docker/plugins:/run/docker/plugins -v /lib/modules:/lib/modules -v /var/run/calico:/var/run/calico -v /etc/kubernetes/ssl/:/etc/kubernetes/ssl/:ro quay.io/calico/node:v2.4.0execstop=-/usr/bin/docker stop calico-node[install]wantedby=multi-user.target
cni配置文件(/etc/cni/net.d下随便写一个.conf结尾的文件)
calico.conf
{name: k8s-pod-network,cniversion: 0.1.0,type: calico,etcd_endpoints: https://{etcd1},https://{etcd2}:2379,etcd_key_file: /etc/kubernetes/ssl/kubernetes-key.pem,etcd_cert_file: /etc/kubernetes/ssl/kubernetes.pem,etcd_ca_cert_file: /etc/kubernetes/ssl/ca.pem,log_level: info,ipam: { type: calico-ipam },kubernetes: { kubeconfig: /etc/kubernetes/kube-proxy.kubeconfig}}
然后你就可以装逼了,记得把cni的组件calico-ipam放到/opt/cni/bin。
rr部署模式
其实就是在以上的基础上多部署一个rr容器。
docker run --privileged --net=host -d -e ip={host-ip} -e etcd_endpoints=https://{etcd}:2379 -e etcd_ca_cert_file=/etc/kubernetes/ssl/ca.pem -e etcd_cert_file=/etc/kubernetes/ssl/kubernetes.pem -e etcd_key_file=/etc/kubernetes/ssl/kubernetes-key.pem -v /etc/kubernetes/ssl:/etc/kubernetes/ssl:ro calico/routereflector:v0.4.0
然后把这个ip写到etcd里。
curl --cacert /etc/kubernetes/ssl/ca.pem --cert /etc/kubernetes/ssl/kubernetes.pem --key /etc/kubernetes/ssl/kubernetes-key.pem -l https://{etcd}:2379/v2/keys/calico/bgp/v1/rr_v4/{host-ip} -xput -d value={ip:{host-ip},cluster_id:1.0.0.2}
然后就是创建一个全局的bgppeer。
cat << eof | calicoctl delete -f -apiversion: v1kind: bgppeermetadata:peerip: {host-ip}scope: globalspec:asnumber: 64567eof
关闭 node-to-node mesh。
calicoctl config set nodetonodemesh off
重新启动你所有的calico-node。
附一份calicoctl的配置文件(在/etc/calico下)
calicoctl.cfg
apiversion: v1kind: calicoapiconfigmetadata:spec:etcdendpoints: https://{etcd}:2379etcdkeyfile: /etc/kubernetes/ssl/kubernetes-key.pemetcdcertfile: /etc/kubernetes/ssl/kubernetes.pemetcdcacertfile: /etc/kubernetes/ssl/ca.pem
开始你的装逼之旅吧。
关于calico-bgp有硬件的自己尝试吧。
附一份非标准的kube-proxy.service
[unit]description=kubernetes kube proxydocumentation=https://github.com/googlecloudplatform/kubernetes[service]execstart=/usr/local/bin/kube-proxy --hostname-override={host-ip} --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig --v=2restart=on-failurerestartsec=5[install]wantedby=multi-user.target

物联网还是“勿联网”?对物联网安全隐患的反思
洋巨头鏖战智能家居领域
教你如何测试电脑显示器
基于赛灵思Spartan-3A的视频分析
从汗液看出健康
Kubernetes网络部署方案
小米电视2018年Q4出货量再度称王 一举斩获全国冠军
2012年影响科技界的十大历史性产品
关于化学废料焚烧的介绍和应用
fpga实现加法和减法运算的方法是什么
未来5年数字经济中的关键技术发展趋势
高精度酒精检测仪设计方案
Bose在South Southwest(SXSW)推出AR音频平台,将允许用户用眼镜听到声音
荣联科技集团获“2022中国数字生态最具号召力奖”
三星Galaxy A72 5G泄露了照片
谷歌疯狂速度推进AI革命,让人们在深度学习系统中实现民主化
富士康高管与美国威斯康星州领导人面洽谈建厂计划
科华数据:看得见的智慧金融,看不见的数据中心
台湾IC设计产业未来或陷入失落10年
Mini LED明年在苹果产品渗透率提升至30%左右