k8s 基础入门篇之开启 firewalld

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

1. firewall 与 iptables 的关系

1.1 防火墙(Firewall)

定义:

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

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

1.2. iptables

定义:
iptablesLinux 内核中实现防火墙功能的具体工具,通过配置规则控制网络流量。它是 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 或 内核版本更高的系统中使用ntfINPUT 链中添加 需要放行的端口,

只放开了 INPUT 的端口,没有放开 FORWARD,因为pod id 是走的ipv4转发, 导致pod ip 与 主机节点ip 不通,跨节点时,pod ipservicecluster 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 "[+] 规则添加完"
}
相关推荐
生活爱好者!40 分钟前
NAS能批量做短视频?docker部署MoneyPrinterTurbo
运维·docker·容器
容器魔方44 分钟前
议程一览 | 华为云亮相 KubeCon + CloudNativeCon China 2026
人工智能·云原生·容器·开源·华为云·云计算
瀛川2 小时前
Agent 换了 Pod,身份怎么办?拆解 Substrate 的 Actor Identity
人工智能·云原生
yanwumuxi2 小时前
Milvus使用和改进
云原生·eureka·milvus
拦路雨g2 小时前
docker_data.vhdx大文件瘦身
运维·docker·容器
分布式存储与RustFS3 小时前
RustFS 1.0.0-rc.5 发布:GA 前的最后一次大版本打磨
云原生·开源·对象存储·分布式存储·s3·rustfs·性能基准
明月心9523 小时前
关于docker的一些命令
运维·docker·容器
ZzzZZzzzZZZzzzz…3 小时前
K8s---网络:从 Pod 网络模型到 Calico 三种模式
运维·网络·云原生·容器·kubernetes·calico·pod网络模型
DLYSB_12 小时前
混合云与工业边缘场景下“云原生告警与物理现场声光”的集成架构实践
云原生·架构·报警灯
xhaxy13 小时前
docker
docker·容器·eureka