k8s 基础入门篇之开启 firewalld

前面在部署k8s时,都是直接关闭的防火墙。由于生产环境需要开启防火墙,只能放行一些特定的端口, 简单记录一下过程。

1. firewall 与 iptables 的关系

1.1 防火墙(Firewall)

定义:

防火墙是网络安全系统,用于监控和控制进出网络的流量,基于预定义的规则允许或阻止数据包。它是广义上的概念,不依赖具体工具。

功能:流量过滤(允许/拒绝), 网络地址转换(NAT),端口转发,防御攻击(如 DDoS)

1.2. iptables

定义:
iptables 是 Linux 内核中实现防火墙功能的具体工具,通过配置规则控制网络流量。它是 Linux 系统上防火墙的底层实现之一。

核心机制:

  • 表(Tables):按功能分类规则集,如 filter(过滤)、nat(地址转换)、mangle(修改数据包头)等。
  • 链(Chains):规则生效的节点,如 INPUT(入站流量)、OUTPUT(出站流量)、FORWARD(转发流量)。
  • 规则(Rules):定义匹配条件和动作(如 ACCEPT、DROP、REJECT)。

1.3 两者的关系

实现与工具:

防火墙是抽象的安全概念,iptables 是实现这一概念的具体工具。
iptables 通过操作 Linux 内核的 netfilter 框架(内核模块)来执行防火墙功能。

  • netfilter 是内核中的核心引擎,负责执行流量处理。
  • iptables 是用户空间的命令行工具,用于配置 netfilter 规则。
  • nftables:新一代 Linux 防火墙工具,取代 iptables,提供更简洁的语法和更高性能。

2. 开启 firewalld 遇到的问题

没有在FORWARD中放行端口。

利用iptables 或 内核版本更高的系统中使用ntf 在 INPUT 链中添加 需要放行的端口,

只放开了 INPUT 的端口,没有放开 FORWARD,因为pod id 是走的ipv4转发, 导致pod ip 与 主机节点ip 不通,跨节点时,pod ip 与service 的 cluster ip 也不通。

下面是一个基本的放行脚本:FORWARD 放行所有端口

复制代码
#!/bin/bash

# 定义允许访问的节点IP及VIP(空格分隔)
service_ip_list=("172.10.9.2" ""172.10.9.3" ""172.10.9.4" )

pod_cidr=10.42.0.0/16
service_cluster_cidr=10.43.0.0/16
# 对外端口
external_port_list="22, 80, 443, 30000-32767"

# 节点之间互通端口
node_tcp_port_list="179, 2379, 2380, 6443, 10250, 10260"

input_chain='filter_IN_public_allow'
forward_chain='filter_FWD_public_allow'

# 添加新规则
function add_rules() {
    echo "[*] 添加新规则..."

    nft add rule inet firewalld $input_chain tcp dport { $external_port_list }  accept
    for ip in "${service_ip_list[@]}"; do
        out=`ip addr | grep  $ip`
        if [ -z "$out" ]; then
            nft add rule inet firewalld $input_chain ip saddr $ip tcp dport { $node_tcp_port_list } accept
            nft add rule inet firewalld $forward_chain ip saddr $ip accept
        fi
    done
    nft add rule inet firewalld $input_chain ip saddr $pod_cidr accept
    nft add rule inet firewalld $input_chain ip saddr $service_cluster_cidr accept
    nft add rule inet firewalld $forward_chain ip saddr $pod_cidr accept
    nft add rule inet firewalld $forward_chain ip saddr $service_cluster_cidr accept

    echo "[+] 规则添加完"
}
相关推荐
吴声子夜歌19 分钟前
Docker入门与实战——Docker数据管理
docker·容器
vipxieliang34 分钟前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
kubernetes
程序员老赵43 分钟前
Docker 部署 TeslaMate:轻松搭建特斯拉车辆数据记录平台
docker·容器·开源
月落汀兰1 小时前
为什么跨网桥容器 ping 不通?Docker 网络模式详解,端口映射、容器访问外网底层实战
网络·docker·容器
Zhu7582 小时前
在k8s环境中,离线部署与使用Topograph
云原生·容器·kubernetes
凯歌的博客3 小时前
docker镜像代理
运维·docker·容器
A.说学逗唱的Coke4 小时前
【人工智能专题】PolarDB 深度解析:存算分离到 AI Lakebase,云原生数据库的架构演进与实战指南
数据库·人工智能·云原生
ToddyBear4 小时前
从 Pod 编排到数据互联:基于 K8s 与 Snowflake 打造下一代异构查询桥梁实践
云原生·容器·kubernetes
A-刘晨阳5 小时前
GitLab + ArgoCD 实现 Kubernetes GitOps 自动化部署
运维·人工智能·git·kubernetes·自动化·云计算·argocd
张小凡vip5 小时前
Kubernetes--k8s---了解和使用 ServiceAccount
容器·贪心算法·kubernetes