【云原生、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 ![](https://file.jishuzhan.net/article/1692398555261571074/ec58935960ee4a0393907b85fe968109.png) # ****二、**** ****Calico网络策略基础**** ## ****1、创建服务**** ****1)**** ****创建命名空间**** \[root@k8s-master \~\]# kubectl create ns policy-demo ![](https://file.jishuzhan.net/article/1692398555261571074/0e815cd5fe6b47b5bea182cc2aadee81.png) ****2)**** ****在 policy-demo 命名空间中创建两个副本的 Nginx Pod。**** \[root@k8s-master \~\]# vim nginx-deployment.yaml ![](https://file.jishuzhan.net/article/1692398555261571074/7e10a8dc0b32413299e15a97e09b2f3a.png) ****\[root@k8s-master \~\]# kubectl apply -f nginx-deployment.yaml**** ****\[root@k8s-master \~\]# kubectl get pod -n policy-demo**** ![](https://file.jishuzhan.net/article/1692398555261571074/9f14fcebd8c5463eb0b9f74b872ea4d9.png) ****3)**** ****通过服务暴露 Nginx 的 80 端口。**** > \[root@k8s-master \~\]# kubectl expose --namespace=policy-demo deployment nginx --port=80 > > \[root@k8s-master \~\]# kubectl get all -n policy-demo ![](https://file.jishuzhan.net/article/1692398555261571074/b3e6a3e750374bcebeabbe43df4b7791.png) ****4)**** ****通过 busybox 的 Pod 去访问 Nginx 服务。**** > ****\[root@k8s-master \~\]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh**** > > ****/ # wget -q nginx -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/e2a11f1ad07b40e38ff61c63543c1216.png) ****\[root@k8s-master \~\]# kubectl get all -n policy-demo**** ![](https://file.jishuzhan.net/article/1692398555261571074/3ee56f552e3044fead4db6df0a3e640c.png) ## ****2、启用网络隔离**** 在 policy-demo 命名空间中打开隔离。然后 Calico 将阻止连接到该命名空间中的 Pod。执行以下命令将创建一个 NetworkPolicy,该策略将对 policy-demo 名称空间中的所有 Pod实现默认的拒绝行为。 [root@k8s-master ~]# kubectl create -f - < ****/ # wget -q --timeout=5 nginx -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/411e9054ebbd4765942dbd5100bef389.png) ## ****4、允许通过网络策略进行访问**** 使用 NetworkPolicy 启用对 Nginx 服务的访问。设置允许从 accessPod 传入的连接,但不能从其他任何地方传入。创建 access-nginx 的网络策略具体内容如下所示。 [root@k8s-master ~]# kubectl create -f - < ****\[root@k8s-master \~\]# kubectl run --namespace=policy-demo access --rm -ti --image busybox /bin/sh**** > > ****/ # wget -q --timeout=5 nginx -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/be984150396047cd934019fabd73d8e3.png) ****如果没有标记access,仍然无法访问服务。**** > ****\[root@k8s-master \~\]# kubectl run --namespace=policy-demo cant-access --rm -ti --image busybox /bin/sh**** > > ****/ # wget -q --timeout=5 nginx -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/5ebdfb0b6f074430a3f4bbe04ba08eca.png) ****\[root@k8s-master \~\]# kubectl get all -n policy-demo**** ![](https://file.jishuzhan.net/article/1692398555261571074/dbe11964097d41da8ea75eba201cd4fd.png) # ****三、**** ****Calico网络策略进阶**** ## ****1、创建服务**** 删除命令空间 policy-demo,创建新的命名空间 advanced-policy-demo。 > ****\[root@k8s-master \~\]# kubectl delete ns policy-demo**** > > ****\[root@k8s-master \~\]# kubectl create ns advanced-policy-demo**** ![](https://file.jishuzhan.net/article/1692398555261571074/e0ec3627824a49e0a7739fb4eca25212.png) 使用 YAML 文件创建 Nginx 服务。 \[root@k8s-master \~\]# vim nginx-deployment.yaml ![](https://file.jishuzhan.net/article/1692398555261571074/5d590cf2d86a49b0b80c1d4e6081dbb7.png) > ****\[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**** ![](https://file.jishuzhan.net/article/1692398555261571074/44808eb232ce498f9a071cc2ef56f180.png) ****验证访问权限并访问百度测试外网连通性。**** > \[root@k8s-master \~\]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh > > ****/ # wget -q --timeout=5 nginx -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/a5f8834249c249b6b4a003d105b38d99.png) ****/ # wget -q --timeout=5 www.baidu.com -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/eb4cb57816904e24987f81284b3cf9e3.png) ****\[root@k8s-master \~\]# kubectl get all -n advanced-policy-demo**** ![](https://file.jishuzhan.net/article/1692398555261571074/859a8d5c03a043f6b98881a6bc20116e.png) ## ****2、拒绝所有入口流量**** 设置网络策略,要求 Nginx 服务拒绝所有入口流量。然后进行访问权限的验证。 [root@k8s-master ~]# kubectl create -f - < \[root@k8s-master \~\]# kub ****w.baidu.com -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/1a91b6f4ac974411838aa2c77addec75.png) 从上述命令执行结果中可以看出,对 Nginx 服务的入口访问被拒绝,而仍然允许对出站 Internet 的出口访问。 ## ****3、允许进入Nginx的流量**** 执行以下命令,创建一个 NetworkPolicy,设置允许流量从 advanced-policy-demo 命名空间中的任何 Pod 到 Nginx Pod。创建策略成功后,就可以访问 Nginx 服务了。 [root@k8s-master ~]# kubectl create -f - < \[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 -**** ![](https://file.jishuzhan.net/article/1692398555261571074/2f6c1619efed4b9b941f06f18bf95a9e.png) ## ****4、拒绝所有出口流量**** 设置拒绝所有出口流量的网络策略,该策略设置成功后,任何策略未明确允许的入站或出站流量都将被拒绝。 [root@k8s-master ~]# kubectl create -f - < \[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 -**** ![](https://file.jishuzhan.net/article/1692398555261571074/534b4319972b45748cc4083704f2fc15.png) ## ****5、允许DNS出口流量**** 执行以下命令,在 kube-system 名称空间上创建一个标签。该标签的 NetworkPolicy允许 DNS 从 advanced-policy-demo 名称空间中的任何 Pod 到名称空间 kube-system 的出站流量。 > ****\[root@k8s-master \~\]# kubectl label namespace kube-system name=kube-system**** ![](https://file.jishuzhan.net/article/1692398555261571074/df2a3ed00c244675b17af3685931508d.png) [root@k8s-master ~]# kubectl create -f - < ****\[root@k8s-master \~\]# kubectl run --namespace=advanced-policy-demo access --rm -ti --image busybox /bin/sh**** > > / # nslookup nginx > > / # nslookup [www.baidu.com](http://www.baidu.com "www.baidu.com") 即使DNS 出口流量被允许,但来自 Advanced-policy-demo 命名空间中所有 Pod 的所有其他出口流量仍被阻止。因此,来自 wget 调用的 HTTP 出口流量仍将失败。 > ****/ # wget -q --timeout=5 nginx -O -**** ![](https://file.jishuzhan.net/article/1692398555261571074/e90003a1253d4121b23770a2c7271140.png) ## ****6、允许出口流量到Nginx**** 执行以下命令,创建一个 NetworkPolicy,允许从 advanced-policy-demo 名称空间中的任何 Pod 到具有 app: nginx 相同名称空间中标签匹配的 Pod 的出站流量。 [root@k8s-master ~]# kubectl create -f - < ****\[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 - ![](https://file.jishuzhan.net/article/1692398555261571074/bd9cc5526971450da19bc003b9381731.png) 访问百度超时,是因为它可以解决 DNS 匹配标签以外的其他任何出口访问 app: nginx的 advanced-policy-demo 命名空间。

相关推荐
lingling0091 小时前
艾利特石油管道巡检机器人:工业安全的智能守护者
大数据·网络·人工智能
蜗牛沐雨3 小时前
驾驭巨量数据:HTTP 协议与大文件传输的多种策略
网络·网络协议·http
NewCarRen3 小时前
汽车盲点检测系统的网络安全分析和设计
网络·安全·汽车网络安全
听说唐僧不吃肉4 小时前
DevOps篇之利用Jenkins实现多K8S集群的版本发布
kubernetes·jenkins·devops
玦尘、5 小时前
微服务相关面试题
微服务·云原生·架构
BioRunYiXue5 小时前
FRET、PLA、Co-IP和GST pull-down有何区别? 应该如何选择?
java·服务器·网络·人工智能·网络协议·tcp/ip·eclipse
taxunjishu5 小时前
ProfiNet 转 Ethernet/IP 柔性产线构建方案:网关技术保护新能源企业现有设备投资
网络·网络协议·tcp/ip
Coision.5 小时前
linux 网络:并发服务器及IO多路复用
linux·服务器·网络
qqxhb6 小时前
系统架构设计师备考第9天——网络基础&通信技术
网络·tcp/ip·系统架构·tdm·香农公式·cdm·fdm
拾荒的小海螺6 小时前
JAVA:Nginx 事件驱动模型的技术指南
java·网络·nginx