kubernetes需要使用第三方的网络插件来实现kubernetes的网络功能,这样一来,安装网络插件成为必要前提;第三方网络插件有多种,常用的有flanneld、calico和cannel(flanneld+calico),不同的网络组件,都提供基本的网络功能,为各个Node节点提供IP网络等。
Flannel插件支持三种通信模式如下
cd /data/k8s/work
source /data/k8s/bin/env.sh
etcdctl \
--endpoints=${ETCD_ENDPOINTS} \
--ca-file=/data/k8s/work/ca.pem \
--cert-file=/data/k8s/work/flanneld.pem \
--key-file=/data/k8s/work/flanneld-key.pem \
mk ${FLANNEL_ETCD_PREFIX}/config '{"Network":"'${CLUSTER_CIDR}'", "SubnetLen": 21, "Backend": {"Type": "vxlan", "DirectRouting": true}}'
这里我们使用VxLan+DirectRouting的模式进行通信,Node节点网段相同,直接路由,节点网段不同,使用Vxlan进行封装;
查看etcd中存储配置
#!/bin/bash
source /data/k8s/bin/env.sh
etcdctl \
--endpoints=${ETCD_ENDPOINTS} \
--ca-file=/etc/kubernetes/cert/ca.pem \
--cert-file=/etc/flanneld/cert/flanneld.pem \
--key-file=/etc/flanneld/cert/flanneld-key.pem \
get ${FLANNEL_ETCD_PREFIX}/config
结果如下:
{"Network":"172.19.0.0/16", "SubnetLen": 21, "Backend": {"Type": "vxlan", "DirectRouting": true}}
#!/bin/bash
cd /data/k8s/work
source /data/k8s/bin/env.sh
cat > flanneld.service << EOF
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service
[Service]
Type=notify
ExecStart=/data/k8s/bin/flanneld \\
-etcd-cafile=/etc/kubernetes/cert/ca.pem \\
-etcd-certfile=/etc/flanneld/cert/flanneld.pem \\
-etcd-keyfile=/etc/flanneld/cert/flanneld-key.pem \\
-etcd-endpoints=${ETCD_ENDPOINTS} \\
-etcd-prefix=${FLANNEL_ETCD_PREFIX} \\
-iface=${IFACE} \\
-ip-masq
ExecStartPost=/data/k8s/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
RequiredBy=docker.service
EOF
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
scp flannel
#!/bin/bash
cd /data/k8s/work
source /data/k8s/bin/env.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
done
#!/bin/bash
source /data/k8s/bin/env.sh
for node_ip in ${NODE_IPS[@]}
do
echo ">>> ${node_ip}"
ssh root@${node_ip} "systemctl status flanneld|grep -i Active"
done
验证结果
>>> 192.168.16.104
Active: active (running) since Sun 2019-12-29 18:03:43 CST; 1 months 0 days ago
>>> 192.168.16.105
Active: active (running) since Sat 2019-12-28 22:33:27 CST; 1 months 1 days ago
>>> 192.168.16.106
Active: active (running) since Sat 2019-12-28 22:33:27 CST; 1 months 1 days ago
>>> 192.168.16.107
Active: active (running) since Sat 2019-12-28 22:33:28 CST; 1 months 1 days ago
#!/bin/bash
source /data/k8s/bin/env.sh
etcdctl \
--endpoints=${ETCD_ENDPOINTS} \
--ca-file=/etc/kubernetes/cert/ca.pem \
--cert-file=/etc/flanneld/cert/flanneld.pem \
--key-file=/etc/flanneld/cert/flanneld-key.pem \
ls ${FLANNEL_ETCD_PREFIX}/subnets
结果如下:
/kubernetes/network/subnets/172.19.120.0-21
/kubernetes/network/subnets/172.19.184.0-21
/kubernetes/network/subnets/172.19.72.0-21
/kubernetes/network/subnets/172.19.56.0-21
查看下分配网段的详情:
#!/bin/bash
source /data/k8s/bin/env.sh
etcdctl \
--endpoints=${ETCD_ENDPOINTS} \
--ca-file=/etc/kubernetes/cert/ca.pem \
--cert-file=/etc/flanneld/cert/flanneld.pem \
--key-file=/etc/flanneld/cert/flanneld-key.pem \
get ${FLANNEL_ETCD_PREFIX}/subnets/172.19.120.0-21
结果如下:
{"PublicIP":"192.168.16.104","BackendType":"vxlan","BackendData":{"VtepMAC":"aa:ea:b2:e1:88:a5"}}
网络插件有多种,根据公司或个人实际情况进行选择,网上很多前辈说flannel支持的网络规模受限,建议使用calico,由于测试环境规模不大,这里使用flannel即可满足。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章