2024 年云原生运维实战文档 99 篇原创计划 第 055 篇 |KubeSphere 最佳实战「2024」系列 第 027 篇
你好,欢迎来到运维有术。
本文是一篇实战短文,重点介绍 KubeKey 部署的 KubeSphere 和 Kubernetes 如何使用 Iptables 进行安全加固。
实战服务器配置(架构1:1复刻小规模生产环境,只是配置略有不同)
主机名 | IP | CPU | 内存 | 系统盘 | 数据盘 | 用途 |
---|---|---|---|---|---|---|
ksp-control-1 | 192.168.9.161 | 8 | 16 | 40 | 100 | KubeSphere/k8s-control-plane |
ksp-control-2 | 192.168.9.162 | 8 | 16 | 40 | 100 | KubeSphere/k8s-control-plane |
ksp-control-3 | 192.168.9.163 | 8 | 16 | 40 | 100 | KubeSphere/k8s-control-plane |
合计 | 3 | 24 | 48 | 120 | 300 |
实战环境涉及软件版本信息
本文防火墙规则适用于以下场景:
为什么不用 Firewalld?
协议 | 流量方向 | 端口/端口范围 | 用途(服务) | 使用者 |
---|---|---|---|---|
TCP | Inbound | 443,6443 | Kubernetes API server | All |
TCP | Inbound | 2379,2380 | etcd server client API | kube-apiserver, etcd |
TCP | Inbound | 10250 | Kubelet API | K8s 集群内部, Control plane |
TCP | Inbound | 10259 | kube-scheduler | K8s 集群内部 |
TCP | Inbound | 10257 | kube-controller-manager | K8s 集群内部 |
TCP | Inbound | 10256 | kube-proxy | K8s 集群内部, Load balancers |
TCP | Inbound | 30000-32767 | NodePort Services | All |
TCP | Inbound | 53,9253,9254,9353 | DNS Node Cache | K8s 集群内部 |
UDP | Inbound | 53 | DNS Node Cache | K8s 集群内部 |
协议 | 流量方向 | 端口/端口范围 | 用途(服务) | 使用者 |
---|---|---|---|---|
TCP | Inbound | 10250 | Kubelet API | K8s 集群内部, Control plane |
TCP | Inbound | 10256 | kube-proxy | K8s 集群内部, Load balancers |
TCP | Inbound | 30000-32767 | NodePort Services | All |
TCP | Inbound | 53,9253,9254,9353 | DNS Node Cache | K8s 集群内部 |
UDP | Inbound | 53 | DNS Node Cache | K8s 集群内部 |
如果启用了其它服务或是组件,则需要开放额外端口:
15090、15021、15020、15000
等111
不同版本的 Kubernetes,开放端口也有区别,请查看k8s 端口开放官方说明。
出于某些原因,本节不提供完整的脚本,仅提供思路和核心的配置命令。请根据端口、开放列表和下面的命令自行编写完整的脚本。
iptables -t filter -A INPUT -p tcp -m multiport --ports 10250 -s 192.168.9.0/24 -m comment --comment "Kubelet Service" -j ACCEPT
iptables -t filter -A INPUT -p udp -m multiport --ports 53 -s 192.168.9.0/24 -m comment --comment "DNS Node Cache" -j ACCEPT
iptables -t filter -A INPUT -m comment --comment "999 drop all other requests" -j DROP
特别注意: 该规则会禁止所有进入主机的流量,请谨慎使用。
最终结果预览:
$ iptables -nvL INPUT
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 13 /* 000 icmp security */
0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 14 /* 000 icmp security */
0 0 DROP icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 11 /* 000 icmp security */
0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 /* 000 accept all icmp requests */
223 31856 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 /* 001 accept all to lo interface */
356 36293 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 /* 002 accept related established rules */ state RELATED,ESTABLISHED
0 0 CUSTOM-SSH tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 22 /* 003 ssh */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 53,9253,9254,9353 /* DNS Node Cache */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 30000:32767 /* Kubernetes NodePort Services */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 111,2049,875,32803,32769,892,892,662,2020 /* NFS Service */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 10250 /* Kubelet Service */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 10257 /* Kube-controller-manager Service */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 10256 /* Kube-proxy Service */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 10259 /* Kube-scheduler Service */
2 120 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 2379,2380 /* etcd Service */
0 0 KUBE-CUSTOM-TCP tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 6443 /* Kubernetes API Service */
0 0 KUBE-CUSTOM-UDP udp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 111 /* NFS Service */
0 0 KUBE-CUSTOM-UDP udp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 53 /* DNS Node Cache */
0 0 KUBE-CUSTOM-UDP udp -- * * 0.0.0.0/0 0.0.0.0/0 multiport ports 323 /* Chronyd NTP Service */
0 0 ACCEPT all -- * * 10.233.0.0/16 0.0.0.0/0 /* 100 kubernetes pod network */
0 0 ACCEPT udp -- * * 0.0.0.0/0 169.254.25.10 udp dpt:53 /* NodeLocal DNS Cache: allow DNS traffic */
0 0 ACCEPT tcp -- * * 0.0.0.0/0 169.254.25.10 tcp dpt:53 /* NodeLocal DNS Cache: allow DNS traffic */
0 0 cali-INPUT all -- * * 0.0.0.0/0 0.0.0.0/0 /* cali: */
0 0 KUBE-IPVS-FILTER all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes ipvs access filter */
0 0 KUBE-PROXY-FIREWALL all -- * * 0.0.0.0/0 0.0.0.0/0 /* kube-proxy firewall rules */
0 0 KUBE-NODE-PORT all -- * * 0.0.0.0/0 0.0.0.0/0 /* kubernetes health check rules */
0 0 KUBE-FIREWALL all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 /* 999 drop all other requests */
文章中所有操作步骤、配置文件,已全部编排为自动化脚本,包含以下内容:
运维有术星球会员请到专属代码仓库下载(价值内容,仅星球会员专享)。
以上,就是我今天分享的全部内容。下一期分享的内容还没想好,敬请期待开盲盒。
如果你喜欢本文,请分享、收藏、点赞、评论! 请持续关注 @运维有术,及时收看更多好文!
欢迎加入 「知识星球|运维有术」 ,获取更多的 KubeSphere、Kubernetes、云原生运维、自动化运维、AI 大模型等实战技能。未来运维生涯始终有我坐在你的副驾。
免责声明:
Get 本文实战视频(请注意,文档视频异步发行,请先关注)
版权声明
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。