从 Network Namespace 了解 Pod 是如何访问外网的

本文通过创建和配置Network Namespace,演示了Pod如何借助Linux网络空间隔离技术访问外网的过程。涉及新建namespace、添加虚拟网卡、设置路由、开启ARP代答和源地址转换等关键步骤,揭示了Kubernetes Pod网络通信的原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Network namespace 是实现 linux 网络空间隔离和网络虚拟化的基础,无论是docker还是其他虚拟化技术也都是通过 linux 的 network namespace 实现的网络隔离。之前的几篇文章从 kubernetes 部署后的结果展开分析了 pod、service 和 flannel 的原理。

kubernetes中Pod网络的创建原理

Kubernetes网络插件flannel原理简介

kubernetes service 从简介到原理一篇全搞定

本篇就通过 ip 命令实现新建一个 network namespace 与外网通信的过程。

新建 Network Namespace

当我们使用一个不认识的命令时,可以首先使用 help 命令查看使用帮助。

fffb2086f6a99c09f2b284015fa61dd6.png

我们使用 ip netns list 查看当前是没有 network ns 的。

使用下面的命令创建一个 ns。

ip netns add ns1

创建好新的 ns 之后,可以使用 exec 命令查看某个 ns 中的具体信息。

ip netns exec ns1 ip link show

### 关于Network Policy Server的介绍 Network Policy Server (NPS),并非Kubernetes原生组件,而是指一种用于集中管理和实施网络安全策略的服务。然而,在讨论Kubernetes中的网络隔离和控制时,“Network Policy Server”的概念通常被理解为负责处理`NetworkPolicy`资源的核心API服务器以及背后的工作机制[^1]。 对于Kubernetes而言,真正的“Network Policy Server”角色由其API服务器承担,它接收并解析用户提交的`NetworkPolicy`对象定义,并将其分发给底层支持CNI插件实现具体流量过滤逻辑。这使得管理员能够基于Pod的选择器、命名空间以及其他条件精确指定哪些通信应该被允许或拒绝。 ### 配置与使用方法 为了配置和应用网络策略,首先需要确保集群启用了相应的特性,并安装了一个兼容CNI插件(如Calico)。一旦环境准备就绪,则可通过创建YAML格式描述文件来定义所需的安全规则: ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: matchLabels: role: db policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: role: frontend egress: - to: - ipBlock: cidr: 10.233.0.0/16 except: - 10.233.93.0/24 ``` 上述示例展示了如何设置仅限带有特定标签(`role=frontend`)的Pod可以向具有相同标签(`role=db`)的目标发起连接请求;同时对外部IP地址范围进行了限定,除了特别指出要排除的部分外均能正常访问[^4]。 值得注意的是,实际操作过程中还需要考虑更多细节,比如不同版本间可能存在差异的功能选项或是针对特殊场景下的优化调整等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值