每天5分钟玩转Kubernetes | Network Policy
Posted COCOgsta
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天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限制外出的流量。大家可以参考官网相关文档和示例,这里就不赘述了。
以上是关于每天5分钟玩转Kubernetes | Network Policy的主要内容,如果未能解决你的问题,请参考以下文章
每天5分钟玩转Kubernetes | Kubernetes Dashboard安装
每天5分钟玩转Kubernetes | Deployment
每天5分钟玩转Kubernetes | Deployment