每天5分钟玩转Kubernetes | Network Policy

书籍来源:cloudman《每天5分钟玩转Kubernetes》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:每天5分钟玩转Kubernetes | 汇总_COCOgsta的博客-CSDN博客


Network Policy是Kubernetes的一种资源。Network Policy通过Label选择Pod,并指定其他Pod或外界如何与这些Pod通信。

默认情况下,所有Pod是非隔离的,即任何来源的网络流量都能够访问Pod,没有任何限制。当为Pod定义了Network Policy时,只有Policy允许的流量才能访问Pod。

不过,不是所有的Kubernetes网络方案都支持Network Policy。比如Flannel就不支持,Calico是支持的。我们接下来将用Canal来演示Network Policy。Canal这个开源项目很有意思,它用Flannel实现 Kubernetes集群网络,同时又用Calico实现Network Policy。

12.3.1 部署Canal(本节实验未做)

部署Canal与部署其他Kubernetes网络方案非常类似,都是在执行了kubeadm init初始化Kubernetes集群之后通过kubectl apply安装相应的网络方案。也就是说,没有太好的办法直接切换使用不同的网络方案,基本上只能重新创建集群。

要销毁当前集群,最简单的方法是在每个节点上执行kubeadm reset,然后就可以按照3.3.1小节“初始化Master”中的方法初始化集群了。

kubeadm init --apiserver-advertise-address 192.168.56.105 --pod-network-cidr=10.244.0.0/16

然后按照文档
https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/安装Canal。文档列出了各种网络方案的安装方法, 如图所示。

执行如下命令部署Canal:

kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/rbac.yaml 
kubectl apply -f https://raw.githubusercontent.com/projectcalico/canal/master/k8s-install/1.7/canal.yaml

部署成功后,可以查看到Canal相关组件,如图所示。

Canal作为DaemonSet部署到每个节点,属于kube-system这个namespace。

12.3.2 实践Network Policy

为了演示Network Policy,我们先部署一个httpd应用,其配置文件httpd.yaml如图所示。

httpd有三个副本,通过NodePort类型的Service对外提供服务。部署应用,如图所示。

当前没有定义任何Network Policy,验证应用可以被访问,如图所示。

(1)启动一个busybox Pod,既可以访问Service,也可以Ping到副本Pod。

(2)集群节点既可以访问Service,也可以Ping到副本Pod,如图所示。

(3)集群外(192.168.56.1)可以访问Service,如图所示。

现在创建Network Policy,如图所示。

① 定义将此Network Policy中的访问规则应用于label为run: httpd的Pod,即httpd应用的三个副本Pod。

② ingress中定义只有label为access: "true"的Pod才能访问应用。

③ 只能访问80端口。

通过kubectl apply创建Network Policy,如图所示。

验证Network Policy的有效性:

(1)busybox Pod已经不能访问Service,如图所示。

如果Pod添加了label access: "true"就能访问到应用,但Ping已经被禁止,如图所示。

(2)集群节点已经不能访问Service,也Ping不到副本Pod,如图所示。

(3)集群外(192.168.56.1)已经不能访问Service,如图所示。

如果希望让集群节点和集群外(192.168.56.1)也能够访问到应用,可以对Network Policy做如图所示的修改。

应用新的Network Policy,如图所示。

现在,集群节点和集群外(192.168.56.1)已经能够访问了,如图所示。

除了通过ingress限制进入的流量,也可以用egress限制外出的流量。大家可以参考官网相关文档和示例,这里就不赘述了。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/125340162