千家信息网

docker中k8s基于canal的网络策略是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍了docker中k8s基于canal的网络策略是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前提条件1、kube
千家信息网最后更新 2026年11月03日docker中k8s基于canal的网络策略是什么

这篇文章主要介绍了docker中k8s基于canal的网络策略是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

前提条件

1、kubelet必须配置为CNI网络插件(即--network-plugin-cni,默认新版本默认就是CNI)

2、kube-proxy必须以iptables模式启动,不能以ipvs方式启动;

3、kube-proxy不能以--masquerade-all方式启动,因为这和calico策略冲突;

4、k8s版本至少要v1.3.0

部署canal

1、

[root@master ~]# kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml

2、

[root@master ~]# kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml

3、

[root@master ~]# kubectl get pods -n kube-system -o wideNAME                                   READY     STATUS    RESTARTS   AGE       IP             NODEcanal-7q4k7                            3/3       Running   0          4m        172.16.1.101   node1canal-dk2tc                            3/3       Running   0          4m        172.16.1.102   node2canal-zr8l4                            3/3       Running   0          4m        172.16.1.100   master

看到每个pod上都有3个容器,这三个容器有各自不同的功能。


Egres:出站,表示pod自己是客户端,访问别人。

Ingress:入站,表示Pod自己是目标,别人来访问自己。

通常,客户端的端口是随机的,服务端的端口是固定的。

Network Policy:用来控制哪个pod来和外部或内部进行通信。

podSelecto:pod选择器

policyTypes:用来控制Ingres和Egres哪个生效。

例子

建立两个名称空间,一个是测试,一个是生产。

[root@master ~]# kubectl create namespace devnamespace/dev created[root@master ~]# kubectl create namespace prodnamespace/prod created

建立网络策略:

[root@master ~]# mkdir networkpolicy[root@master ~]# cd networkpolicy/[root@master networkpolicy]# vim ingress-def.yamlapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-ingressspec:  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间  policyTypes:   - Ingress #表示只对ingress生效,但是我们上面又把podSelector设置为空,表示默认是ingress拒绝所有的    #但是我们这里面又没有加egress,所以默认egress是允许所有的
[root@master networkpolicy]# kubectl apply -f ingress-def.yaml -n dev  #-n表示只对哪个名称空间生效networkpolicy.networking.k8s.io/deny-all-ingress created
[root@master networkpolicy]# kubectl get netpol -n devNAME               POD-SELECTOR   AGEdeny-all-ingress            1m

建立个容器,放在dev名称空间里面:

[root@master networkpolicy]# cat pod-a.yamlapiVersion: v1kind: Podmetadata:  name: pod1spec:  containers:  - name: myapp    image: ikubernetes/myapp:v1
[root@master networkpolicy]# kubectl apply -f pod-a.yaml -n devpod/pod1 created
root@master networkpolicy]# kubectl get pods -n dev -o wideNAME      READY     STATUS    RESTARTS   AGE       IP           NODEpod1      1/1       Running   0          1m        10.244.2.2   node2
[root@master networkpolicy]# curl   10.244.2.2 #看到我们在宿主机上访问不到dev名称空间里面的pod10.244.2.2,这是因为dev名称空间里面有个deny-all-ingress网络策略,拒绝任何入站请求导致的。

接下来我们在prod名称空间里面建立个pod:

[root@master networkpolicy]#  kubectl apply -f pod-a.yaml  -n prodpod/pod1 created
[root@master networkpolicy]# kubectl get pods -n prod -o wideNAME      READY     STATUS    RESTARTS   AGE       IP           NODEpod1      1/1       Running   0          1m        10.244.2.3   node2
[root@master networkpolicy]# curl 10.244.2.4 #我们看到在宿主机上可以访问到prod名称空间里面的podHello MyApp | Version: v1 | Pod Name
[root@master networkpolicy]# cat ingress-def.yaml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-ingressspec:  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间  ingress:  - {} #空表示允许所有入站访问  policyTypes:  - Ingress #表示只对ingress生效    #但是我们这里面又没有加egress,所以默认egress是允许所有的
[root@master networkpolicy]# kubectl apply -f ingress-def.yaml -n devnetworkpolicy.networking.k8s.io/deny-all-ingress configured
[root@master networkpolicy]# curl 10.244.2.2 #这时我们就能在宿主机上访问到dev名称空间里面的容器了Hello MyApp | Version: v1 | Pod Name

我们接下来再还原会原来的网络策略,即拒绝入所有入站请求:

[root@master networkpolicy]# cat ingress-def.yaml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-ingressspec:  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间  policyTypes:  - Ingress #表示只对ingress生效    #但是我们这里面又没有加egress,所以默认egress是允许所有的
[root@master networkpolicy]# kubectl apply -f ingress-def.yaml -n devnetworkpolicy.networking.k8s.io/deny-all-ingress unchanged
[root@master networkpolicy]# curl 10.244.2.2 #发现在宿主机上又不能访问访问到dev里面的pod了

下面我们给dev名称空间里面的pod1打个标签叫app=myapp

[root@master networkpolicy]# kubectl label pods pod1 app=myapp -n devpod/pod1 labeled
[root@master networkpolicy]# cat allow-netpol-demo.yaml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: allow-myapp-ingressspec:  podSelector:    matchLabels:      app: myapp  ingress: #入站  - from:    - ipBlock:        cidr: 10.244.0.0/16 #指定网段,允许从10.244.0.0/16入站到pod里面        except:        - 10.244.1.2/32 #排除这个地址    ports:    - protocol: TCP      port: 80
[root@master networkpolicy]# kubectl apply -f allow-netpol-demo.yaml -n devnetworkpolicy.networking.k8s.io/allow-myapp-ingress created
[root@master networkpolicy]# kubectl get netpol -n devNAME                  POD-SELECTOR   AGEallow-myapp-ingress   app=myapp      1mdeny-all-ingress               5h
[root@master networkpolicy]# curl 10.244.2.2 #看到加了allow-myapp-ingress网络策略后,立即就能访问dev里面的pod了Hello MyApp | Version: v1 | Pod Name

上面我们介绍了ingress入站规则,下面我们介绍egress出站规则。

[root@master networkpolicy]# cat egress-def.yamlapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-egressspec:  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间  policyTypes:  - Egress #表示只对egress生效
[root@master networkpolicy]# kubectl apply -f egress-def.yaml -n prodnetworkpolicy.networking.k8s.io/deny-all-egress created
[root@master ~]# kubectl get pods -n kube-system -o wideNAME                                   READY     STATUS    RESTARTS   AGE       IP             NODEcanal-7q4k7                            3/3       Running   0          6h        172.16.1.101   node1canal-dk2tc                            3/3       Running   0          6h        172.16.1.102   node2canal-zr8l4                            3/3       Running   0          6h        172.16.1.100   mastercoredns-78fcdf6894-2l2cf               1/1       Running   18         24d       10.244.0.46    mastercoredns-78fcdf6894-dkkfq               1/1       Running   17         24d       10.244.0.45    masteretcd-master                            1/1       Running   18         24d       172.16.1.100   masterkube-apiserver-master                  1/1       Running   19         24d       172.16.1.100   masterkube-controller-manager-master         1/1       Running   18         24d       172.16.1.100   master[root@master networkpolicy]# kubectl get pods -n prodNAME      READY     STATUS    RESTARTS   AGEpod1      1/1       Running   0          1h[root@master networkpolicy]# kubectl exec pod1 -it  -n prod -- /bin/sh/ # ping 10.244.0.45  #看到ping其他名称空间的容器被拒绝,这就是因为网络策略deny-all-egress起的作用,它表示拒绝容器所有出口流量PING 10.244.0.45 (10.244.0.45): 56 data bytes
[root@master networkpolicy]# cat egress-def.yaml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-egressspec:  podSelector: {} #pod选择器设置为空,表示选择所有pod,即控制整个名称空间  egress:  - {} #表示允许所有egress出去的流量  policyTypes:  - Egress #表示只对egress生效
[root@master networkpolicy]# kubectl apply -f egress-def.yaml -n prod
[root@master networkpolicy]# kubectl exec pod1 -it  -n prod -- /bin/sh #看到放行出站后,容器就可以ping通外部的容器了/ # ping 10.244.0.45PING 10.244.0.45 (10.244.0.45): 56 data bytes64 bytes from 10.244.0.45: seq=0 ttl=62 time=0.227 ms64 bytes from 10.244.0.45: seq=1 ttl=62 time=0.284 ms

我们为了更安全,我们可以设置每个名称空间拒绝所有入站,拒绝所有出站,然后再单独放行。不过,这样也出现一个问题,就是一个名称空间中,所有pod之间也不能通信了。所以还要加条策略就是允许本名称空间中的pod之间可以互相通信(放行所有出站目标本名称空间内的所有pod),但是不允许和外部名称空间之间进行通信。

感谢你能够认真阅读完这篇文章,希望小编分享的"docker中k8s基于canal的网络策略是什么"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

空间 名称 选择 策略 网络 容器 控制 宿主 就是 篇文章 通信 之间 接下来 客户 宿主机 方式 本名 流量 目标 端口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技企业 百单网互联网科技有限公司 互联网科技集团 郑州华宇互联网科技 互联网科技股有哪些 银川新华互联网科技学校地址 新华互联网科技2019 阿里巴巴算科技企业还是互联网 互联网科技与管理 世界互联网科技公司市值排名 中国航天科技大学国际工业互联网 青岛科技大学互联网大赛研究生 广州市恰铎互联网科技有限公司 深圳市优智互联网科技有限公司 美国互联网科技实力 21世纪互联网科技成就 四川互联网展示科技馆设计 国产互联网科技公司 伍佰万互联网科技是干嘛的 互联网科技创业有什么好项目 华服互联网科技靠谱吗 互联网品科技 世界互联网领先科技成果 融势互联网科技 恒生科技互联网指数分析 北京大学互联网科技怎么样 想开互联网科技公司怎么样 深圳无忧互联网科技 领航科技大厦互联网公司 伍佰万互联网科技是干嘛的
0