基于canel的网络策略

article/2025/10/3 12:16:29

基于canel的网络策略

canel工作的默认网段是192.168.0.0/16的网段

官网:https://docs.projectcalico.org/v3.2/introduction/

参考地址:
https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel

分别运行:
kubectl apply -f \
https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/canal/rbac.yaml

kubectl apply -f \
https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/hosted/canal/canal.yaml

监控:
kubectl get pods -n kube-system -w[root@master ~]# kubectl get pods -n kube-system
NAME                                   READY     STATUS    RESTARTS   AGE
canal-98mcn                            3/3       Running   0          3m
canal-gnp5r                            3/3       Running   0          3m
coredns-78fcdf6894-27npt               1/1       Running   1          12d
coredns-78fcdf6894-mbg8n               1/1       Running   1          12d
etcd-master                            1/1       Running   1          12d
kube-apiserver-master                  1/1       Running   1          12d
kube-controller-manager-master         1/1       Running   1          12d
kube-flannel-ds-amd64-6ws6q            1/1       Running   0          1h
kube-flannel-ds-amd64-mg9sm            1/1       Running   0          1h
kube-flannel-ds-amd64-sq9wj            1/1       Running   0          1h
kube-proxy-g9n4d                       1/1       Running   1          12d
kube-proxy-wrqt8                       1/1       Running   2          12d
kube-proxy-x7vc2                       1/1       Running   0          12d
kube-scheduler-master                  1/1       Running   1          12d
kubernetes-dashboard-767dc7d4d-7rmp8   1/1       Running   0          2d

查看帮助:
kubectl explain networkpolicy.spec

网络策略:
    名称空间:
        拒绝所有的出站,入站。
        放行所有出站目标本名称空间内的所有Pod

开始试验:
[root@master networkpolicy]# kubectl create namespace dev
namespace/dev created
[root@master networkpolicy]# kubectl create namespace prod
namespace/prod created创建yaml文件
[root@master networkpolicy]# cat ingres-def.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-ingress#namespace: dev
spec:podSelector: {}  #空选择器代表命苦空间所有的PodpolicyTypes:- Ingress#如果不写Ingress的话,默认都可以访问#如果写上Ingress的话,默认都不能访问[root@master networkpolicy]# kubectl apply -f ingres-def.yaml -n dev
networkpolicy.networking.k8s.io/deny-all-ingress created
-n 是指定的名称空间dev[root@master networkpolicy]# kubectl get netpol -n dev
NAME               POD-SELECTOR   AGE
deny-all-ingress   <none>         39s创建一个web yaml
[root@master networkpolicy]# vim pod-a.yaml
[root@master networkpolicy]# kubectl apply -f pod-a.yaml -n dev
pod/pod1 created
[root@master networkpolicy]# cat pod-a.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod1
spec:containers:- name: myappimage: ikubernetes/myapp:v1[root@master networkpolicy]# kubectl get pods
No resources found.
[root@master networkpolicy]# kubectl get pods -n dev
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          50s[root@master networkpolicy]# kubectl get pods -n dev -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP           NODE      NOMINATED NODE
pod1      1/1       Running   0          1m        10.244.2.2   node2     <none>
[root@master networkpolicy]# curl 10.244.2.2发现是访问不了的更换一下名称空间:
[root@master networkpolicy]# kubectl apply -f pod-a.yaml -n prod
pod/pod1 created
[root@master networkpolicy]# kubectl get pods -n prod
NAME      READY     STATUS    RESTARTS   AGE
pod1      1/1       Running   0          8s
[root@master networkpolicy]# kubectl get pods -n prod -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP           NODE      NOMINATED NODE
pod1      1/1       Running   0          13s       10.244.1.2   node1     <none>
[root@master networkpolicy]# curl 10.244.1.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
发现是可以访问的
因为在dev中Ingress中定义了不能访问[root@master networkpolicy]# kubectl get pods -n prod -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP           NODE      NOMINATED NODE
pod1      1/1       Running   0          3m        10.244.1.2   node1     <none>
[root@master networkpolicy]# kubectl get pods -n dev -o wide
NAME      READY     STATUS    RESTARTS   AGE       IP           NODE      NOMINATED NODE
pod1      1/1       Running   0          7m        10.244.2.2   node2     <none>
可以看出,prod和dev不同的命名空间都有一个pods
[root@master networkpolicy]# curl 10.244.1.2  #可以
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@master networkpolicy]# curl 10.244.2.2   #NO
^C现在放行2.2
dev是默认拒绝一切规则的,他可以请求别人
[root@master networkpolicy]# vim ingres-def.yaml 
[root@master networkpolicy]# kubectl apply -f ingres-def.yaml -n dev
networkpolicy.networking.k8s.io/deny-all-ingress configured
[root@master networkpolicy]# cat ingres-def.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-ingress#namespace: dev
spec:podSelector: {}  #空选择器代表命苦空间所有的Podingress:- {}  #允许所有的入栈规则policyTypes:- Ingress#如果不写Ingress的话,默认都可以访问#如果写上Ingress的话,默认都不能访问再次访问:
[root@master networkpolicy]# curl 10.244.2.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
可以访问了打一个标签,可以设置标签为myapp的特定访问kubectl label pods pod1 app=myapp -n dev
[root@master networkpolicy]# kubectl label pods pod1 app=myapp -n dev
pod/pod1 labeled[root@master networkpolicy]# cat allow-netpol-demo.yaml 
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: allow-myapp-ingress
spec:podSelector:matchLabels:app: myappingress:- from:- ipBlock: #ip 网段cidr: 10.244.0.0/16  #排除的网段except:- 10.244.1.2/32  #允许的网段ports:- protocol: TCPport: 80[root@master networkpolicy]# kubectl apply -f allow-netpol-demo.yaml -n dev
networkpolicy.networking.k8s.io/allow-myapp-ingress created[root@master networkpolicy]# kubectl get netpol -n dev
NAME                  POD-SELECTOR   AGE
allow-myapp-ingress   app=myapp      2m
deny-all-ingress      <none>         36m[root@master networkpolicy]# curl 10.244.2.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
生效了
#允许出战[root@master networkpolicy]# vim egress-def.yaml apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-egress
spec:podSelector: {}egress:- {}policyTypes:- Egress#拒绝出站[root@master networkpolicy]# vim egress-def.yaml apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-all-egress
spec:podSelector: {}policyTypes:- Egress

 

 


http://chatgpt.dhexx.cn/article/LZlivqQO.shtml

相关文章

REDIS11_缓存和数据库一致性如何保证、解决方案、提供Canel解决数据一致性问题

文章目录 ①. 缓存和数据库双写一致保证②. 缓存数据一致性-解决方案③. 缓存数据一致性-解决-Canal ①. 缓存和数据库双写一致保证 ①. 只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题 ②. 那么,如何解决一致性问题&#xff1f;提…

binlog+canel windows服务器下mysql数据的部署过程

1.开启mysql的binlog功能&#xff0c;并配置binlog模式为row。 1.1windos下修改mysql的my.ini文件&#xff08;该文件在C:\ProgramData\MySQL\MySQL Server 5.7&#xff0c;而不是C:\Program Files\MySQL\MySQL Server 5.7下的my-default.ini文件&#xff0c;C:\Pr…

十九、基于canel的网络策略

说明 Calico的官方地址&#xff1a;https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/flannel 安装canel之前需要注意 如果您使用的是pod CIDR 10.244.0.0/16&#xff0c;请跳至下一步。如果您使用的是其他pod CIDR&#xff0c;请使用以下命令设…

canel-1.1.5 canal.deployer安装

简介 canal [kə’nl]&#xff0c;译意为水道/管道/沟渠&#xff0c;主要用途是基于 MySQL 数据库增量日志解析&#xff0c;提供增量数据订阅和消费 工作原理 canal 模拟 MySQL slave 的交互协议&#xff0c;伪装自己为 MySQL slave &#xff0c;向 MySQL master 发送 dump 协…

Kubernetes基于canel的网络策略

Calico的官方地址&#xff1a;https://docs.projectcalico.org/v3.8/getting-started/kubernetes/installation/flannel 安装canel之前需要注意 如果您使用的是pod CIDR 10.244.0.0/16&#xff0c;请跳至下一步。如果您使用的是其他pod CIDR&#xff0c;请使用以下命令设置一个…

binlog以及Canel

一、NDB存储引擎 在介绍binlog之前,需要先了解一下NDB NDB 存储引擎也叫NDB Cluster 存储引擎,主要用于MySQL Cluster 分布式集群环境。 NDB特点: • 分布式:分布式存储引擎,可以由多个NDBCluster存储引擎组成集群分别存放整体数据的一部分 • 支持事务:和Innodb一样…

canel的网络策略

资源&#xff1a; https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel 基于pod Egress 是Pod作为客户端(需要定义目标端口和目标地址) ingress 是pod作为服务端(需要定义目标地址和pod自己的端口) canel工作的默认网段是192.168.0.0/16的网…

超详细的Canal入门,看这篇就够了!

思维导图 文章已收录Github精选&#xff0c;欢迎Star&#xff1a;https://github.com/yehongzhi/learningSummary 前言 我们都知道一个系统最重要的是数据&#xff0c;数据是保存在数据库里。但是很多时候不单止要保存在数据库中&#xff0c;还要同步保存到Elastic Search、HB…

数据同步神器Canel-day01

背景 关于数据同步的方式有很多种&#xff0c;现在有一个场景需要将mysql数据库的数据主动同步到我们的工程中&#xff0c;并且能再mysql数据库客户端更改某一行的数据也能将数据同步到另一个数据库或者工程中&#xff0c;对于这种场景的使用我们应该怎么去实现呢&#xff1f;…

Canal使用流程、部署安装文档

文章目录 背景信息使用流程步骤一&#xff1a;准备MySQL数据源步骤二&#xff1a;创建索引步骤三&#xff1a;安装并启动Canal-server(Deployer)步骤四&#xff1a;部署Client-Adapter步骤五&#xff1a;验证增量数据同步步骤六&#xff1a;同步MySQL全量数据&#xff08;如果不…

Canel-简介使用

简介 canal 的工作原理 MySQL 主从复制过程 ➢ Master 主库将改变记录&#xff0c;写到二进制日志(binary log)中 ➢ Slave 从库向 mysql master 发送 dump 协议&#xff0c;将 master 主库的 binary log events 拷贝到它的中继日志(relay log)&#xff1b; ➢ Slave 从…

检查页面Session是否过期,过期执行相应操作 解决方法

how to check session is expired or not if expired then redirect to login page 在项目中&#xff0c;如果客户打开页面时间过久容易导致页面Session过期&#xff0c;再进行任何操作时都会提示“Asp.Net session has expired”&#xff0c;这样毕竟都用户不太友好&#xff0…

thinkphp如何有效的设置session过期时间

thinkphp提供了一个参数让我们配置session过期时间。 SESSION_OPTIONS array(expire > 3600 ); 然而这一配置是否真的有效&#xff1f;在多次测试之后&#xff0c;不遂人意。 why&#xff1f;那我们试着从源码上分析这个配置参数的&#xff0c;它是怎么让尝试着然我们的…

session过期时间设置

设置session过期有三种方法&#xff1a; 1.在tomcat中进行设置 tomcat的conf文件下的&#xff0c;web.xml文件中 tomcat默认session超时时间为30分钟&#xff0c;可以根据需要修改&#xff0c;负数或0为不限制session失效时间 这里要注意这个session设置的时间是根据服务器来…

springboot+shiro中自定义session过期时间

在springboot工程中&#xff0c;使用shiro作为权限框架&#xff0c;并采用redis来管理session时&#xff0c;如何自定义session过期时间&#xff1f; 上面与会话或缓存相关的组件有&#xff1a; Session Manager&#xff1a;会话管理器Session DAO&#xff1a;会话 DAO&#…

JAVA WEB 设置session过期时间

1.在web容器中设置 &#xff08;以tomcat为例,Tomcat默认session超时时间为30分钟&#xff09; 在tomcat/conf/web.xml里面进行配置&#xff0c;单位是分钟&#xff0c;永不过期可以设置-1 <session-config> <!-- 时间单位为分钟--> <session-timeout>30&…

springboot2.0设置session过期时间。

目的&#xff1a;springboot2.0设置session过期时间。 网上很多设置 springboot session 过期时间&#xff0c;已经不适合 springboot2.0. 下面这个我亲测有效。 请注意格式&#xff1a;我这个用的是 application.yml servlet:session:timeout: 3600s 所有文章优先发布在个人…

Java 设置session过期时间

设置session过期或超时时间 设置session的过期或超时时间&#xff0c;有三个地方&#xff1a; a、tomcat的web.xml中&#xff0c;该单位为分&#xff1a; Xml代码 <session-config> <session-timeout>720</session-timeout> </session-config>…

web 项目中设置session过期时间

java web项目中要想设置session过期时间&#xff0c;有三种设置方法&#xff0c;都是给与某个过期时间值&#xff0c;其中-1 代表session永远不会过期。 1. 第一种方式&#xff1a;通过代码设置方式&#xff0c;其中600表示600秒 2. 第二种方式&#xff1a;通过web.xml方式&am…

session会话过期时间设置

具体设置很简单&#xff0c;方法有三种&#xff1a; &#xff08;1&#xff09;在主页面或者公共页面中加入&#xff1a;session.setMaxInactiveInterval(900); 参数900单位是秒&#xff0c;即在没有活动15分钟后&#xff0c;session将失效。设置为-1将永不关闭。 这里要注意…