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 "[+] 规则添加完"
}
相关推荐
阿里云云原生4 小时前
不改代码也能监控 AI Agent?揭秘 OBI 如何在内核层精准解析 GenAI 语义流量
云原生·agent
众人皆醒我独醉4 小时前
Pod 一直 Terminating,死活删不掉?三个凶手,每一个你都意想不到
面试·kubernetes
飞翔沫沫情6 小时前
K8s Alloy 采集 Pod 控制台日志
云原生·容器·kubernetes
潮起鲸落入海11 小时前
Kubernetes Metric Server, Quota and Limits
容器·kubernetes
梦想的颜色11 小时前
Docker 容器化本地部署 Claude Code 完整硬核教程|隔离沙盒 + 国产模型直连 + 持久化 Skill
运维·容器·ai 工程化·沙盒隔离·docker 本地部署·claude code硬核实战·国内国产模型接入
摇滚侠12 小时前
云原生 Java 架构师的第一课 K8s+Docker+KubeSphere+DevOps 19-25
java·云原生·kubernetes
渣渣盟12 小时前
Docker 运维常用命令手册(含扩容与实战)
运维·docker·容器
我叫张小白。14 小时前
一个微服务电商+社区项目(瓷韵app)的技术深度复盘
docker·微服务·云原生·架构
咕噜咕噜的猪大侠14 小时前
《K8s 核心知识梳理:Deployment 滚动更新、JobCronJob、DaemonSet 和 Service》
云原生·容器·kubernetes
虚心的百褶裙14 小时前
远程调用服务架构设计及zookeeper技术详解(下篇)
分布式·zookeeper·云原生