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 "[+] 规则添加完"
}
相关推荐
企鹅侠客14 小时前
使用k8s集群调度GPU
云原生·容器·kubernetes
❀͜͡傀儡师14 小时前
docker一键部署网页版Win11系统
运维·docker·容器
zcz160712782116 小时前
k8s重新部署的配置过程
云原生·容器·kubernetes
IsPrisoner16 小时前
从 Docker 到 Kubernetes:一次“工程视角”的 K8s 核心概念深度梳理
docker·容器·kubernetes
liuxuzxx17 小时前
containerd的CPU过高的问题排查
容器·性能优化·kubernetes
阿里云云原生17 小时前
加入我们,一起定义「Data x AI」的未来
云原生
看-清17 小时前
Docker离线安装部署xxl-job流程
运维·docker·容器
建群新人小猿18 小时前
陀螺匠企业助手-我的日程
android·大数据·运维·开发语言·容器
阿里云云原生18 小时前
告别数据库“膨胀”:Dify x SLS 构建高可用生产级 AI 架构
云原生
孤岛悬城18 小时前
47 Docker镜像编排
docker·容器·云计算