当前位置: 首页 > news >正文

【云原生、k8s】Calico网络策略

第四阶段

时  间:2023年8月17日

参加人:全班人员

内  容:

Calico网络策略

目录

一、前提配置

二、Calico网络策略基础

1、创建服务

2、启用网络隔离

3、测试网络隔离

4、允许通过网络策略进行访问

三、Calico网络策略进阶

1、创建服务

2、拒绝所有入口流量

3、允许进入Nginx的流量

4、拒绝所有出口流量

5、允许DNS出口流量

6、允许出口流量到Nginx


一、前提配置

1、主机初始化设置

[root@k8s-master ~]# iptables -F[root@k8s-master ~]# setenforce 0[root@k8s-master ~]# systemctl stop firewalld[root@k8s-master ~]# free[root@k8s-master ~]# sysctl -p

 

2、安装部署k8s集群,并使用calico网络

[root@k8s-master ~]# kubectl get nodes

[root@k8s-master ~]# kubectl get pods -n kube-system

 

二、Calico网络策略基础

1、创建服务

1)创建命名空间

[root@k8s-master ~]# kubectl create ns policy-demo

 

2)在 policy-demo 命名空间中创建两个副本的 Nginx Pod。

[root@k8s-master ~]# vim nginx-deployment.yaml

[root@k8s-master ~]# kubectl apply -f nginx-deployment.yaml

[root@k8s-master ~]# kubectl get pod -n policy-demo

 

3)通过服务暴露 Nginx 的 80 端口。

[root@k8s-master ~]# kubectl expose --namespace=policy-demo deployment nginx --port=80

[root@k8s-master ~]# kubectl get all -n policy-demo

 

4)通过 busybox 的 Pod 去访问 Nginx 服务。

[root@k8s-master ~]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

/ # wget -q nginx -O -

[root@k8s-master ~]# kubectl get all -n policy-demo

2、启用网络隔离

        在 policy-demo 命名空间中打开隔离。然后 Calico 将阻止连接到该命名空间中的 Pod。执行以下命令将创建一个 NetworkPolicy,该策略将对 policy-demo 名称空间中的所有 Pod实现默认的拒绝行为。

[root@k8s-master ~]# kubectl create -f - <<EOFkind: NetworkPolicyapiVersion: networking.k8s.io/v1metadata:name: default-denynamespace: policy-demospec:podSelector:matchLabels: {}EOF

 

3、测试网络隔离

启用网络隔离后,所有对 Nginx 服务的访问都将阻止。执行以下命令,尝试再次访问Nginx 服务,查看网络隔离的效果。

/ # wget -q --timeout=5 nginx -O -

 

4、允许通过网络策略进行访问

        使用 NetworkPolicy 启用对 Nginx 服务的访问。设置允许从 accessPod 传入的连接,但不能从其他任何地方传入。创建 access-nginx 的网络策略具体内容如下所示。

[root@k8s-master ~]# kubectl create -f - <<EOFkind: NetworkPolicyapiVersion: networking.k8s.io/v1metadata:name: access-nginxnamespace: policy-demospec:podSelector:matchLabels:app: nginxingress:- from:- podSelector:matchLabels:run: accessEOF

 

从 accessPod 访问该服务。

[root@k8s-master ~]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh

/ # wget -q --timeout=5 nginx -O -

 

如果没有标记access,仍然无法访问服务。

[root@k8s-master ~]# kubectl run --namespace=policy-demo cant-access --rm -ti --image busybox /bin/sh

/ # wget -q --timeout=5 nginx -O -

[root@k8s-master ~]# kubectl get all -n policy-demo

三、Calico网络策略进阶

1、创建服务

删除命令空间 policy-demo,创建新的命名空间 advanced-policy-demo。

[root@k8s-master ~]# kubectl delete ns policy-demo

[root@k8s-master ~]# kubectl create ns advanced-policy-demo

 

使用 YAML 文件创建 Nginx 服务。

[root@k8s-master ~]# vim nginx-deployment.yaml

[root@k8s-master ~]# kubectl apply -f nginx-deployment.yaml

[root@k8s-master ~]# kubectl expose --namespace=advanced-policy-demo deployment nginx --port=80

[root@k8s-master ~]# kubectl get all -n advanced-policy-demo

 

验证访问权限并访问百度测试外网连通性。

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ #  wget -q --timeout=5 nginx -O -

/ # wget -q --timeout=5 www.baidu.com -O -

[root@k8s-master ~]# kubectl get all -n advanced-policy-demo

2、拒绝所有入口流量

设置网络策略,要求 Nginx 服务拒绝所有入口流量。然后进行访问权限的验证。

[root@k8s-master ~]# kubectl create -f - <<EOFapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: default-deny-ingressnamespace: advanced-policy-demospec:podSelector:matchLabels: {}policyTypes:- IngressEOF

[root@k8s-master ~]# kub        w.baidu.com -O -

        从上述命令执行结果中可以看出,对 Nginx 服务的入口访问被拒绝,而仍然允许对出站 Internet 的出口访问。

3、允许进入Nginx的流量

        执行以下命令,创建一个 NetworkPolicy,设置允许流量从 advanced-policy-demo 命名空间中的任何 Pod 到 Nginx Pod。创建策略成功后,就可以访问 Nginx 服务了。

[root@k8s-master ~]# kubectl create -f - <<EOFapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: access-nginxnamespace: advanced-policy-demospec:podSelector:matchLabels:app: nginxingress:- from:- podSelector:matchLabels: {}EOF

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ # wget -q --timeout=5 nginx -O -

/ # wget -q --timeout=5 www.baidu.com -O -

 

4、拒绝所有出口流量

        设置拒绝所有出口流量的网络策略,该策略设置成功后,任何策略未明确允许的入站或出站流量都将被拒绝。

[root@k8s-master ~]# kubectl create -f - <<EOFapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: default-deny-egressnamespace: advanced-policy-demospec:podSelector:matchLabels: {}policyTypes:- EgressEOF

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ # nslookup nginx

/ # wget -q --timeout=5 nginx -O -

/ # wget -q --timeout=5 www.baidu.com -O -

 

5、允许DNS出口流量

        执行以下命令,在 kube-system 名称空间上创建一个标签。该标签的 NetworkPolicy允许 DNS 从 advanced-policy-demo 名称空间中的任何 Pod 到名称空间 kube-system 的出站流量。

[root@k8s-master ~]# kubectl label namespace kube-system name=kube-system

[root@k8s-master ~]# kubectl create -f - <<EOFapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: allow-dns-accessnamespace: advanced-policy-demospec:podSelector:matchLabels: {}policyTypes:- Egressegress:- to:- namespaceSelector:matchLabels:name: kube-systemports:- protocol: UDPport: 53EOF

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ # nslookup nginx

/ # nslookup www.baidu.com

        即使DNS 出口流量被允许,但来自 Advanced-policy-demo 命名空间中所有 Pod 的所有其他出口流量仍被阻止。因此,来自 wget 调用的 HTTP 出口流量仍将失败。

/ # wget -q --timeout=5 nginx -O -

 

6、允许出口流量到Nginx

        执行以下命令,创建一个 NetworkPolicy,允许从 advanced-policy-demo 名称空间中的任何 Pod 到具有 app: nginx 相同名称空间中标签匹配的 Pod 的出站流量。

[root@k8s-master ~]# kubectl create -f - <<EOFapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: allow-egress-to-advance-policy-nsnamespace: advanced-policy-demospec:podSelector:matchLabels: {}policyTypes:- Egressegress:- to:- podSelector:matchLabels:app: nginxEOF

[root@k8s-master ~]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh

/ # wget -q --timeout=5 nginx -O -

/ # wget -q --timeout=5 www.baidu.com -O -

 

        访问百度超时,是因为它可以解决 DNS 匹配标签以外的其他任何出口访问 app: nginx的 advanced-policy-demo 命名空间。

相关文章:

【云原生、k8s】Calico网络策略

第四阶段 时 间&#xff1a;2023年8月17日 参加人&#xff1a;全班人员 内 容&#xff1a; Calico网络策略 目录 一、前提配置 二、Calico网络策略基础 1、创建服务 2、启用网络隔离 3、测试网络隔离 4、允许通过网络策略进行访问 三、Calico网络策略进阶 1、创…...

Unity3D 测试总结

windows 平台上导出 exe 文件 在Unity界面中&#xff0c;点击菜单栏的“File”&#xff0c;选择“Build Settings”。 在“Build Settings”窗口中&#xff0c;选择要生成的平台&#xff08;例如Windows&#xff09;。 点击“Player Settings”按钮&#xff0c;进入“Player Se…...

【无线点对点网络时延分析和可视化】模拟无线点对点网络中的延迟以及物理层和数据链路层之间的相互作用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

在思科(Cisco)路由器中使用 SNMP

什么是SNMP SNMP&#xff0c;称为简单网络管理协议&#xff0c;被发现可以解决具有复杂网络设备的复杂网络环境&#xff0c;SNMP 使用标准化协议来查询网络上的设备&#xff0c;为网络管理员提供保持网络环境稳定和远离停机所需的重要信息。 为什么要在思科设备中启用SNMP S…...

【压测】wg/wrk 轻量级压测

wg/wrk 轻量级压测 说明&#xff1a;环境是 centos&#xff0c;不过现在 centos 免费版本不再更新和维护了&#xff0c;所以大家可以用阿里云的或者用 ubuntu 内核 用的 https://github.com/wg/wrk.git 有 35k star 然后据我了解&#xff0c;windows 用 wrk 压测有点麻烦&…...

Redis可以用作消息队列吗?如何实现简单的消息队列功能?

是的&#xff0c;Redis可以被用作简单的消息队列。下面是一种实现简单消息队列功能的方式&#xff1a; 生产者&#xff08;Producer&#xff09;端&#xff1a; 使用LPUSH命令将消息推送到一个列表中&#xff0c;作为消息队列的实现。例如&#xff0c;使用LPUSH命令将消息推送到…...

[Java基础]对象转型

系列文章目录 【Java基础】Java总览_小王师傅66的博客-CSDN博客 [Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客 [Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客 Java字节码…...

JVM——类文件结构

文章目录 一 概述二 Class 文件结构总结2.1 魔数2.2 Class 文件版本2.3 常量池2.4 访问标志2.5 当前类索引,父类索引与接口索引集合2.6 字段表集合2.7 方法表集合2.8 属性表集合 一 概述 在 Java 中&#xff0c;JVM 可以理解的代码就叫做字节码&#xff08;即扩展名为 .class …...

银河麒麟服务器v10 sp1 .Net6.0 上传文件错误

上一篇&#xff1a;银河麒麟服务器v10 sp1 部署.Net6.0 http https_csdn_aspnet的博客-CSDN博客 .NET 6之前&#xff0c;在Linux服务器上安装 libgdiplus 即可解决&#xff0c;libgdiplus是System.Drawing.Common原生端跨平台实现的主要提供者&#xff0c;是开源mono项目。地址…...

C#实现普通的语音播报

Windows有文字转语音功能&#xff0c;C#提供了调用的类库Interop.SpeechLib.dll 使用方法很简单&#xff0c;在你的项目中添加Interop.SpeechLib.dll引用&#xff0c;在类中引用&#xff1a; using SpeechLib;这里提供一个CVoice类 帮助实现语音播报 public class CVoice{pri…...

django中实现事务的几种方式

1.实现事务的三种方式 1.1 全局开启事务---> 全局开启事务&#xff0c;绑定的是http请求响应整个过程 DATABASES {default: {#全局开启事务&#xff0c;绑定的是http请求响应整个过程ATOMIC_REQUESTS: True, }} from django.db import transaction# 局部禁用事务 transac…...

【es6】具名组匹配

1、组匹配 正则表达式使用圆括号进行组匹配&#xff0c;如&#xff1a;const RE_DATE /(\d{4})-(\d{2})-(\d{2})/;,三个圆括号形成了三个组匹配。 代码&#xff1a; const RE_DATE /(\d{4})-(\d{2})-(\d{2})/;const matchObj RE_DATE.exec(1999-12-31); const year matchO…...

自然语言处理技术:NLP句法解析树与可视化方法

自然语言处理(Natural Language Processing,NLP)句法解析树是一种表示自然语言句子结构的图形化方式。它帮助将句子中的每个词汇和短语按照语法规则连接起来,形成一个树状结构,以便更好地理解句子的语法结构和含义。句法解析树对于理解句子的句法关系、依存关系以及语义角…...

flinksql报错 Cannot determine simple type name “org“

flink版本 1.15 报错内容 2023-08-17 15:46:02 java.lang.RuntimeException: Could not instantiate generated class WatermarkGenerator$0at org.apache.flink.table.runtime.generated.GeneratedClass.newInstance(GeneratedClass.java:74)at org.apache.flink.table.runt…...

e.target.value和 binding.value 区别

e.target.value 和 binding.value 都是在 Vue.js 中用于处理事件绑定时的值&#xff0c;但它们的使用场景和含义有所不同&#xff0c;分别用于普通的 DOM 事件和自定义指令。 e.target.value&#xff1a; 这是常用于原生 DOM 事件处理函数中的一个属性&#xff0c;用于获取事件…...

软链接与exec进程替换运行路径问题

目录 1. 代码&#xff08;1&#xff09;启动进程execvp&#xff08;2&#xff09;替换的新进程new_proc 2. 验证&#xff08;1&#xff09;new_proc与execvp源文件同一目录&#xff08;2&#xff09;new_proc与execvp软链接同一目录 3. 总结4. errno.h 用execvp软链接启动进程&…...

【Go】锁相关

文章目录 Mutex锁mutex源码分析LockUnLock mutex两种运行模式mutex normal 正常模式自旋 mutex starvation 饥饿模式 锁的底层实现类型 RWMutexRWMutex 实现其他共享内存线程安全的方式 思考如何设计一个并发更高的锁&#xff1f; Mutex锁 mutex源码分析 Locker接口&#xff…...

git环境超详细配置说明

一&#xff0c;简介 在git工具安装完成之后&#xff0c;需要设置一下常用的配置&#xff0c;如邮箱&#xff0c;缩写&#xff0c;以及git commit模板等等。本文就来详细介绍些各个配置如何操作&#xff0c;供参考。 二&#xff0c;配置步骤 2.1 查看当前git的配置 git conf…...

使用阿里云服务器搭建PostgreSQL主从架构图文流程

阿里云百科分享使用阿里云服务器搭建PostgreSQL主从架构图文流程&#xff0c;PostgreSQL被业界誉为最先进的开源数据库&#xff0c;支持NoSQL数据类型&#xff08;JSON/XML/hstore&#xff09;。本文档介绍在CentOS 7操作系统的ECS实例上搭建PostgreSQL主从架构的操作步骤。 目…...

Linux的基本权限(文件,目录)

文章目录 前言一、Linux权限的概念二、Linux权限管理 1.文件访问者分类2.文件类型和访问类型3.文件访问权限的相关设置方法三、目录的权限四、权限的总结 前言 Linux下一切皆文件&#xff0c;指令的本质就是可执行文件&#xff0c;直接安装到了系统的某种路径下 一、Linux权限的…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识&#xff1a;什么是 B-Tree 和 BTree&#xff1f; B-Tree&#xff08;平衡多路查找树&#xff09; BTree&#xff08;B-Tree 的变种&#xff09; 二、结构对比&#xff1a;一张图看懂 三、为什么 MySQL InnoDB 选择 BTree&#xff1f; 1. 范围查询更快 2…...

淘宝扭蛋机小程序系统开发:打造互动性强的购物平台

淘宝扭蛋机小程序系统的开发&#xff0c;旨在打造一个互动性强的购物平台&#xff0c;让用户在购物的同时&#xff0c;能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机&#xff0c;实现旋转、抽拉等动作&#xff0c;增…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...