写点什么

Kubernetes NetworkPolicy 工作原理浅析

  • 2019-11-26
  • 本文字数:2024 字

    阅读完需:约 7 分钟

Kubernetes NetworkPolicy 工作原理浅析

Kubernetes 能够把集群中不同 Node 节点上的 Pod 连接起来,并且默认情况下,每个 Pod 之间是可以相互访问的。但在某些场景中,不同的 Pod 不应该互通,这个时候就需要进行访问控制。那么如何实现呢?

简介

Kubernetes 提供了 NetworkPolicy 的 Feature,支持按 Namespace 和按 Pod 级别的网络访问控制。它利用 label 指定 namespaces 或 pod,底层用 iptables 实现。这篇文章简单介绍 Kubernetes NetworkPolicy 在 Calico 上的工作原理。

1 控制面数据流

Network Policy 是一种 kubernetes 资源,经过定义、存储、配置等流程使其生效。以下是简要流程:



  • 通过 kubectl client 创建 network policy 资源;

  • calico 的 policy-controller 监听 network policy 资源,获取到后写入 calico 的 etcd 数据库;

  • node 上 calico-felix 从 etcd 数据库中获取 policy 资源,调用 iptables 做相应配置。

2 资源配置模板

Network Policy 支持按 Pod 和 Namespace 级别的访问控制,定义该资源可以参考以下模板。

指定 pod 标签访问

我们要对 namespace 为 myns,带有"role: backend"标签的所有 pod 进行访问控制:只允许标签为"role: frontend"的 Pod,并且 TCP 端口为 6379 的数据流入,其他流量都不允许。


指定 namespaces 标签访问

我们要对标签为"role: frontend"的所有 Pod 进行访问控制:只允许 namespace 标签为"user: bob"的各 Pod,并且 TCP 端口为 443 的数据流入,其他流量都不允许。


3 NetworkPolicy 数据结构定义

看完上边的示例,想必大家对 NetworkPolicy 的资源对象有一定的了解。接下来我们具体看下 Kubernetes 对该接口的定义:



简而言之,该资源指定了“被控制访问 Pod”和“准入 Pod”两类 Pod,这可以从 spec 的 podSelector 和 ingress-from 的 Selector 进行配置。


接下来我们就看下 Kubernetes+Calico 的 Network policy 实现细节。

4 测试版本

以下是测试中使用的组件版本:


  • kubernetes:

  • - master: v1.9.0

  • - node: v1.9.0

  • calico:

  • - v2.5.0

  • - calico-policy-controller


(quay.io/calico/kube-policy-controller:v0.7.0)

5 运行配置

calico 侧,除基本配置外的新建资源:


  • service-account: calico-policy-controller

  • rbac:

  • - ServiceRole: calico-policy-controller

  • - ServiceRoleBinding: calico-policy-controller

  • deployment: calico-policy-controller


Kubernets 侧,新建 network policy 资源;

6 运行状态

在原有正常工作的 Kubernetes 集群上,我们新加了 calico-policy-controller 容器,它里面主要运行 controller 进程:


  • calico-policy-controller:

  • - 进程

  • - 端口:


我们可以看到,启动了 controller 进程,该进程 Established 两个端口:6443 对应的 kubernetes api-server 端口;2379 对应的 calico etcd 端口。

7 Calico-felix 对 policy 的配置

数据包走向

下图是 calico 流量处理流程(从这里找到)。每个 Node 的 calico-felix 从 etcd 数据库拿下来 policy 信息,用 iptables 做底层实现,最主要的就是:cali-pi-[POLICY]@filter 这个 Chain。


Network Policy 报文处理过程中使用的标记位:


0x2000000: 是否已经经过了 policy 规则检测,置 1 表示已经过


符号解释:


from-XXX: XXX 发出的报文; tw: 简写,to wordkoad endpoint; to-XXX: 发送到 XXX 的报文; po: 简写,policy outbound; cali-: 前缀,calico 的规则链; pi: 简写,policy inbound; wl: 简写,workload endpoint; pro: 简写,profile outbound; fw: 简写,from workload endpoint; pri: 简写,profile inbound。



下面通过访问“禁止所有流量”策略的 Pod,来观察对应的 iptables 处理:

流量进入前

流量进入后


可以看到,DROP 的 pkts 由 0 变成了 3。即该数据包经过 MARK、cali-pi-default.web-deny-all 两个 target 处理,被标记符合“拒绝”条件,流经到 DROP 被丢弃。

8 流程分析案例

以下是一个“禁止所有流量进入”的测试案例,通过它看下整体流程。

模型

DENY all traffic to an application


查看 app-web 的标签

在 default 的 namespace 下创建了一个名称为 web 的 service。它的 IP 和标签如下:


配置 policy

首先通过 kubectl 查看 k8s 资源:



再次,通过 calicoctl 和 etcdctl 查看 calico 资源:


查看 felix 进行 network policy 配置的日志

增加 && 删除 Policy


查看 node 上的 iptables 规则

从另一 pod 上访问该服务


可见,访问该 service 的 80 端口失败;ping 所对应的 Pod 试试:



Ping 该 Pod 也是失败,达到了“禁止所有流量进入”的预期。

9 总结

Kubernetes 的 NetworkPolicy 实现了访问控制,解决了部分网络安全的问题。但截至现在,Kubernetes、Calico 对其支持尚未完全,部分特性(egress 等)仍在进行中;另一方面 calico 的每个 Node 上配置大量 iptables 规则,加上不同维度控制的增加,导致运维、排障难度较大。所以对网络访问控制有需求的用户来讲,能否使用还需综合考虑。


本文转载自公众号 360 云计算(ID:hulktalk)。


原文链接:


https://mp.weixin.qq.com/s/a1pa2IeVFWKpfWmzzXiIiQ


2019-11-26 17:132058

评论

发布
暂无评论
发现更多内容

测试人生 | 手工转测试开发成功秘籍揭秘:从裁员到入职18k+,收获4个Offer,道阻且长不怯步

测吧(北京)科技有限公司

测试

原厂商是什么意思?云管平台原厂商有哪些企业?

行云管家

云计算 云管平台 原厂商

Ample Sound Ample Guitar SJ for mac(原声吉他插件)v3.7.0版

Mac相关知识分享

吉他模拟插件

Live Home 3D Pro for mac(3D家庭室内设计工具)v4.9.2版

Mac相关知识分享

室内设计软件

福利来了!MoneyPrinterPlus可以自动配置环境和自动运行了

程序那些事

工具 程序那些事 AIGC MoneyPrinterPlus

mac鼠标键盘共享:ShareMouse for Mac 激活版

你的猪会飞吗

Mac软件下载站

从裁员到入职18k+,收获4个Offer,道阻且长不怯步

测试人

软件测试

半个月6次面试,终于进百度HR面了

王中阳Go

Go 百度 面试 面经

分享一次海量数据平滑迁移实战

京东零售技术

大数据 企业号2024年7月PK榜

数据库的连接、创建会话与模型

EquatorCoco

Python 数据库 sql

SPL-404:如何彻底改变Solana上的NFT与DeFi

区块链软件开发推广运营

dapp开发 区块链开发 链游开发 NFT开发 公链开发

Proxyman Premium for Mac(网络调试和分析工具)v5.5.0版

Mac相关知识分享

网络调试 抓包分析工具

硬核解读,WeTune是如何提升数据库查询重写性能?

华为云开发者联盟

数据库 华为云 华为云GaussDB 华为云开发者联盟 企业号2024年7月PK榜

LED透明屏幕引领传媒新趋势

Dylan

技术 品牌 LED显示屏 led显示屏厂家 市场

BetterDisplay Pro Mac(显示器管理工具)v2.0.11版

Mac相关知识分享

Mac软件

Disruptor在撮合引擎的实践|得物技术

得物技术

Java Disruptor 高性能 技术分享 企业号2024年7月PK榜

Llama-2 vs. Llama-3:利用微型基准测试(井字游戏)评估大模型

Baihai IDP

程序员 AI LLMs 大模型评估 企业号 7 月 PK 榜

堡垒机试用选哪家?可以试用多久?咨询电话多少?

行云管家

网络安全 堡垒机 堡垒机试用

现代女性心理健康:数业智能心大陆解读应对策略

心大陆多智能体

人工智能 智能体 AI大模型 心理健康 数字心理

字节跳动基于TrafficRoute DNS的超千亿级调度解析优化实践

火山引擎边缘云

DNS Tr IP 路由

天工一刻 | 一文看懂小模型与端侧模型

新消费日报

如何有效提升 API 接口的安全性?

左诗右码

后端

大模型时代数据库技术创新

百度Geek说

数据库 企业号2024年7月PK榜

数据特征采样在 MySQL 同步一致性校验中的实践

vivo互联网技术

MySQL 数据传输 端对端一致性校验 数据流校验

一图看懂华为云CodeArts API 7大特性,带你玩转一站式API

华为云开发者联盟

软件开发 API 华为云 华为云开发者联盟 企业号2024年7月PK榜

快手开源 I2V-Adapter,即插即用、轻量级模块让静态图像秒变动态视频

快手技术

手工转测试开发成功秘籍揭秘:从裁员到入职18k+,收获4个Offer,道阻且长不怯步

霍格沃兹测试开发学社

基于心大陆AI大语言模型的多智能体应用

心大陆多智能体

人工智能 智能体 AI大模型 心理健康 数字心理

油猴Safari浏览器插件:Tampermonkey for Mac 下载

你的猪会飞吗

mac软件下载 浏览器脚本插件

Kubernetes NetworkPolicy 工作原理浅析_文化 & 方法_OPSDEV - 李文新_InfoQ精选文章