跳转到内容
主菜单
主菜单
移至侧栏
隐藏
导航
首页
最近更改
随机页面
MediaWiki帮助
代码酷
搜索
搜索
中文(中国大陆)
外观
创建账号
登录
个人工具
创建账号
登录
未登录编辑者的页面
了解详情
贡献
讨论
编辑“︁
Kubernetes网络策略
”︁
页面
讨论
大陆简体
阅读
编辑
编辑源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
编辑
编辑源代码
查看历史
常规
链入页面
相关更改
特殊页面
页面信息
外观
移至侧栏
隐藏
您的更改会在有权核准的用户核准后向读者展示。
警告:
您没有登录。如果您进行任何编辑,您的IP地址会公开展示。如果您
登录
或
创建账号
,您的编辑会以您的用户名署名,此外还有其他益处。
反垃圾检查。
不要
加入这个!
{{DISPLAYTITLE:Kubernetes网络策略}} '''Kubernetes网络策略'''(Network Policies)是Kubernetes中用于控制Pod之间网络通信的规则集合。通过定义网络策略,用户可以限制哪些Pod可以相互通信,从而增强集群的安全性。网络策略基于标签选择器(Label Selectors)和命名空间(Namespace)来定义流量规则,支持入口(Ingress)和出口(Egress)流量的控制。 == 简介 == Kubernetes默认情况下允许所有Pod之间自由通信,但在生产环境中,通常需要限制某些敏感服务的访问权限。网络策略允许管理员通过声明式的方式定义哪些Pod可以接收或发送流量,类似于传统的防火墙规则。 网络策略的实现依赖于'''CNI插件'''(如Calico、Cilium或Weave Net),并非所有网络插件都支持网络策略功能。因此,在启用网络策略前,需确认集群的CNI插件是否兼容。 == 核心概念 == === 基本组件 === * '''PodSelector''':选择应用策略的目标Pod。 * '''PolicyTypes''':指定策略类型(`Ingress`、`Egress`或两者)。 * '''Ingress Rules''':定义允许进入目标Pod的流量规则。 * '''Egress Rules''':定义允许从目标Pod发出的流量规则。 === 默认行为 === * 如果命名空间中未定义任何网络策略,则所有流量被允许(默认允许所有)。 * 一旦在命名空间中创建了网络策略,则只有匹配规则的流量被允许(默认拒绝所有)。 == 网络策略示例 == 以下是一个基础的网络策略示例,限制只有带有标签`role: frontend`的Pod可以访问带有标签`role: backend`的Pod: <syntaxhighlight lang="yaml"> apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: backend-policy namespace: default spec: podSelector: matchLabels: role: backend policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: role: frontend ports: - protocol: TCP port: 80 </syntaxhighlight> === 解释 === * `podSelector`:选择标签为`role: backend`的Pod作为策略目标。 * `ingress.from.podSelector`:仅允许标签为`role: frontend`的Pod访问。 * `ports`:仅允许TCP协议的80端口流量。 == 高级用例 == === 多条件流量控制 === 以下策略允许来自特定命名空间(`monitoring`)和特定Pod标签(`app: prometheus`)的流量: <syntaxhighlight lang="yaml"> ingress: - from: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: monitoring podSelector: matchLabels: app: prometheus </syntaxhighlight> === 出口策略示例 === 限制Pod仅能访问外部IP地址`1.2.3.4`的53端口(DNS服务): <syntaxhighlight lang="yaml"> egress: - to: - ipBlock: cidr: 1.2.3.4/32 ports: - protocol: UDP port: 53 </syntaxhighlight> == 实际场景 == === 微服务隔离 === 假设一个电商应用包含以下组件: * `frontend`(标签: `tier: web`) * `backend`(标签: `tier: app`) * `database`(标签: `tier: db`) 网络策略可配置为: 1. 仅允许`frontend`访问`backend`。 2. 仅允许`backend`访问`database`。 3. 拒绝其他所有流量。 <mermaid> graph LR A[frontend: tier=web] -->|Allow| B[backend: tier=app] B -->|Allow| C[database: tier=db] A -.->|Deny| C </mermaid> === 关键服务保护 === 保护Redis服务仅允许特定应用访问: <syntaxhighlight lang="yaml"> apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: redis-allow spec: podSelector: matchLabels: app: redis ingress: - from: - podSelector: matchLabels: app: inventory ports: - protocol: TCP port: 6379 </syntaxhighlight> == 数学表达 == 网络策略的匹配逻辑可以用集合论表示。假设: * 允许的入口流量集合为<math>I</math>。 * Pod标签集合为<math>P</math>。 * 命名空间标签集合为<math>N</math>。 则流量允许条件为: <math>I = \{(p, n) \mid p \in P \land n \in N\}</math> == 注意事项 == 1. '''插件兼容性''':确保CNI插件支持`NetworkPolicy` API。 2. '''默认拒绝''':首个策略会覆盖默认的“允许所有”规则。 3. '''规则优先级''':多个策略会叠加生效(允许的流量取并集)。 4. '''性能影响''':复杂策略可能增加网络延迟。 == 总结 == Kubernetes网络策略是集群网络安全的关键工具,通过精细化的流量控制可有效减少攻击面。初学者应从简单的Pod选择器开始,逐步学习多条件策略和出口控制。实际部署时需结合监控工具验证策略有效性。 [[Category:集成部署]] [[Category:Kubernetes]] [[Category:Kubernetes服务与网络]]
摘要:
请注意,所有对代码酷的贡献均被视为依照知识共享署名-非商业性使用-相同方式共享发表(详情请见
代码酷:著作权
)。如果您不希望您的文字作品被随意编辑和分发传播,请不要在此提交。
您同时也向我们承诺,您提交的内容为您自己所创作,或是复制自公共领域或类似自由来源。
未经许可,请勿提交受著作权保护的作品!
取消
编辑帮助
(在新窗口中打开)