zoukankan      html  css  js  c++  java
  • K8s生产环境下启用防火墙


    简述
    当初在安装K8s集群时,为了安装方便关闭了所有机器的防火墙,但是如果是生产环境,非常不安全,因此有了这篇文章。文章总结了在开启防火墙状态下,需要开放哪些端口,以及需要注意的点。

    准备
    服务器操作系统:Ubuntu 16.04
    防火墙命令:ufw
    集群:

    服务器角色 名称 ip
    etcd etcd1、2、3 192.168.22.104、105、106
    master master1、2 192.168.22.110、111
    load balance lbMaster、lbBackup 192.168.22.102、103
    node node1、2、3、4、5 192.168.22.107、108、109、141、142


    设置
    开放etcd集群所需端口2379(客户端监听)和2380(节点间内部通信)

    ufw allow 2379
    ufw allow 2380
    1
    2
    开放Master节点6443端口,kube-apiserver组件使用,Kubernetes API端口

    ufw allow 6443
    1
    开放Node节点

    开放LB节点8443端口,为VIP(虚拟IP)监听的服务端口,区别于默认的apiserver端口6443

    ufw allow 8443
    1
    开启以上节点后,访问Dashboard进行测试,会出现以下问题:

    Error: 'read tcp 172.20.1.0:56922->172.20.6.74:8443: read: connection timed out'
    Trying to reach: 'https://172.20.6.74:8443/'
    1
    2
    这是因为在安装K8s集群过程中,使用网络组件(这里是flannel)为集群中(Master和Node)的每个Pod虚拟了一个独立的IP。Pod中的所有容器共享同一个IP,通过端口来区分,Pod之间可以相互访问。上面的错误信息表示了各个服务器之间的虚拟IP段无法正常通信。

    查看服务器路由信息

    route -n
    1
    以下为Master1、2的路由信息

    在Master1上,ping不通Master2的虚拟IP段:172.20.1.0,这说明防火墙可能对flannel组件生效有影响,需要了解flannel工作原理才能找到问题所在。

    Flannel实质上是一种“覆盖网络(overlay network)”,将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。

    默认的节点间数据通信方式是UDP转发,源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达以后被解包,这意味着它们也是通过真实网络的某个端口进行通信的,我们需要开放Flannel使用的特定端口。

    开启防火墙日志

    ufw logging on
    1
    在Master1上,再次ping Master2的虚拟IP段:172.20.1.0,查看日志内容

    tail -n 10 /var/log/ufw.log
    1
    日志

    Jul 26 20:15:13 master02 kernel: [40620.949660] [UFW BLOCK] IN=ens160
    OUT= MAC=00:50:56:ba:10:58:00:50:56:ba:55:f1:08:00 SRC=192.168.22.110 DST=192.168.22.111
    LEN=134 TOS=0x00 PREC=0x00 TTL=64 ID=13122 PROTO=UDP SPT=57102 DPT=8472 LEN=114
    1
    2
    3
    DPT是数据包的目标端口,Master1向Master2的8472端口发送数据,也就是说我们需要再开放8472端口,注意要在所有Master和Node节点上执行。

    ufw allow 8472
    1
    小结
    经测试,开启以下端口即可:

    服务器角色 端口
    etcd 2379、2380
    Master 6443、8472
    Node 8472
    LB 8443

  • 相关阅读:
    idea 导入maven项目各种红
    基于 Spring Security 的开源统一角色访问控制系统 URACS
    MySQL读写分离又一好办法 使用 com.mysql.jdbc.ReplicationDriver
    [转]CVS SVN VSS 使用对比
    推荐一个免费开源的虚拟机VBox(VirtualBox)
    JavaScript的对象属性的反射
    [转]需求分析的目的
    尝鲜安装iOS6及新特性
    EXP00003: 未找到段 (4,571) 的存储定义
    QQ邮箱里可以定阅博客园的文章了
  • 原文地址:https://www.cnblogs.com/agang-php/p/12546592.html
Copyright © 2011-2022 走看看