目录

  • 概念
  • 前置条件
  • k8s自带的隔离
  • 模版
  • 实战
    • 创建
    • 删除
  • 参考

概念

如果你希望在 IP 地址或端口层面(OSI 第 3 层或第 4 层)控制网络流量, 则你可以考虑为集群中特定应用使用 Kubernetes 网络策略(NetworkPolicy)。
NetworkPolicy 是一种以应用为中心的结构,允许你设置如何允许 Pod 与网络上的各类网络“实体” (我们这里使用实体以避免过度使用诸如“端点”和“服务”这类常用术语, 这些术语在 Kubernetes 中有特定含义)通信。 NetworkPolicies 适用于一端或两端与 Pod 的连接,与其他连接无关。

前置条件

网络策略通过网络插件(本文的k8s集群安装时安装了calico)来实现。 要使用网络策略,你必须使用支持 NetworkPolicy 的网络解决方案。

k8s自带的隔离

k8s的命名空间是没有强制隔离性的,访问service时加上.namespace的名称即可。
k8s的Pod是没有隔离行的,任意命名空间下的Pod可以访问任意命名空间下的Pod。

模版

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: test-network-policynamespace: default
spec:podSelector:matchLabels:role: dbpolicyTypes:- Ingress- Egressingress:- from:- ipBlock:cidr: 172.17.0.0/16except:- 172.17.1.0/24- namespaceSelector:matchLabels:project: myproject- podSelector:matchLabels:role: frontendports:- protocol: TCPport: 6379egress:- to:- ipBlock:cidr: 10.0.0.0/24ports:- protocol: TCPport: 5978

以上模版的含义如下:
1.隔离 “default” 名字空间下 “role=db” 的 Pod 。

2.(Ingress 规则)允许以下 Pod 连接到 “default” 名字空间下的带有 “role=db” 标签的所有 Pod 的 6379 TCP 端口:

  • “default” 名字空间下带有 “role=frontend” 标签的所有 Pod
  • 带有 "project=myproject"标签的所有名字空间中的 Pod
  • IP 地址范围为 172.17.0.0–172.17.0.255 和172.17.2.0–172.17.255.255 (即,除了 172.17.1.0/24 之外的所有 172.17.0.0/16)

3.(Egress 规则)允许 “default” 命名空间中任何带有标签 “role=db” 的 Pod 到 CIDR 10.0.0.0/24 下 5978 TCP 端口的连接。

选择器有以下四个:

  • podSelector:此选择器将在与 NetworkPolicy 相同的名字空间中选择特定的
    Pod,应将其允许作为入站流量来源或出站流量目的地。

  • namespaceSelector:此选择器将选择特定的名字空间,应将所有 Pod 用作其入站流量来源或出站流量目的地。

  • namespaceSelectorpodSelector:一个指定 namespaceSelector 和 podSelector
    的 to/from 条目选择特定名字空间中的特定 Pod。

  • ipBlock:此选择器将选择特定的 IP CIDR 范围以用作入站流量来源或出站流量目的地。 这些应该是集群外部 IP,因为 Pod IP 存在时间短暂的且随机产生。

在设计一个 Network Policy 的时候要做哪些事情?

  • 第一件事是控制对象,就像这个实例里面 spec 的部分。spec 里面通过 podSelector 或者 namespace 的selector,可以选择做特定的一组 pod 来接受我们的控制;
  • 第二个就是对流向考虑清楚,需要控制入方向还是出方向?还是两个方向都要控制?
  • 第三个,如果要对选择出来的方向加上控制对象来对它进行描述,具体哪一些 stream可以放进来,或者放出去?类比这个流特征的五元组,可以通过一些选择器来决定哪一些可以作为我的远端,这是对象的选择;也可以通过 IPBlock这种机制来得到对哪些 IP 是可以放行的;最后就是哪些协议或哪些端口。其实流特征综合起来就是一个五元组,会把特定的能够接受的流选择出来 。

实战

创建

创建一个名字为all-port-from-namespace的NetworkPolicy。
这个NetworkPolicy允许internal命名空间下的Pod访问该命名空间下的80端口。
不允许不是internal命令空间的下的Pod访问
不允许访问没有监听80端口的Pod。

all-port-from-namespace.yaml如下:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: all-port-from-namespacenamespace: internal
spec:podSelector: {}policyTypes:- Ingressingress:- from:- podSelector: {}ports:- port: 80protocal: TCP

创建NetworkPolicy all-port-from-namespace

kubectl create -f all-port-from-namespace.yaml


搭建详情请查看k8s学习-CKA真题-网络策略NetworkPolicy

删除

kubectl delete networkpolicy all-port-from-namespace -n internal

参考

k8s - 网络策略
CNCF x 阿里云 网络概念及策略控制

k8s学习-网络策略NetworkPolicy(概念、模版、创建、删除等)相关推荐

  1. 实战:k8s中网络策略实验(成功测试-博客输出)-20211005

    目录 文章目录 目录 写在前面 基础知识 实验环境 原课件内容 1.案例1:拒绝其他命名空间Pod访问 2.案例2:同一个命名空间下应用之间限制访问 3.案例3:只允许指定命名空间中的应用访问 总结 ...

  2. k8s学习-CKA考试必过宝典

    目录 CKA考纲 集群架构,安装和配置:25% 工作负载和调度:15% 服务和网络:20% 存储:10% 故障排除:30% 报名(中国网站) 黑色星期五 预约流程(国外网站) 注册账号 注册考试(购买 ...

  3. k8s学习-思维导图与学习笔记

    目录 前言 k8s思维导图 推荐 书籍 网站 课程 了解与安装 基础 资源调度 服务发布 配置管理 进阶 持久化存储 高级调度 高级 RBAC NetworkPolicy CKA 安全 前言 博主准备 ...

  4. 从零开始入门 K8s | Kubernetes 网络概念及策略控制

    作者 | 阿里巴巴高级技术专家 叶磊 一.Kubernetes 基本网络模型 本文来介绍一下 Kubernetes 对网络模型的一些想法.大家知道 Kubernetes 对于网络具体实现方案,没有什么 ...

  5. 关于 kubernetes网络(CNI规范)中Calico,NetworkPolicy(网络策略)方面的一些笔记

    写在前面 学习k8s遇到整理笔记 博文内容主要涉及 K8s网络理论体系简述 K8s中Calico网络方案容器跨主机通信过程Demo K8s中Calico的实现方案 K8s中网络策略方式:egress和 ...

  6. 关于 Kubernetes中NetworkPolicy(网络策略)方面的一些笔记

    写在前面 学习k8s遇到整理笔记 博文内容主要涉及 Kubernetes网络策略理论简述 K8s中网络策略方式:egress和ingress的Demo ipBlock,namespaceSelecto ...

  7. 浅析 Kubernetes原生NetworkPolicy 网络策略,让更安全的容器运行环境唾手可得

    k8s中的网络策略主要分为原生 NetworkPolicy 和第三方网络插件提供的网络策略.本文将主要分析原生Networkpolicy的网络策略. 什么是网络策略 网络策略(NetworkPolic ...

  8. Kubernetes Egress 网络策略指南

    作者:Viswajith Venugopal 翻译:Bach(才云) 校对:bot(才云).星空下的文仔(才云) Kubernetes 中的网络策略用于指定 Pod 组之间以及其与外部网络端点之间的通 ...

  9. 文章目录 | .NET Core on K8s学习之旅 (更新至20200618)

    .NET Core on K8s学习之旅 更新记录: -- 20200511 增加Ingress & Nginx Ingress介绍 -- 20200515 增加Ocelot API网关集成示 ...

  10. ASP.NET Core on K8s学习之旅(14)Ingress灰度发布

    [云原生]| 作者/Edison Zhou 这是恰童鞋骚年的第236篇原创文章 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,然后我还录了一个快速分享小视频介绍了一 ...

最新文章

  1. 微生物组数据揭示中国稻谷产毒真菌分布及仓储动态变化
  2. python开课吧可以退款吗-做客李晨nic淘宝直播 胡海泉胡彦斌带货开课吧Python
  3. codeforces(牛客网dp专题,排序)
  4. spring 注解简单使用
  5. I love exam HDU - 6968
  6. 狗窝里的小日子 ...
  7. 多线程之Thread类
  8. [Android自定义控件] Android Scroller工具类和GestureDetector的简单用法
  9. Python连接MySQL的实例代码
  10. VUE-CLI可选的配置文件vue.config.js
  11. Cannot load supported formats: Cannot run program svn: CreateProcess error=2, μ
  12. 32bit 天堂2服务端多机负载
  13. mem考试能用计算机吗,Memtest可以通过多少次?
  14. unity 安卓接入科大讯飞 语音合成
  15. 百度地图自定义信息窗口
  16. 使用Markdown写幻灯片之Marp
  17. 用Gradle打包出jar文件 前面我们说过,在Android Studio里面使用Gradle来打包应用程序,一般都是build出来一个apk文件。但是有的同学是做实现层的开发,不直接做View层
  18. 2021-12-11每日刷题打卡
  19. QQmail安装例子
  20. 图解IFRS9 金融工具(7)减值损失披露

热门文章

  1. vue中使用微信聊天表情
  2. 「又报错了TAT」 编译器报错是什么原因error: lvalue required as left operand of assignment|
  3. 移动硬盘在电脑上显示为本地磁盘并且出现打不开的情况
  4. c#仿qq好友列表控件
  5. 【SeedCoder2015年 热身题5 搜索】上上下下ABAB (题目+答案)
  6. Docker run -v 的 rw 和 ro 模式
  7. 用python完成最基础ems项目
  8. 【Course 2 改善深度神经网络】Week 1 深度学习的实用层面
  9. java人员的宝贝:百宝箱。
  10. mac hdmi 外接显示器没声音