k8s网路策略
Network Policy(网络策略)
默认情况下,k8s集群网络是没有任何限制的,Pod可以和任何其他Pod通信,在某些场景下需要做网络控制,减少网络面的攻击,提高安全性,就会用到网络策略(Network Policy)。为了使用Network Policy,K8s引入了一个新的资源对象NetworkPolicy,供用户设置Pod间网络访问的策略。但仅定义一个网络策略是无法完成实际的网络隔离的,还需要一个策略控制器(Policy Controller)进行策略的实现。策略控制器由第三方网络组件提供,目前Calico、Cilium、Kube-router、Romana、Weave Net等开源项目均支持网络策略的实现。
Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制,设置方式为将Pod的Label作为查询条件,设置允许访问或禁止访问的客户端Pod列表。目前查询条件可以作用于Pod和Namespace级别。
网路策略的使用场景:
- 应用程序之间访问控制,例如A不能访问B的Pod
- 开发环境命名空间不能访问测试环境命名空间的Pod
- 当Pod暴露到外部时,需要做Pod的白名单
- 多租户网络环境隔离
网络策略示例:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default #针对default命名空间做网络策略
spec:
podSelector: #pod标签选择,针对default命名空间下的含有role=db的pod做限制
matchLabels:
role: db #pod标签
policyTypes: #网络策略
- Ingress #针对访问default命名空间下含有role=db标签的pod做限制
- Egress #针对default命名空间下含有role=db标签的pod做访问外部的限制
ingress: #外部访问含有标签的pod白名单
- from:
- ipBlock:
cidr: 172.17.0.0/16 #只允许访问的IP段
except:
- 172.17.1.0/24 #在上面的基础上,不允许这些IP访问
- namespaceSelector: #针对命名空间做限制
matchLabels:
project: myproject #允许这个命名空间下的pod访问
- podSelector: #pod选择,如果没有则默认上面命名空间中的所有pod允许访问
matchLabels:
role: frontend #允许myproject下的这个pod访问
ports:
- protocol: TCP #允许访问的网络协议
port: 6379 #允许访问的端口
egress: #针对default空间下含有role=db的标签访问外部策略
- to:
- ipBlock:
cidr: 10.0.0.0/24 #允许访问的IP段
ports:
- protocol: TCP #网路协议
port: 5978 #允许访问的端口
案例一
test命名空间下pod可以相互访问,拒绝其他命名空间所有pod访问,但是可以访问其他命名空间。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: reject-all-ingress
namespace:test
spec:
podSelector: {} #未配置,匹配本命名空间下所有pod
policyTypes:
- Ingress
ingress:
- form:
- podSelector: {} #未配置,匹配本命名空间下所有pod
案例二
同一命名空间下应用之间的限制访问:
test命名空间下标签为app=db的pod不允许被访问,只允许test命名空间下标签为app=web的标签访问3306端口
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-db-ingress
namespace:test
spec:
podSelector:
matchLabels:
app=db
policyTypes:
- Ingress
ingress:
- form:
- podSelector:
matchLabels:
app=web
ports:
- protocol: TCP
port: 3306
案例三
只允许指定命名空间下的应用访问
以上面为例,指定test2命名空间下的pod访问test命名空间下的app=db的pod的3306端口,其他的都不允许访问。
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: web-db-ingress
namespace:test
spec:
podSelector:
matchLabels:
app=db
policyTypes:
- Ingress
ingress:
- form:
- namespaceSelector:
matchLabels:
name: test2
ports:
- protocol: TCP
port: 3306
k8s网路策略的更多相关文章
- K8s预选策略和优选函数简介
调度器选择策略: 预选策略(Predicate) 1. 根据运行Pod的资源限制来排除不符合要求的Node 2. 根据运行Pod时,是否要求共享宿主机的网络名称空间来判断,如: 某Pod启动要共享宿主 ...
- 041.Kubernetes集群网络-K8S网络策略
一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...
- K8S发布策略,无损发布
大家好,相信大部分公司都已经使用K8S进行容器管理和编排了,但是关于K8S的发布策略,还有很多同学不太清楚,通过这篇文章的介绍,相信大家对目前K8S的发布情况有一个概括的认识.总结下来,共有如下几种: ...
- k8s重启策略
Pod 的重启策略有 3 种,默认值为 Always. Always : 容器失效时,kubelet 自动重启该容器: OnFailure : 容器终止运行且退出码不为0时重启: Never : 不论 ...
- 十四,K8s集群网络flannel及canal策略
目录 k8s网络CNI之flannel k8s网络通信模型 常见CNI插件(Container,Network,Interface) 插件通信一般的解决方案 网络插件的应用 Flannel插件 fla ...
- K8s创建pod yaml文件详解
kubernetes创建pod的yaml文件,参数说明 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 ...
- k8s之yaml详解
k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...
- K8S创建的相关yaml文件
一.K8S-yaml的使用及命令 YAML配置文件管理对象 对象管理: # 创建deployment资源 kubectl create -f nginx-deployment.yaml # 查看dep ...
- k8s补充
k8s补充 容器云发展及主要内容 1.云计算,交付标准(iaas--openstack) 国内:阿里云一华为云(振兴杯)百度云(私有云) 国外:AWS 2.平台即服务(PAAS) 例如:新浪云(号称免 ...
- Centos7 安装部署Kubernetes(k8s)集群
目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kubernetes 组件 3.2.1 控制平面组件 3.2.2 Node组件 四.安装部署Kubernetes集群 4. ...
随机推荐
- JavaScript:七大基础数据类型:布尔值boolean、空null、未定义undefined
布尔值boolean 没什么好说的,同其他编程语言一样,就两个值:true 和 false: 空null JS的null,和Java等编程语言的概念不一样,它不是一个"不存在的对象" ...
- SpringBoot基础学习笔记
Springboot框架: springboot官网参考 Sringboot是整合spring技术栈的一站式框架,其简化配置,实现了自动化配置 Springboot基础结构: 1.pom.xml文件: ...
- [ 赛后总结 ] CSP-J 2022
前言 今年没考好,估分 100+60+0+10=170pts ,大概能混个2=,没什么用. 这下好了,期中也砸了,已经排到全校 30 开外了,果然鱼和熊掌不可兼得,况且我双双落空,接下来怕是想搞也搞不 ...
- JUC并发编程详解(通俗易懂)
一.JUC简介 在Java5.0提供了java.util.concurrent包,简称JUC,即Java并发编程工具包.JUC更好的支持高并发任务. 具体的有以下三个包: java.util.conc ...
- 狂神——SpringSecurity入门例子(设置不同用户访问权限)
文章目录 简介 SpringSecurity环境搭建 实现界面的路由跳转 效果 用户认证和授权 授权 认证 效果 注销及权限控制 注销 权限控制 记住我及首页定制 参考资料 简介 狂神的Springb ...
- 拜占庭将军问题与CAP
1.拜占庭将军问题 拜占庭位于如今的土耳其的伊斯坦布尔,是东罗马帝国的首都.由于当时拜占庭罗马帝国国土辽阔,为了达到防御目的,每个军队都分隔很远,将军与将军之间只能靠信差传消息.在战争的时候,拜占庭军 ...
- 「HNOI2019」校园旅行
将相邻且颜色相同的点视作一个连通块,若该连通块是二分图,那么从连通块中一点\(x\)到连通块中一点\(y\)的路径的奇偶性确定 所以对于块外一点\(x\)到块内一点\(y\),可以将它们的路径在连通块 ...
- Python解释器下载与安装
Python解释器下载与安装 一.Python解释器 1.Python的发展方向 web方向,自动化运维,自动化测试,自动化办公,网络爬虫,金融量化,人工智能,机器学习,数据分析 2.Python解释 ...
- 主线程-创建Thread类的子类
主线程 Java使用java.lang.Thread类代表线程,所有的线程对象都必须是Thread类或其子类的实例.每个线程的作用是完成一定的任务,实际上就是执行一段程序流即一段顺序执行的代码.Jav ...
- RocketMQ Streams 1.1.0: 轻量级流处理再出发
本文作者:倪泽,Apache RocketMQ committer.RSQLDB/RocketMQ Streams Maintainer 01 背景 RocketMQ Streams是一款基于Rock ...