创建 flannel 证书和私钥
flannel 从 etcd 集群存取网段分配信息,而 etcd 集群启用了双向 x509 证书认证,所以需要为 flanneld 生成证书和私钥。

cat > flanneld-csr.json <<EOF
{
"CN": "flanneld",
"hosts": [],
"key": {
"algo": "rsa",
"size": 2048
},
"names": [
{
"C": "CN",
"ST": "ChongQing",
"L": "ChongQing",
"O": "k8s",
"OU": "yunwei"
}
]
}
EOF

该证书只会被当做 client 证书使用,所以 hosts 字段为空;
生成证书和私钥:

# cfssl gencert -ca=/etc/kubernetes/ca/ca.pem \
-ca-key=/etc/kubernetes/ca/ca-key.pem \
-config=/etc/kubernetes/ca/ca-config.json \
-profile=kubernetes flanneld-csr.json | cfssljson -bare flanneld
ls flanneld*

将生成的证书和私钥分发到所有节点的/etc/kubernetes/ca/ 目录。
# scp /etc/kubernetes/ca/flanneld* 192.168.111.11:/etc/kubernetes/ca/
# scp /etc/kubernetes/ca/flanneld* 192.168.111.12:/etc/kubernetes/ca/

添加flanneld的服务文件,三台机子都要。

cat > /lib/systemd/system/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=/usr/local/bin/flanneld \
-etcd-cafile=/etc/kubernetes/ca/ca.pem \
-etcd-certfile=/etc/kubernetes/ca/flanneld.pem \
-etcd-keyfile=/etc/kubernetes/ca/flanneld-key.pem \
-etcd-endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
-etcd-prefix=/kubernetes/network \
-iface=ens33
ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
Restart=on-failure [Install]
WantedBy=multi-user.target
RequiredBy=docker.service
EOF

-iface=ens33,多网卡的一定要写对。

ExecStartPost=/usr/local/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker,这是个为docker分配的网络地址,待会docker会用到。

flannel会通过-etcd-prefix这个参数到etcd数据库获取/16段的ip地址,然后给集群的每台机器flannel网络分配一个/32段的地址,然后给docker分配一个机器ip下面的同网段的一个/24位的网络地址,然后docker给所有容器分配一段docker的ip下面的/24的ip地址,这样就达到了整个网络的连通性。

我们这里使用172.30.0.0/16,你也可以自己定义。但是必须与 kube-controller-manager 的 --cluster-cidr 参数值一致。

这里说个题外话,kubernetes用到的网络有三个,主机网络(就是我们的主机ip),flannel网络(/16段的ip地址)和服务网络(kubernetes用于服务发现的,可以用/24段,也可以用/16段),这三个网络不能有重合,除非是本身有公网ip,不然都是私有地址。

向 etcd 写入集群 Pod 网段信息
注意:本步骤只需执行一次,可以在任意主机执行。

etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--ca-file=/etc/kubernetes/ca/ca.pem \
--cert-file=/etc/kubernetes/ca/flanneld.pem \
--key-file=/etc/kubernetes/ca/flanneld-key.pem \
set /kubernetes/network/config '{"Network":"172.30.0.0/16", "SubnetLen": 24, "Backend": {"Type": "vxlan"}}'

查看
etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--ca-file=/etc/kubernetes/ca/ca.pem \
--cert-file=/etc/kubernetes/ca/flanneld.pem \
--key-file=/etc/kubernetes/ca/flanneld-key.pem \
get /kubernetes/network/config

flanneld 当前版本 (v0.10.0) 不支持 etcd v3,故使用 etcd v2 API 写入配置 key 和网段数据;

启动flanneld,如果绿色就正常了,如果出问题,可以用journalctl -xe,journalctl -u flanneld,检查。
# for SERVICES in flanneld;do systemctl enable $SERVICES;systemctl start $SERVICES;systemctl status $SERVICES ; done

验证:

# ip a   #有flannel.1网络

flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
link/ether 26:43:34:dd:f2:79 brd ff:ff:ff:ff:ff:ff
inet 172.30.29.0/32 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::2443:34ff:fedd:f279/64 scope link
valid_lft forever preferred_lft forever

# ls /run/flannel/
docker subnet.env

查看已分配的 Pod 子网段列表(/24):

# etcdctl \
--endpoints=https://192.168.111.10:2379,https://192.168.111.11:2379,https://192.168.111.12:2379 \
--ca-file=/etc/kubernetes/ca/ca.pem \
--cert-file=/etc/kubernetes/ca/flanneld.pem \
--key-file=/etc/kubernetes/ca/flanneld-key.pem \
ls /kubernetes/network/subnets

结果:

/kubernetes/network/subnets/172.30.29.0-24
/kubernetes/network/subnets/172.30.47.0-24
/kubernetes/network/subnets/172.30.87.0-24

最新文章

  1. css3 input边框蓝光特效
  2. JavaScript高级应用(一)
  3. 开始C#之旅
  4. ubuntu如何跑arm程序
  5. UltraEdit配置python和lua环境
  6. Java代码编写的一般性指导
  7. ubuntu上修改root密码
  8. 【Linux命令】netcat 网络工具的瑞士军刀
  9. 使用ob缓存实现真静态
  10. Confluence 6 Windows 中以服务方式自动重启的原因
  11. 新增节点NewBook并增加属性Name=&quot;WPF&quot;
  12. WDA-1-环境配置
  13. 5.2 dubbo-compiler源码解析
  14. Flume - 快速入门
  15. 金蝶KIS下载地址
  16. Java设计模式中的单例模式
  17. 如何让.gitignore文件生效
  18. js 数据监听--对象的变化
  19. grep命令及正则
  20. spring与mybati整合方法

热门文章

  1. mongodb的索引操作
  2. mbps和MB/s是怎么换算的
  3. stm32直流电机驱动与测速
  4. Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试
  5. UVM:6.2.3 sequencer 的grab 操作
  6. linux 关于 环境变量
  7. pycharm基本使用与破解
  8. JavaScript高阶函数之filter、map、reduce
  9. React项目打包并部署到 Github 展示预览效果
  10. css 按钮悬停效霓虹灯特效