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 "[+] 规则添加完"
}
相关推荐
NLP的小Y9 分钟前
Docker用model.config部署及更新多个模型
运维·docker·容器
风舞雪凌月1 小时前
【安全】DVWA靶场渗透
安全·web安全·云原生·eureka
Paraverse平行云1 小时前
如何使用UE Cesium插件实现网页端无算力负担访问?
云原生·webrtc
阿里云云原生2 小时前
微服务引擎 MSE 及云原生 API 网关 2025 年 3 月产品动态
微服务·云原生
Yang三少喜欢撸铁2 小时前
【通过docker部署redis7.0】
运维·数据库·redis·docker·容器
Rocky2 小时前
【失败总结】Win10系统安装docker
运维·docker·容器
David爱编程2 小时前
Kubernetes就绪探针:高可用服务的守门人
云原生·kubernetes
海鸥813 小时前
k8s 调整Node节点 Max_Pods
云原生·容器·kubernetes
zxnbmk4 小时前
【1】云原生,kubernetes 与 Docker 的关系
docker·云原生·kubernetes
郝同学的测开笔记5 小时前
云原生探索系列(十六):Go 语言锁机制
后端·云原生·go