安装要求:

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)的更多相关文章

  1. k8s系列---基于canal的网络策略

    文章拷自:http://blog.itpub.net/28916011/viewspace-2215383/ 加上自己遇到的问题简单记录 安装文档:https://docs.projectcalico ...

  2. 041.Kubernetes集群网络-K8S网络策略

    一 Kubernetes网络策略 1.1 策略说明 为实现细粒度的容器间网络访问隔离策略,Kubernetes发布Network Policy,目前已升级为networking.k8s.io/v1稳定 ...

  3. Kubernetes学习之路(二十一)之网络模型和网络策略

    目录 Kubernetes的网络模型和网络策略 1.Kubernetes网络模型和CNI插件 1.1.Docker网络模型 1.2.Kubernetes网络模型 1.3.Flannel网络插件 1.4 ...

  4. kubernetes学习笔记之十三:基于calico的网络策略入门

    一..安装calico [root@k8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-star ...

  5. Kubernetes 学习19基于canel的网络策略

    一.概述 1.我们说过,k8s的可用插件有很多,除了flannel之外,还有一个流行的叫做calico的组件,不过calico在很多项目中都会有这个名字被应用,所以他们把自己称为project cal ...

  6. 附029.Kubernetes安全之网络策略

    目录 环境构建 基础环境构建 网络测试 安全策略 策略配置 策略测试 ingress方向测试 egress方向测试 to和from行为 默认策略 环境构建 基础环境构建 [root@master01 ...

  7. NetworkPolicy网络策略以及举例说明

    网络策略(NetworkPolicy)是一种关于pod间及pod与其他网络端点间所允许的通信规则的规范.NetworkPolicy 资源使用标签选择pod,并定义选定pod所允许的通信规则. 前提 网 ...

  8. k8s集群Canal的网络控制 原

    1 简介 直接上干货 public class DispatcherServlet extends HttpServlet { private Properties contextConfigProp ...

  9. canel的网络策略

    资源: https://docs.projectcalico.org/v3.2/getting-started/kubernetes/installation/flannel 基于pod Egress ...

随机推荐

  1. 基于python的种子搜索网站,你懂得!

    该项目是基于python的web类库django开发的一套web网站,给师弟做的毕业设计.本人的研究方向是一项关于搜索的研究项目.在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和 ...

  2. 基于python开发的股市行情看板

    个人博客: https://mypython.me 近期股市又骚动起来,回忆起昔日炒股经历,历历在目,悲惨经历让人黯然神伤,去年共投入4000元入市,最后仅剩1000多,无奈闭关修炼,忘记股市,全身心 ...

  3. 从零学习Fluter(六):Flutter仿boss直聘v1.0重构

    今天继续学习flutter,觉得这个优秀的东西,许多方面还需要完善,作为一个后来者,要多向别人学习.俗话说,“学无先后,达者为师”.今天呢,我又重新把flutter_boss这个项目代码 从头到脚看了 ...

  4. 章节十一、1-Junit介绍

    一.Junit是一个开源的测试框架,在selenium的jar包中,不需要单独安装和搭建环境 二.@BeforeClass:当在方法上加了这个注解的话,这个方法会在这个类的第一个test方法之前运行. ...

  5. 数据库原理 - 序列7 - Binlog与主从复制

    本文节选自作者书籍<软件架构设计:大型网站技术架构与业务架构融合之道>.作者微信公众号:架构之道与术.公众号底部菜单有书友群可以加入,与作者和其他读者进行深入讨论.也可以在京东.天猫上购买 ...

  6. samba介绍和安装

    samba基本介绍 为什么需要samba 早期网络文件数据在不同主机之间传输大都可以使用Ftp完成,不过ftp使用有个小小的问题,它不能让你之间修改主机上的文件.要想修改必须要通过下载——修改——上传 ...

  7. flask 项目基本框架的搭建

    综合案例:学生成绩管理项目搭建 一 新建项目目录students,并创建虚拟环境 mkvirtualenv students 二 安装开发中使用的依赖模块 pip install flask==0.1 ...

  8. git 同步远程分支

    1. 同步远程分支到本地 git fetch 2. 查看本地分支 git branch *dev //当前分支 master test 3.切换分支 git checkout master // 切换 ...

  9. SpringCloud-Gateway

    在微服务架构中,我们会遇到这样的问题:1.在调用微服务时,需要鉴权,微服务不能任意给外部调用.但是,多个微服务如果都需要同一套鉴权规则,明显会产生冗余,如果鉴权方法需要修改,则需要改动多个地方.2.在 ...

  10. 03 前端篇(JS)

    参考博客:http://www.cnblogs.com/yuanchenqi/articles/5980312.html JavaScript包括三部分: ECMAScript.DOM.BOM Jav ...