1.3、部署flannel网络

  • 所有节点都需要flannel
1.3.0、下载flannel二进制文件
  1. k8s-01:~ # cd /opt/k8s/packages/
  2. k8s-01:/opt/k8s/packages # mkdir flannel
  3. k8s-01:/opt/k8s/packages # wget https://github.com/coreos/flannel/releases/download/v0.12.0/flannel-v0.12.0-linux-amd64.tar.gz
  4. k8s-01:/opt/k8s/packages # tar xf flannel-v0.12.0-linux-amd64.tar.gz -C /opt/k8s/packages/flannel/
1.3.1、创建flannel证书和私钥
  1. k8s-01:~ # cd /opt/k8s/ssl/
  2. k8s-01:/opt/k8s/ssl # cat > flanneld-csr.json <<EOF
  3. {
  4. "CN": "flanneld",
  5. "hosts": [
  6. ],
  7. "key": {
  8. "algo": "rsa",
  9. "size": 2048
  10. },
  11. "names": [
  12. {
  13. "C": "CN",
  14. "ST": "ShangHai",
  15. "L": "ShangHai",
  16. "O": "k8s",
  17. "OU": "bandian"
  18. }
  19. ]
  20. }
  21. EOF
1.3.2、生成flannel证书和私钥
  1. k8s-01:/opt/k8s/ssl # cfssl gencert -ca=/opt/k8s/ssl/ca.pem \
  2. -ca-key=/opt/k8s/ssl/ca-key.pem \
  3. -config=/opt/k8s/ssl/ca-config.json \
  4. -profile=kubernetes flanneld-csr.json | cfssljson -bare flanneld
1.3.3、将pod网段写入etcd
  1. k8s-01:~ # cd /opt/k8s/ssl/
  2. k8s-01:/opt/k8s/ssl # source /opt/k8s/bin/k8s-env.sh
  3. k8s-01:/opt/k8s/ssl # ETCDCTL_API=2 etcdctl \
  4. --endpoints=${ETCD_ENDPOINTS} \
  5. --ca-file=/opt/k8s/ssl/ca.pem \
  6. --cert-file=/opt/k8s/ssl/flanneld.pem \
  7. --key-file=/opt/k8s/ssl/flanneld-key.pem \
  8. mk ${FLANNEL_ETCD_PREFIX}/config '{"Network":"'${CLUSTER_CIDR}'", "SubnetLen": 21, "Backend": {"Type": "vxlan"}}'
  • 因为flannel当前版本0.12.0不支持etcd v3,因此需要使用etcd v2 API写入配置,否则后面启动flanneld会找不到写入的key
1.3.4、配置flannel为systemctl管理
  1. k8s-01:~ # cd /opt/k8s/conf/
  2. k8s-01:/opt/k8s/conf # source /opt/k8s/bin/k8s-env.sh
  3. k8s-01:/opt/k8s/conf # cat > flanneld.service << EOF
  4. [Unit]
  5. Description=Flanneld overlay address etcd agent
  6. After=network.target
  7. After=network-online.target
  8. Wants=network-online.target
  9. After=etcd.service
  10. Before=docker.service
  11. [Service]
  12. Type=notify
  13. ExecStart=/opt/k8s/bin/flanneld \\
  14. -etcd-cafile=/etc/kubernetes/cert/ca.pem \\
  15. -etcd-certfile=/etc/flanneld/cert/flanneld.pem \\
  16. -etcd-keyfile=/etc/flanneld/cert/flanneld-key.pem \\
  17. -etcd-endpoints=${ETCD_ENDPOINTS} \\
  18. -etcd-prefix=${FLANNEL_ETCD_PREFIX}
  19. ExecStartPost=/opt/k8s/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/docker
  20. Restart=always
  21. RestartSec=5
  22. StartLimitInterval=0
  23. [Install]
  24. WantedBy=multi-user.target
  25. RequiredBy=docker.service
  26. EOF
  • mk-docker-opts.sh 脚本将分配给 flanneld 的 Pod 子网段信息写入 /run/flannel/docker 文件,后续 docker 启动时使用这个文件中的环境变量配置 docker0 网桥
  • flanneld 使用系统缺省路由所在的接口与其它节点通信,对于有多个网络接口(如内网和公网)的节点,可以用 -iface 参数指定通信接口
  • -ip-masq flanneld 为访问 Pod 网络外的流量设置 SNAT 规则,同时将传递给 Docker 的变量 -ip-masq(/run/flannel/docker 文件中)设置为 false,这样 Docker 将不再创建 SNAT 规则;
    • Docker 的 -ip-masq 为 true 时,创建的 SNAT 规则比较“暴力”:将所有本节点 Pod 发起的、访问非 docker0 接口的请求做 SNAT,这样访问其他节点 Pod 的请求来源 IP 会被设置为 flannel.1 接口的 IP,导致目的 Pod 看不到真实的来源 Pod IP。
    • flanneld 创建的 SNAT 规则比较温和,只对访问非 Pod 网段的请求做 SNAT。
1.3.5、分发flannel证书和启动文件到所有节点
  1. #!/usr/bin/env bash
  2. source /opt/k8s/bin/k8s-env.sh
  3. for host in ${NODE_IPS[@]}
  4. do
  5. printf "\e[1;34m${host}\e[0m\n"
  6. ssh root@${host} "mkdir -p /etc/flanneld/cert"
  7. scp /opt/k8s/ssl/flanneld*.pem ${host}:/etc/flanneld/cert/
  8. scp /opt/k8s/packages/flannel/{flanneld,mk-docker-opts.sh} ${host}:/opt/k8s/bin/
  9. scp /opt/k8s/conf/flanneld.service ${host}:/etc/systemd/system/
  10. done
1.3.6、配置并启动flannel服务
  1. #!/usr/bin/env bash
  2. source /opt/k8s/bin/k8s-env.sh
  3. for host in ${NODE_IPS[@]}
  4. do
  5. printf "\e[1;34m${host}\e[0m\n"
  6. ssh root@${host} "systemctl daemon-reload && \
  7. systemctl enable flanneld && \
  8. systemctl restart flanneld && \
  9. systemctl status flanneld | grep Active"
  10. done
1.3.7、查看已分配的pod网段列表
  1. k8s-01:~ # ETCDCTL_API=2 etcdctl \
  2. --endpoints=${ETCD_ENDPOINTS} \
  3. --ca-file=/etc/kubernetes/cert/ca.pem \
  4. --cert-file=/etc/flanneld/cert/flanneld.pem \
  5. --key-file=/etc/flanneld/cert/flanneld-key.pem \
  6. ls ${FLANNEL_ETCD_PREFIX}/subnets
1.3.8、查看各节点是否都存在flannel网卡
  1. #!/usr/bin/env bash
  2. source /opt/k8s/bin/k8s-env.sh
  3. for host in ${NODE_IPS[@]}
  4. do
  5. printf "\e[1;34m${host}\e[0m\n"
  6. ssh root@${host} "ip a | grep flannel | grep -w inet"
  7. done

suse 12 二进制部署 Kubernetets 1.19.7 - 第03章 - 部署flannel插件的更多相关文章

  1. suse 12 二进制部署 Kubernetets 1.19.7 - 第13章 - 部署metrics-server插件

    文章目录 1.13.0.创建metrics-server证书和私钥 1.13.1.生成metrics-server证书和私钥 1.13.2.开启kube-apiserver聚合配置 1.13.3.分发 ...

  2. suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群

    文章目录 1.2.部署etcd集群 1.2.0.下载etcd二进制文件 1.2.1.创建etcd证书和私钥 1.2.2.生成etcd证书和私钥 1.2.3.配置etcd为systemctl管理 1.2 ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第04章 - 部署docker服务

    文章目录 1.4.部署docker 1.4.0.下载docker二进制文件 1.4.1.配置docker镜像加速 1.4.2.配置docker为systemctl管理 1.4.3.启动docker服务 ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第05章 - 部署kube-nginx

    文章目录 1.5.部署kube-nginx 1.5.0.下载nginx二进制文件 1.5.1.编译部署nginx 1.5.2.配置nginx.conf 1.5.3.配置nginx为systemctl管 ...

  5. suse 12 二进制部署 Kubernetets 1.19.7 - 第06章 - 部署kube-apiserver组件

    文章目录 1.6.部署kube-apiserver 1.6.0.创建kubernetes证书和私钥 1.6.1.生成kubernetes证书和私钥 1.6.2.创建metrics-server证书和私 ...

  6. suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件

    文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...

  7. suse 12 二进制部署 Kubernetets 1.19.7 - 第08章 - 部署kube-scheduler组件

    文章目录 1.8.部署kube-scheduler 1.8.0.创建kube-scheduler请求证书 1.8.1.生成kube-scheduler证书和私钥 1.8.2.创建kube-schedu ...

  8. suse 12 二进制部署 Kubernetets 1.19.7 - 第09章 - 部署kubelet组件

    文章目录 1.9.部署kubelet 1.9.0.创建kubelet bootstrap kubeconfig文件 1.9.1.创建kubelet配置文件 1.9.2.配置kubelet为system ...

  9. suse 12 二进制部署 Kubernetets 1.19.7 - 第10章 - 部署kube-proxy组件

    文章目录 1.10.部署kube-proxy 1.10.0.创建kube-proxy证书 1.10.1.生成kube-proxy证书和秘钥 1.10.2.创建kube-proxy的kubeconfig ...

随机推荐

  1. CentOS6.5安装CM5.13

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6610650059971232269/ 安装好虚拟机(2个节点) YUM源已安装好.系统版本CentOS6.5.ja ...

  2. ElasticSearch的应用

    一.介绍 全文检索技术: 分布式: Restful风格: 近实时搜索 二.部署 下载:https://thans.cn/mirror/elasticsearch.html 新建用户,并登录: 解压: ...

  3. CodeForces 519B A and B and Compilation Errors (超水题)

    这道题是超级水的,在博客上看有的人把这道题写的很麻烦. 用 Python 的话是超级的好写,这里就奉上 C/C++ 的AC. 代码如下: #include <cstdio> #includ ...

  4. 默认安装的phpMyAdmin会存在哪些安全隐患

    利用:  1. 利用慢查询日志写入webshell          2. phpMyAdmin的setup目录暴露一些隐私信息          3. 通过phpMyAdmin修改php的ini配置 ...

  5. 使用结构化克隆在 JavaScript 中进行深度复制

    在很长一段时间内,您不得不求助于变通方法和库来创建 JavaScript 值的深层副本.现在js提供 「structuredClone()」 一个用于深度复制的内置函数. 浏览器支持: 浅拷贝 在 J ...

  6. Zookeeper介绍一

    Zookeeper是什么 ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终,将简单易用的接口和性能高效.功能稳定 ...

  7. 微软的Serialize和Newtonsoft的SerializeObject比较

    微软的序列化反序列化组件出来已有好几年了,刚出来的时候各种吐槽.最近在优化代码,比较了一下微软的Serialize和Newtonsoft的SerializeObject,感觉大部分场景下可以用微软的序 ...

  8. X-Y问题(X-Y problem)

    X-Y Problem 什么是X-Y problem呢? 某人想要解决问题X 他认为Y可能是解决X问题的方法 但是他不知道Y怎么做 于是他去问别人Y应该怎么做 这就产生了一个X-Y problem 也 ...

  9. 【感受】android + opencv + umat + opencl使用感受

    近期编译了android下支持opencl的opencv,使用opencl能力的关键是用cv::UMat替换cv::Mat. 实际使用后发现坑很多,非常不成熟,不推荐使用这种方式来提升实际产品的性能. ...

  10. Java Selenide 介绍&使用

    目录 Selenide 介绍 官方快速入门 元素定位 元素操作 浏览器操作 断言 常用配置 Selenide 和 Webdriver 对比 Selenide 介绍 Selenide github Se ...