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

  • 相关阅读:
    跳出iframe
    leetcode 225. Implement Stack using Queues
    leetcode 206. Reverse Linked List
    leetcode 205. Isomorphic Strings
    leetcode 203. Remove Linked List Elements
    leetcode 198. House Robber
    leetcode 190. Reverse Bits
    leetcode leetcode 783. Minimum Distance Between BST Nodes
    leetcode 202. Happy Number
    leetcode 389. Find the Difference
  • 原文地址:https://www.cnblogs.com/agang-php/p/12546592.html
Copyright © 2011-2022 走看看