4.k8s-配置网络策略 NetworkPolicy
一、基本了解
官方文档:https://kubernetes.io/zh-cn/docs/concepts/services-networking/network-policies/
基本了解:
1.网络策略通过网络插件来实现,创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话,是没有任何作用的,而我们搭建K8s集群时安装的calico网络组件就支持网络策略
2.默认情况下,K8s 集群网络没任何网络限制,Pod 可以与任何其他 Pod 通信,在某些场景下就需要进行网络控制,减少网络攻击面,提高安全性,这就会用到网络策略。
3.网络策略是一个K8s资源,需要管理员写yaml定义规则的,用于限制Pod出入流量,提供Pod级别和Namespace级别网络访问控制。 应用场景:
1.应用程序间的访问控制,例如项目A不能访问项目B的Pod。
2.开发环境命名空间不能访问测试环境命名空间Pod。
3.当Pod暴露到外部时,需要做Pod白名单。
4.多租户网络环境隔离。 网络策略工作流程:
1. 使用kubectl提交yaml文件给api server创建Network Policy资源。
2. api server 收到之后存到etcd数据库中。
3. Policy Controller组件监控网络策略,同步并通知节点上程序。
4. 节点上DaemonSet运行的程序从etcd中获取Policy,调用本地Iptables创建防火墙规则 注意事项:
1.calico网络组件是以Daemonset方式部署到每个节点,其中红色框的pod负责calico录入表的维护,网络策略的执行和下发。
2.有的网络组件没有controllers控制器:calico-kube-controllers,只有agent-pod:calico-node
3.也有特定需求是网络策略当前实现不了的,可以通过操作系统组件、准入控制器来实现
题目一:
设置配置环境:
[candidate@node-1] $ kubectl config use-context hk8s Task
在现有的 namespace my-app 中创建一个名为 allow-port-from-namespace 的新 NetworkPolicy。
确保新的 NetworkPolicy 允许 namespace echo 中的 Pods 连接到 namespace my-app 中的 Pods 的 9000 端口。
进一步确保新的 NetworkPolicy:
-- 不允许对没有在监听 端口 9000 的 Pods 的访问
-- 不允许非来自 namespace echo 中的 Pods 的访问
# 解答:
# 1.更换配置环境
kubectl config use-context hk8s
# 如果没有创建名称空间:创建名称空间
kubectl create ns my-app
kubectl create ns echo # 2.查看 namespace echo 的标签
[root@master2 etcd]# kubectl get ns --show-labels
NAME STATUS AGE LABELS
echo Active 19s kubernetes.io/metadata.name=echo
my-app Active 18m kubernetes.io/metadata.name=my-app # 如果访问者的 namespace 没有标签 label,则需要手动打一个。如果有一个独特的标签 label,则也可以直接使用。
[root@master2 etcd]# kubectl label ns echo project=echo
namespace/echo labeled [root@master2 etcd]# kubectl get ns --show-labels
NAME STATUS AGE LABELS
echo Active 90s kubernetes.io/metadata.name=echo,project=echo
my-app Active 19m kubernetes.io/metadata.name=my-app # 3.创建 networkpolicy
vim networkpolicy.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace
namespace: my-app #被访问者的命名空间
spec:
podSelector: #这两行必须要写,或者也可以写成一行为 podSelector: {}
matchLabels: {} # 注意 matchLabels:与{}之间有一个空格
policyTypes:
- Ingress #策略影响入栈流量
ingress:
- from: #允许流量的来源
- namespaceSelector:
matchLabels:
project: echo #访问者的命名空间的标签 label
#- podSelector: {} #注意,这个不写。如果 ingress 里也写了- podSelector: {},则会导致 my-app 中的 pod 可以访问 my-app 中 pod 的 9000 了,这样不 满足题目要求不允许非来自 namespace echo 中的 Pods 的访问。
ports:
- protocol: TCP
port: 9000 #被访问者公开的端口 [root@master2 networkpolicy]# kubectl apply -f networkpolicy.yaml
networkpolicy.networking.k8s.io/allow-port-from-namespace created [root@master2 networkpolicy]# kubectl describe networkpolicy -n my-app
Name: allow-port-from-namespace
Namespace: my-app
Created on: 2024-01-11 13:28:35 +0800 CST
Labels: <none>
Annotations: <none>
Spec:
PodSelector: <none> (Allowing the specific traffic to all pods in this namespace)
Allowing ingress traffic:
To Port: <any> (traffic allowed to all ports)
From:
NamespaceSelector: project=echo
----------
To Port: 9000/TCP
From: <any> (traffic not restricted by source)
Not affecting egress traffic
Policy Types: Ingress
题目二:
设置配置环境kubectl config use-context k8s 创建一个名为allow-port-from-namespace2的新NetworkPolicy,以允许现有namespace my-app中的Pods连接到同一namespace中其他pods的端口9200。 确保新的NetworkPolicy:
-- 不允许对没有在监听端口9200的pods访问
-- 不允许不来自namespace my-app的pods的访问
# 解答:
1.切换环境:
kubectl config use-context k8s #2. 查看my-app标签以及如果没有就打上标签
[root@master k8s]# kubectl label ns my-app project=my-app
namespace/my-app labeled # 3.编写networkpolicy-2.yaml文件
[root@master2 networkpolicy]# cat networkpolicy-2.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-port-from-namespace2
namespace: my-app
spec:
podSelector:
matchLabels: { }
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
project: my-app
ports:
- protocol: TCP
port: 9200 [root@master2 networkpolicy]# kubectl apply -f networkpolicy-2.yaml
networkpolicy.networking.k8s.io/allow-port-from-namespace2 created
[root@master2 networkpolicy]# kubectl describe networkpolicy allow-port-from-namespace2 -n my-app
Name: allow-port-from-namespace2
Namespace: my-app
Created on: 2024-01-11 13:54:30 +0800 CST
Labels: <none>
Annotations: <none>
Spec:
PodSelector: <none> (Allowing the specific traffic to all pods in this namespace)
Allowing ingress traffic:
To Port: 9200/TCP
From:
NamespaceSelector: project=my-app
Not affecting egress traffic
Policy Types: Ingress
4.k8s-配置网络策略 NetworkPolicy的更多相关文章
- 配置网络策略中的 NAP 条件
TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 按类别提供的 Windows Server 内容 Win ...
- 041.Kubernetes集群网络-K8S网络策略
一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...
- Kubernetes学习之路(二十一)之网络模型和网络策略
目录 Kubernetes的网络模型和网络策略 1.Kubernetes网络模型和CNI插件 1.1.Docker网络模型 1.2.Kubernetes网络模型 1.3.Flannel网络插件 1.4 ...
- k8s的网络
K8S的网络中主要存在4种类型的通信: ①同一Pod内的容器间通信 ②各个Pod彼此间的通信 ③Pod和Service间的通信 ④集群外部流量和Service之间的通信 K8S为Pod和Ser ...
- 网络策略中使用的 VLAN 属性
TechNet 库 Windows Server Windows Server 2008 R2 und Windows Server 2008 按类别提供的 Windows Server 内容 Win ...
- Kubernetes之canal的网络策略(NetworkPolicy)
安装要求: 1.我们这里安装的是3.3的版本.kubernetes的要求: 支持的版本 1.10 1.11 1.12 2.CNI插件需要启用,Calico安装为CNI插件.必须通过传递--networ ...
- k8s基于canel的网络策略
Kubernetes能够把集群中不同Node节点上的Pod连接起来,并且默认情况下,每个Pod之间是可以相互访问的.但在某些场景中,不同的Pod不应该互通,这个时候就需要进行访问控制.亲测:在kube ...
- k8s之网络插件flannel及基于Calico的网络策略
1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...
- k8s系列---基于canal的网络策略
文章拷自:http://blog.itpub.net/28916011/viewspace-2215383/ 加上自己遇到的问题简单记录 安装文档:https://docs.projectcalico ...
- NetworkPolicy网络策略以及举例说明
网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范.NetworkPolicy 资源使用标签选择pod,并定义选定pod所允许的通信规则. 前提 网 ...
随机推荐
- JavaScript知识总结 原型篇
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 1. 对原型.原型链的理解 在JavaScript中是使用构造函数来新建一个对象的,每一个构造函数的内部都有一个 prototype 属性 ...
- MindSponge分子动力学模拟——自建力场(2024.03)
技术背景 在MindSponge教程合集中我们已经介绍了很多使用MindSponge进行分子动力学模拟的方法,这里主要介绍在MindSponge中自定义一个力场.在传统的MD软件中,如果你希望去开发一 ...
- ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接
ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接 是因为使用urlopen方法太过频繁,引起远程主机的怀疑,被网站认定为是攻击行为.导致u ...
- drools中使用function
一.背景 当我们在drools中编写规则时,有些时候存在重复的代码,那么我们是否可以将这些重复代码抽取出来,封装成一个function来调用呢?那么在drools中如何自定义function? 二.需 ...
- KingbaseES 如何查看表的创建时间
前言 在oracle数据库中,我们可以查看数据字典dba_objects得到表的创建时间.在Kingbase中如何查看表的创建时间呢?Kingbase数据库中无法通过数据字典查看有关信息,但可以通过其 ...
- #最大密度子图,0/1分数规划#UVA1389 Hard Life
题目 \(n\) 个点,\(m\) 条边的一个无向图,问导出子图的边数除以点数的最大值 分析 考虑二分这个答案,也就是0/1分数规划之后转换成 \(E-mid*V>0\) 这个问题虽然可以精确到 ...
- #容斥,莫比乌斯函数#洛谷 2231 [HNOI2002]跳蚤
题目 分析 考虑公约数为\(x\)很好做,就是\(\lfloor\frac{m}{x}\rfloor^n\), 这可以用枚举约数实现容斥当然也可以用莫比乌斯函数, 答案也就是\(\sum_{d|m}\ ...
- 使用 rollup 打包可按需加载的 NPM 包
安装 rollup npm install rollup --save-dev 配置文件 rollup.config.js export default { input: 'src/index.js' ...
- 及刻周边惠:拥抱HarmonyOS原子化服务
原文链接:https://mp.weixin.qq.com/s/Y75eiRlvDLXzoZWzAiZdeg,点击链接查看更多技术内容: 开发背景 及刻周边惠是梦享网络旗下本地生活服务平台,旨在为消费 ...
- HarmonyOS线上Codelabs系列挑战赛第二期:调用三方库,制作酷炫的视觉效果
HarmonyOS线上Codelabs系列挑战赛正如火如荼进行中,开发者们可以通过体验基于HarmonyOS特性和能力的应用开发,快速构建有趣.有用的应用程序.火速加入,与众多开发者一起碰撞想法, ...