Kubernetes之canal的网络策略(NetworkPolicy)
安装要求:
1、我们这里安装的是3.3的版本。kubernetes的要求:
支持的版本
- 1.10
- 1.11
- 1.12
2、CNI插件需要启用,Calico安装为CNI插件。必须通过传递--network-plugin=cni
参数将kubelet配置为使用CNI网络。(在kubeadm上,这是默认设置。)
3、支持kube-proxy的模式
- iptables
- ipvs需要1.9以上的
安装Clico用于策略和Flannel用于网络
我们这里使用Kubernetes的etcd进行安装,首先确保Kubernetes设置--cluster-cidr=10.244.0.0/16
和--allocate-node-cidrs=true
。(kubeadm是默认安装的)
我们集群启动了RBAC,所以要创建RBAC
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
安装Calico
kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
kubernetes中的网络控制策略
NetworkPolicy是kubernetes对pod的隔离手段,可以看到,NetworkPolicy实际上只是宿主机上的一系列iptables规则。
- Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址。策略可以定义目标地址或者目的端口
- Ingress 表示入站流量,pod地址和服务作为服务端,提供外部访问。pod地址作为目标地址。策略可以定义源地址和自己端口
- podSelector 规则生效在那个pod上,可以配置单个pod或者一组pod。可以定义单方向。空
podSelector
选择命名空间中的Pod。
kubectl explain networkpolicy.spec讲解:
- egress 出站流量规则 可以根据ports和to去定义规则。ports下可以指定目标端口和协议。to(目标地址):目标地址分为ip地址段、pod、namespace
- ingress 入站流量规则 可以根据ports和from。ports下可以指定目标端口和协议。from(来自那个地址可以进来):地址分为ip地址段、pod、namespace
- podSelector 定义NetworkPolicy的限制范围。直白的说就是规则应用到那个pod上。podSelector: {},留空就是定义对当前namespace下的所有pod生效。没有定义白名单的话 默认就是Deny ALL (拒绝所有)
- policyTypes 指定那个规则 那个规则生效,不指定就是默认规则。
在dev的namespace下定义一个入站流量拒绝的规则:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-policy
spec:
podSelector: {}
policyTypes:
- Ingress $ kubectl apply -f network-policy.yaml -n dev
在dev和prod的namespace下个各自创建一个pod
apiVersion: v1
kind: Pod
metadata:
name: pod-
labels:
name: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1 $ kubectl apply -f policy-pod.yaml -n dev $ kubectl apply -f policy-pod.yaml -n prod
# 测试一下
$ kubectl get pod -o wide -n prod
NAME READY STATUS RESTARTS AGE IP NODE
pod-1 1/1 Running 0 3h 10.244.2.3 k8s-node02
$ kubectl get pod -owide -n dev
NAME READY STATUS RESTARTS AGE IP NODE
pod-1 1/1 Running 0 3h 10.244.2.2 k8s-node02
$ curl 10.244.2.3
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
$ 10.244.2.2 不通
表示所有的都被运行的规则
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-policy
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress $ kubectl apply -f network-policy.yaml -n dev 测试
$ curl 10.244.2.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
放行特定的入站访问流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-myapp-policy
spec:
podSelector:
matchLabels:
app: myapp #选择app=myapp 的标签放行
ingress:
- from:
- ipBlock: #地址段
cidr: 10.244.0.0/ 允许这个地址段访问
except: 排除一下地址不可以访问
- 10.244.1.2/
ports:
- port: 只运行访问80端口
protocol: TCP
$ kubectl apply -f alloy-pod.yaml -n dev
测试一下
$ curl 10.244.2.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
下面写一个完整的NetworkPolicy对象:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: test-network-policy
namespace: default
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 172.17.0.0/
except:
- 172.17.1.0/
- namespaceSelector:
matchLabels:
project: myproject
- podSelector:
matchLabels:
role: frontend
ports:
- protocol: TCP
port:
egress:
- to:
- ipBlock:
cidr: 10.0.0.0/
ports:
- protocol: TCP
port:
大概意思:
- 该规则只在default 的namespace下,携带role:db标签的pod生效。限制请求的类型包括Ingress和Egress。
- Kubernetes会拒绝任何访问被隔离pod的请求,除非这个请求来自以下“白名单”里的对象。并且访问的是被隔离pod的6379端口。
- default Namespace里的,携带了role=fronted标签的pod可以访问
- 任何Namespace里的,携带了project=myproject标签的pod可以访问
- 任何源地址数据172.17.0.0/16网段,且不属于172.17.1.0/24网段的请求
- Kubernetes会拒绝被隔离pod对外发起任何请求,除非请求的目的地址属于10.0.0.0/24网段,并且访问的是该网段地址的5978端口。
Kubernetes之canal的网络策略(NetworkPolicy)的更多相关文章
- k8s系列---基于canal的网络策略
文章拷自:http://blog.itpub.net/28916011/viewspace-2215383/ 加上自己遇到的问题简单记录 安装文档:https://docs.projectcalico ...
- 041.Kubernetes集群网络-K8S网络策略
一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...
- Kubernetes学习之路(二十一)之网络模型和网络策略
目录 Kubernetes的网络模型和网络策略 1.Kubernetes网络模型和CNI插件 1.1.Docker网络模型 1.2.Kubernetes网络模型 1.3.Flannel网络插件 1.4 ...
- kubernetes学习笔记之十三:基于calico的网络策略入门
一..安装calico [root@k8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-star ...
- Kubernetes 学习19基于canel的网络策略
一.概述 1.我们说过,k8s的可用插件有很多,除了flannel之外,还有一个流行的叫做calico的组件,不过calico在很多项目中都会有这个名字被应用,所以他们把自己称为project cal ...
- 附029.Kubernetes安全之网络策略
目录 环境构建 基础环境构建 网络测试 安全策略 策略配置 策略测试 ingress方向测试 egress方向测试 to和from行为 默认策略 环境构建 基础环境构建 [root@master01 ...
- NetworkPolicy网络策略以及举例说明
网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范.NetworkPolicy 资源使用标签选择pod,并定义选定pod所允许的通信规则. 前提 网 ...
- k8s集群Canal的网络控制 原
1 简介 直接上干货 public class DispatcherServlet extends HttpServlet { private Properties contextConfigProp ...
- canel的网络策略
资源: https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel 基于pod Egress ...
随机推荐
- java压缩指定目录下的所有文件和文件夹的代码
将代码过程较好的代码段备份一下,下边资料是关于java压缩指定目录下的所有文件和文件夹的代码,希望对码农有帮助. String sourceDir="E:\test";int pa ...
- 人脸识别ArcFace C#DEMO 开发应用全过程
手上有一个项目,需要检验使用本程序的,是否本人!因为在程序使用前,我们都已经做过头像现场采集,所以源头呢是不成问题的,那么人脸检测,人脸比对,怎么办呢?度娘了下,目前流行的几个人脸检测,人脸比对核心, ...
- Android 简单统计文本文件字符数、单词数、行数Demo
做的demo是统计文本文件的字符数.单词数.行数的,首先呢,我们必须要有一个文本文件.所以我们要么创建一个文本文件,并保存,然后再解析:要么就提前把文本文件先放到模拟器上,然后检索到文本名再进行解析. ...
- SpringBoot使用qq邮箱发送邮件
最近公司要做一个邮箱注册和重置密码的功能,因为之前就做过,但是不是Springboot项目,所以相对来说还是比较容易的,在这里记录一下. 一.引用Maven依赖 这里使用spring自带的邮件jar包 ...
- Eclipse为工具包关联源码(本例工具包为dom4j-1.6.1)
最近学习了dom4j解析xml文件,然而在eclipse中,每次想看源码都要去到源代码文件里看,不能在eclipse中直接看, 然后我就瞎折腾,终于知道怎么把源代码添加到eclipse中了.(我的ec ...
- 【shell基础】if分支语句
1.if判断式if [ 条件判断一 ] && (||) [ 条件判断二 ]; thenelif [ 条件判断三 ] && (||) [ 条件判断四 ]; thenels ...
- 【题解】P2922 [USACO08DEC]秘密消息Secret Message
\(\text{Tags}\) 字典树,统计 题意: 给出两组\(\text{0/1}\)串\(\text{A,B}\),求解\(\text{A}\)中某串是\(\text{B}\)中某串的前缀,和\ ...
- jQuery 中的事件绑定
一.事件概念 和数据库中的触发器一样,当操作了数据的时候会引发对应的触发器程序执行 一样,JS 中的事件就是对用户特定的行为作出相应的响应的过程,其实上就是浏览器 监听到用户的某些行为的时候会执行对应 ...
- beanshell断言模版
if("${createTime_1}".equals("${createTime_2}")){ Failure = false; FailureMessage ...
- React生命周期详解
React生命周期图解: 一.旧版图解: 二.新版图解: 从图中,我们可以清楚知道React的生命周期分为三个部分: 实例化.存在期和销毁时. 旧版生命周期如果要开启async rendering, ...