千家信息网

如何解析k8s集群Canal的网络控制

发表于:2024-10-22 作者:千家信息网编辑
千家信息网最后更新 2024年10月22日,如何解析k8s集群Canal的网络控制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1 简介Canal 是calico和
千家信息网最后更新 2024年10月22日如何解析k8s集群Canal的网络控制

如何解析k8s集群Canal的网络控制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1 简介

Canal 是calico和flannel的结合,我们因为Calico不仅能够提供很好的网络性能,还能有网络规则控制,但是我们很多时候使用的Flannel网络,他的缺点就是没有网络控制只能提供网络服务,所以Canal诞生了,为Falanel提供了网络控制。

网络策略 控制出站: egress 控制进站: ingress 可以以ip地址块定义规则,也可以基于命名空间规则定义,还可以对pod定义规则

2 部署Canal

curl \https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/canal/canal.yaml \-Okubectl apply -f canal.yaml1)canal默认控制的是10.244.0.0/16 ,如果你在安装k8s集群是设置的pod网络不是此段网络,则你需要修改配置文件2)我们采用的和k8s集群公用etcd的方式创建查看创建的pod# kubectl get pods -n kube-system NAME                                    READY   STATUS    RESTARTS   AGEcanal-9lmw8                             2/2     Running   0          4m50scanal-ln6kg                             2/2     Running   0          4m50scanal-mx6tn                             2/2     Running   0          4m50scoredns-fb8b8dccf-lfbkh                 1/1     Running   2          10dcoredns-fb8b8dccf-t2kdz                 1/1     Running   2          10detcd-master-1                           1/1     Running   2          10dkube-apiserver-master-1                 1/1     Running   2          10dkube-controller-manager-master-1        1/1     Running   2          10dkube-flannel-ds-amd64-df7gk             1/1     Running   3          9dkube-flannel-ds-amd64-dzxfd             1/1     Running   3          9dkube-flannel-ds-amd64-mgw2m             1/1     Running   2          9dkube-proxy-47d6q                        1/1     Running   2          10dkube-proxy-jztrs                        1/1     Running   3          10dkube-proxy-rt4xx                        1/1     Running   3          10dkube-scheduler-master-1                 1/1     Running   2          10dkubernetes-dashboard-5f7b999d65-8h79h   1/1     Running   0          21h

3 创建两个实验的空间

kubectl create namespace shengchankubectl create namespace test

4 创建网络规则测试

默认ingress 和 engress可以一起使用,当这两规则同时存在那么将使用policyTypes做具体的规则指向例如:创建一个policy默认拒绝所有在空间shengchan的入站规则# cat ingress-deny.yamlapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-ingress  namespace: shengchanspec:   podSelector: {}  policyTypes:  - Ingresskubectl apply ingress-deny.yaml创建一组属于shengchan空间的pod# cat pod-networkpolicy1.yaml apiVersion: v1kind: Podmetadata:   name: pod-testspec: containers: - name: pod-test-policy   image: nginx:1.10kubectl apply -f pod-networkpolicy1.yaml  -n shengchan创建一组属于test空间的podkubectl apply -f pod-networkpolicy1.yaml  -n test分别查看两组pod的IP地址# kubectl get pods -o wide  -n shengchanNAME       READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATESpod-test   1/1     Running   0          16s   10.244.1.2   node2              [root@master-1 ~]# kubectl get pods -o wide  -n testNAME       READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATESpod-test   1/1     Running   0          9s    10.244.2.2   node1              在宿主机上面分别ping这两个ip# ping 10.244.1.2 -c 1PING 10.244.1.2 (10.244.1.2) 56(84) bytes of data.^C--- 10.244.1.2 ping statistics ---1 packets transmitted, 0 received, 100% packet loss, time 0ms# ping 10.244.2.2 -c 1PING 10.244.2.2 (10.244.2.2) 56(84) bytes of data.64 bytes from 10.244.2.2: icmp_seq=1 ttl=63 time=0.660 ms--- 10.244.2.2 ping statistics ---1 packets transmitted, 1 received, 0% packet loss, time 0msrtt min/avg/max/mdev = 0.660/0.660/0.660/0.000 ms此时发现属于shengchan空间的pod是被拒绝访问的,属于test空间的pod正常访问此时我们是基于名称空间级别的入站网络访问策略

5 将上面的默认拒绝策略放行

修改配置文件apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-ingress  namespace: shengchanspec:   podSelector: {}  ingress:  - {}  policyTypes:  - Ingresskubectl apply -f ingress-deny.yaml

再次测试10.244.1.2

[root@master-1 ~]# curl -I 10.244.1.2HTTP/1.1 200 OKServer: nginx/1.10.3Date: Sat, 27 Apr 2019 16:58:04 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Tue, 31 Jan 2017 15:01:11 GMTConnection: keep-aliveETag: "5890a6b7-264"Accept-Ranges: bytes[root@master-1 ~]# curl -I 10.244.2.2HTTP/1.1 200 OKServer: nginx/1.10.3Date: Sat, 27 Apr 2019 16:58:07 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Tue, 31 Jan 2017 15:01:11 GMTConnection: keep-aliveETag: "5890a6b7-264"Accept-Ranges: bytes说明我们的网络策略放行成功

6 放行特定的入站

以标签的形式进行划分pod入站规则是否被放行

1)回复默认拒绝所有[root@master-1 ~]# cat ingress-deny.yaml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-ingress  namespace: shengchanspec:   podSelector: {}  policyTypes:  - Ingresskubectl apply -f ingress-deny.yaml2)给shengchan pod打一个标签kubectl label pods pod-test app=hello -n shengchan3)创建一个新的规则# vim ingress-allow.yml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: allow-hello-ingress  namespace: shengchanspec:  podSelector:    matchLabels:      app: hello  ingress:  - from:    - ipBlock:        cidr: 10.244.0.0/16        except:        - 10.244.2.2/32    ports:    - protocol: TCP      port: 80解释: 我们重新定义了一个policy,通过标签匹配到我们已有的pod(我们一已有的pod是拒绝所有访问的),定义ingres规则,如果不通过from方式定义默认是所有网段都可以访问到拥有这个标签的pod为了测试我们使用from方式去拒绝10.244.0.0但是会放行10.244.2.2因为我们有这个ip的pod创建万郴更可以进行测试ports就是指定特定开放的端口4)创建之前进行访问测试# kubectl get pods -n shengchan -o wideNAME       READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATESpod-test   1/1     Running   0          62m   10.244.1.2   node2              # curl 10.244.1.2说明无法访问5)创建之后测试kubectl apply -f ingress-allow.yml [root@master-1 ~]# curl -I 10.244.1.2HTTP/1.1 200 OKServer: nginx/1.10.3Date: Sat, 27 Apr 2019 17:32:15 GMTContent-Type: text/htmlContent-Length: 612Last-Modified: Tue, 31 Jan 2017 15:01:11 GMTConnection: keep-aliveETag: "5890a6b7-264"Accept-Ranges: bytes说明已经放行至于对于10.244.0.0网段的限制有兴趣可以测试一下

6 egress出站规则

1)设置一个拒绝所有出站policycat egress.ymlapiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-egress  namespace: testspec:   podSelector: {}  policyTypes:  - Egresskubectl apply -f egress.yml2)创建一个test命名空间下的podskubectl apply -f pod-networkpolicy1.yaml -n test3)查看podIP并进去容器去测试ping一个正常的podip[root@master-1 ~]# kubectl get pods -o wideNAME                        READY   STATUS    RESTARTS   AGE    IP            NODE    NOMINATED NODE   READINESS GATESnet-test-5764c456cb-2c9df   1/1     Running   24         24h    10.244.2.22   node1              net-test-5764c456cb-ng6vh   1/1     Running   46         6d5h   10.244.1.21   node2              [root@master-1 ~]# kubectl get pods -o wide -n testNAME       READY   STATUS    RESTARTS   AGE   IP           NODE    NOMINATED NODE   READINESS GATESpod-test   1/1     Running   0          86m   10.244.2.2   node1              kubectl exec -it pod-test -n test -- /bin/bashroot@pod-test:/# ping 10.244.1.21PING 10.244.1.21 (10.244.1.21): 56 data bytes^C--- 10.244.1.21 ping statistics ---3 packets transmitted, 0 packets received, 100% packet loss说明此时已经应用策略4)修改配置文件放行所有出站# cat egress.yml apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:  name: deny-all-egress  namespace: testspec:   podSelector: {}  egress:  - {}  policyTypes:  - Egresskubectl apply -f egress.yml 测试:root@pod-test:/# ping 10.244.1.21 -c 1PING 10.244.1.21 (10.244.1.21): 56 data bytes64 bytes from 10.244.1.21: icmp_seq=0 ttl=62 time=0.939 ms--- 10.244.1.21 ping statistics ---1 packets transmitted, 1 packets received, 0% packet lossround-trip min/avg/max/stddev = 0.939/0.939/0.939/0.000 ms此时说明已经放行成功

7 更加复杂的policy规则需要根据不同的环境规划进行深入探究,其所有都规则都体现在配置文件中

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

规则 网络 空间 测试 控制 策略 文件 标签 配置 集群 方式 成功 两个 地址 就是 网段 建一 帮助 不同 中看 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发实施费一般占几成 数据库的密码加密方式 线性代数试卷软件开发 北京亚科网络技术有限公司 小马bi连接本地数据库 两个不同数据库的相同表格合并 白夜极光什么服务器有中文 第一章数据库测试 网络安全四梁八柱具体指什么 浙江宁波浪潮高密度服务器云主机 万方数据库可以获取哪些信息 教育网络安全和信息化工作事迹 2019儿童网络安全 云数据库在旅游业应用前景 丽水嵌入式软件开发要求 网上服务器租用 数据库时间段之间的查询 mysql数据库全局模式 数据库手机格式约束 关于网络安全的故事 pubg如何选择亚洲服务器 我的世界服务器要关闭吗 软件开发研发费加计扣除 中华人民共和国网络安全宪法 国内网络安全技术的发展状况 数据库系统第六版中文 深圳海付网络技术有限公司 鼓楼区国际软件开发专业服务 如何提高软件开发效率dsp 河北软件开发大概多少钱
0