一、.安装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                             0/3       ContainerCreating   0          1m
canal-9rk4k                             0/3       ContainerCreating   0          1m
canal-xxvrz                             0/3       ContainerCreating   0          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: nginximage: ikubernetes/myapp:v1ports:- containerPort: 80name: 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   1/1       Running   0          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   1/1       Running   0          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: myappingress:- from:- ipBlock:cidr: 10.244.0.0/16except:- 10.244.1.2/32ports:- protocol: TCPport: 80- protocol: TCPport: 443
[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:443
curl: (7) Failed connect to 10.244.1.2:443; 拒绝连接
[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/

转载于:https://www.cnblogs.com/panwenbin-logs/p/10085764.html

kubernetes学习笔记之十三:基于calico的网络策略入门相关推荐

  1. Kubernetes学习笔记之Calico CNI Plugin源码解析(一)

    女主宣言 今天小编为大家分享Kubernets Calico CNI Plugin的源码学习笔记,希望对正在学习k8s相关部分的同学有所帮助: PS:丰富的一线技术.多元化的表现形式,尽在" ...

  2. Kubernetes学习笔记

    Kubernetes学习笔记 1.简介 用于自动部署.扩缩和管理容器化应用程序的开源系统,支持自动化部署.大规模可伸缩. 2.架构 2.1.Control Plane 对集群做出全局决策 Contro ...

  3. Kubernetes学习笔记(一)

    2019独角兽企业重金招聘Python工程师标准>>> Kubernetes学习笔记(一) 博客分类: Kubernetes 导语 2015年4月,传闻已久的Borg论文伴随Kube ...

  4. kubernetes学习笔记 (二):k8s初体验

    本文采用本地k8s v1.10.3版本开发,如果还没有搭建可参照 kubernetes学习笔记 (一):搭建本地k8s开发环境进行搭建 搭建本地Docker镜像仓库 docker pull docke ...

  5. MATLAB学习笔记(十三)

    MATLAB学习笔记(十三) 一.数值微分与数值积分 1.1 数值微分 1.1.1 数值差分与差商 1.1.2 数值微分的实现 1.2 数值积分 1.2.1 数值积分基本原理 1.2.2 数值积分的实 ...

  6. Spring Security技术栈学习笔记(十三)Spring Social集成第三方登录验证开发流程介绍

    开发第三方登录,我们必须首先要了解OAuth协议(本文所讲述的OAuth协议指的是OAuth2协议),本文首先简单介绍OAuth协议,然后基于Spring Social来阐述开发第三方登录需要做哪些准 ...

  7. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  8. Kubernetes学习笔记【2年以前的笔记】

    Kubernetes学习笔记 知识储备 熟悉linux基础命令 熟悉docker的基本原理和操作 了解ssl证书工作原理 了解负载均衡工作原理(L4/L7) 了解分布式概念 了解域名解析原理 了解网络 ...

  9. Windows保护模式学习笔记(十三)—— PWTPCD

    Windows保护模式学习笔记(十三)-- PWT&PCD 要点回顾 CPU缓存 CPU缓存与TLB的区别 PWT(Page Write Through) PCD(Page Cache Dis ...

最新文章

  1. GPU上的图像和信号处理
  2. 微信小程序数据拼接_微信小程序用户数据解密算法Java版
  3. java学习(111):日期时间格式化
  4. ImageView及其子类
  5. Extract Subclass(提炼子类)
  6. 2021亳州高考成绩查询,2021年亳州高考状元名单公布,亳州文理科状元是谁多少分...
  7. VS2008中VC 项目 文件目录的管理 (最终无错误版)
  8. MODIS数据的简介和下载(三)——MODIS数据下载方式(基于MODIS Web Service)
  9. python卸载干净_Python卸载不干净?Mac完全卸载python方法
  10. 还在被网络上各种关于单片机行业的收入搞的眼花缭乱而烦恼吗
  11. python中home定义是什么_搞清楚Python中self的含义
  12. python打印索引序号_打印带有索引的矩阵python
  13. [android游戏编程之从零开始].李华明,AndroidGameSourc
  14. Anciety 0CTF/TCTF 2018 总结
  15. 美国弗吉尼亚大学计算机科学,弗吉尼亚大学研究生计算机科学排名关键消息重点总结...
  16. linux 查看文件信息
  17. Android开发、adb、monkey测试
  18. input文本框实现输入英文时自动触发事件,输入中文时要输入完成后才触发事件
  19. 多生成树协议(MSTP)
  20. 解决知乎live无法下载的问题

热门文章

  1. Linux下C++中可使用的3种Hook方法
  2. Ubuntu 14.04 64位上安装Valgrind 3.13.0 操作步骤
  3. 【FFmpeg】结构体详解(二):AVStream、AVPacket、AVOutputFormat
  4. 【摄像头】摄像机工作原理
  5. iphone adb android,通过ADB获取Android手机信息
  6. 怎么连接屏幕_手机屏幕坏了也可以操作?这办法学会了再不怕碎屏
  7. vmware响应时间过长_性能调优高并发下如何缩短响应时间
  8. 网络新手ip隐藏器_动态IP代理的用途
  9. Linux从mysql中读取数据_linux shell中读写操作mysql数据库
  10. MaxCompute 多行数据合并为一行数据