一、.安装calico

[root@k8s-master01 ~]# kubectl apply -f  https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
clusterrole.rbac.authorization.k8s.io "calico" created
clusterrole.rbac.authorization.k8s.io "flannel" configured
clusterrolebinding.rbac.authorization.k8s.io "canal-flannel" created
clusterrolebinding.rbac.authorization.k8s.io "canal-calico" created
[root@k8s-master01 ~]# kubectl apply -f https://docs.projectcalico.org/v3.3/getting-started/kubernetes/installation/hosted/canal/canal.yaml
configmap "canal-config" created
daemonset.extensions "canal" created
serviceaccount "canal" created
customresourcedefinition.apiextensions.k8s.io "felixconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "bgpconfigurations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "ippools.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "hostendpoints.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "clusterinformations.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworkpolicies.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "globalnetworksets.crd.projectcalico.org" created
customresourcedefinition.apiextensions.k8s.io "networkpolicies.crd.projectcalico.org" created
[root@k8s-master01 ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
canal-888kk / ContainerCreating 1m
canal-9rk4k / ContainerCreating 1m
canal-xxvrz / ContainerCreating 1m

二、基于calico设置网络策略

1.查看配置帮助

[root@k8s-master01 ~]# kubectl explain networkpolicy
[root@k8s-master01 ~]# kubectl explain networkpolicy.spec
egress <[]Object> #定义出栈规则
ingress <[]Object> #定义入栈规则
podSelector <Object> -required- #选择将规则应用至哪些pod上
policyTypes <[]string> #策略类型,如果没有指定规则,同时egress或者ingress规则存在,那么都会生效,
[root@k8s-master01 ~]# kubectl explain networkpolicy.spec.egress
ports <[]Object> #目标端口(客户端),可以有多个端口,也可以知道端口的协议
to <[]Object> #目标地址,可以是一个IP段,名称空间或者一组pod,可以同时都选择,但是需要注意的是,k8s将取其中的交集,如无必要,尽量不要配置
[root@k8s-master01 ~]# kubectl explain networkpolicy.spec.ingress
from <[]Object> #目标地址,与egress相同
ports <[]Object> #目标端口(本地端口),注意和egress的区别

2.创建一个ingress默认拒绝的示例

[root@k8s-master01 networkpolicy]# kubectl create namespace dev
[root@k8s-master01 networkpolicy]# kubectl create namespace prod
[root@k8s-master01 networkpolicy]# vim ingress-def.yaml
apiVersion: networking.k8s.io/v1 #注意资源版本号,extensions/v1beta1在1.9中已经被废弃
kind: NetworkPolicy
metadata:
name: deng-all-ingress
spec:
podSelector: {} #{}表示选择所有pod,即整个名称空间
olicyTypes:
- Ingress #选择ingress规则,当前没有定义具体的ingress规则,则表示使用默认规则,默认规则为拒绝,没有包含egress规则,则表示默认egress放行,注意其中默认规则的区别,被选择的规则默认规则为拒绝,没有被选择的默认规则为允许
[root@k8s-master01 networkpolicy]# kubectl apply -f ingress-def.yaml -n dev
[root@k8s-master01 networkpolicy]# kubectl get networkpolicy -n dev
NAME POD-SELECTOR AGE
deng-all-ingress <none> 53s

验证

[root@k8s-master01 networkpolicy]# cat pod_demo.yaml
kind: Pod
apiVersion: v1
metadata:
name: task-pv-pod #为了能在多个名称空间创建,不要添加namespace
spec:
containers:
- name: nginx
image: ikubernetes/myapp:v1
ports:
- containerPort:
name: www
[root@k8s-master01 networkpolicy]# kubectl apply -f pod_demo.yaml -n dev #在名称为dev的名称空间中创建一个pod
pod "task-pv-pod" created
[root@k8s-master01 networkpolicy]# kubectl get pod -n dev -o wide #查看pod的IP地址
NAME READY STATUS RESTARTS AGE IP NODE
task-pv-pod / Running 20s 10.244.1.2 k8s-node01
[root@k8s-master01 networkpolicy]# curl 10.244.1.2 #访问这个地址,可以发现无法访问
^C
[root@k8s-master01 networkpolicy]# kubectl apply -f pod_demo.yaml -n prod #在名称为prod的名称空间中创建一个pod
pod "task-pv-pod" created
[root@k8s-master01 networkpolicy]# kubectl get pod -n prod -o wide #获取pod的IP地址
NAME READY STATUS RESTARTS AGE IP NODE
task-pv-pod / Running 7s 10.244.1.3 k8s-node01
[root@k8s-master01 networkpolicy]# curl 10.244.1.3 #访问,可以正常访问
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

3.显示定义一个ingress规则,允许访问dev名称空间中的pod

[root@k8s-master01 networkpolicy]# cat allow-netpol.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: all-myapp-ingress
spec:
podSelector:
matchLabels:
app: myapp
ingress:
- from:
- ipBlock:
cidr: 10.244.0.0/
except:
- 10.244.1.2/
ports:
- protocol: TCP
port:
- protocol: TCP
port:
[root@k8s-master01 networkpolicy]# kubectl apply -f allow-netpol.yaml -n dev
networkpolicy.networking.k8s.io "all-myapp-ingress" created
[root@k8s-master01 networkpolicy]# kubectl get networkpolicy -n dev
NAME POD-SELECTOR AGE
all-myapp-ingress app=myapp 54s
deng-all-ingress <none> 32m

验证:

[root@k8s-master01 networkpolicy]# curl 10.244.1.2
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>
[root@k8s-master01 networkpolicy]# curl 10.244.1.2:
curl: () Failed connect to 10.244.1.2:; 拒绝连接
[root@k8s-master01 networkpolicy]# curl 10.244.1.2:6443 #注意6443和443的区别
^C

4.egress默认拒绝(验证步骤忽略)

[root@k8s-master01 networkpolicy]# cat egress-def.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deng-all-egress
spec:
podSelector: {}
policyTypes:
- Egress

官方文档:https://docs.projectcalico.org/v3.3/introduction/

基于k8s安装文档:https://docs.projectcalico.org/v3.3/getting-started/kubernetes/

kubernetes学习笔记之十三:基于calico的网络策略入门的更多相关文章

  1. k8s之网络插件flannel及基于Calico的网络策略

    1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...

  2. VSTO 学习笔记(十三)谈谈VSTO项目的部署

    原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中, ...

  3. Kubernetes 学习笔记(一):基础概念

    个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...

  4. Python学习笔记(十三)

    Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...

  5. python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码

    python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...

  6. Kubernetes学习笔记(八):Deployment--声明式的升级应用

    概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...

  7. 暑假学习笔记(一)——初识Neo4j和APICloud入门

    暑假学习笔记(一)--初识Neo4j和APICloud入门 20180719笔记 1.Neo4j 接了学姐的系统测试报告任务,感觉工作很繁重,但是自己却每天挥霍时光.9月份就要提交系统测试报告了,但是 ...

  8. (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)

    一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...

  9. (数据科学学习手札47)基于Python的网络数据采集实战(2)

    一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...

随机推荐

  1. vuex-Mutation(同步)

    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件: 每个 mutation 都有一个字符串的 事件类型 (type) 和 一 ...

  2. 使用json改写网站

    效果图 json文件 https://raw.githubusercontent.com/sherryloslrs/timetable/master/timetable.json { "Ti ...

  3. AndroidStudio连不上Android设备真机

    AndroidStudio连不上Android设备真机 刚好遇到这个问题,查阅了很多资料,看到有人分享了引起该问题的几个原因,我总结了一下: 1.手机设置问题.开USB调试 方法:手机设置-开发人员调 ...

  4. 初见《构建之法》orz……

    作为一个大二的计科狗,还是对软件设计有些懵,尽管之前学习过软件工程,但并没有掌握,突如其来的软件设计实践,让我着实傻眼. 通过消息得知,要学习<构建之法>,就去搜了一下,它是以实践为基础的 ...

  5. Java语法基础学习DayTen(集合续)

    一.集合 1.Set:存储的元素是无序的.不可重复的 (1)无序性:无序性不等于随机性,无序指的是元素在底层存储的位置是无序的. (2)不可重复性:当向Set中添加相同的元素时,后添加的元素不能添加进 ...

  6. error ...项目路径 \node_modules\chromedriver: Command failed.

    当你拿到完整的vue项目代码,像 node_modules 整个文件夹不可能提交到svn或者github的, 所以怎么自己安装整个项目所需要的一些依赖呢, 前提是你全局安装了node,才能使用nom命 ...

  7. ios 中pickerView城市选择和UIDatePicker生日选择

    代码详见压缩包

  8. Linux 应用——常用函数(usual function)

    main函数: 新建testmain.c #include <sys/types.h>#include <sys/stat.h>#include <fcntl.h> ...

  9. jQuery-2.DOM---节点的删除

    DOM节点删除之empty()的基本用法 要移除页面上节点是开发者常见的操作,jQuery提供了几种不同的方法用来处理这个问题,这里我们开仔细了解下empty方法 empty 顾名思义,清空方法,但是 ...

  10. cs特征性以及数据库的连接

    笔记c3 五大浏览器内核: Ie浏览器:-ms 火狐:-moz Safari以及chorme:-webkit 欧朋:-o Word-wrap:break-word;设置换行. Border borde ...