kubernetes学习笔记之十三:基于calico的网络策略入门
一、.安装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的网络策略入门的更多相关文章
- k8s之网络插件flannel及基于Calico的网络策略
1.k8s网络通信 a.容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现; b.pod之间的通信:pod ip <---> pod ip,pod和pod之间不经过任何转换即可 ...
- VSTO 学习笔记(十三)谈谈VSTO项目的部署
原文:VSTO 学习笔记(十三)谈谈VSTO项目的部署 一般客户计算机专业水平不高,但是有一些Office水平相当了得,尤其对Excel的操作非常熟练.因此如果能将产品的一些功能集成在Office中, ...
- Kubernetes 学习笔记(一):基础概念
个人笔记,仅本人查阅使用,不保证正确. 零.微服务 微服务架构专注于应用解耦合,通过将应用彻底地组件化和服务化,每个微服务只包含一个非常小的功能,比如权限管理.日志收集等等.由这一组微服务组合起来,提 ...
- Python学习笔记(十三)
Python学习笔记(十三): 模块 包 if name == main 软件目录结构规范 作业-ATM+购物商城程序 1. 模块 1. 模块导入方法 import 语句 import module1 ...
- python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码
python3.4学习笔记(二十三) Python调用淘宝IP库获取IP归属地返回省市运营商实例代码 淘宝IP地址库 http://ip.taobao.com/目前提供的服务包括:1. 根据用户提供的 ...
- Kubernetes学习笔记(八):Deployment--声明式的升级应用
概述 本文核心问题是:如何升级应用. 对于Pod的更新有两种策略: 一是删除全部旧Pod之后再创建新Pod.好处是,同一时间只会有一个版本的应用存在:缺点是,应用有一段时间不可用. 二是先创建新Pod ...
- 暑假学习笔记(一)——初识Neo4j和APICloud入门
暑假学习笔记(一)--初识Neo4j和APICloud入门 20180719笔记 1.Neo4j 接了学姐的系统测试报告任务,感觉工作很繁重,但是自己却每天挥霍时光.9月份就要提交系统测试报告了,但是 ...
- (数据科学学习手札50)基于Python的网络数据采集-selenium篇(上)
一.简介 接着几个月之前的(数据科学学习手札31)基于Python的网络数据采集(初级篇),在那篇文章中,我们介绍了关于网络爬虫的基础知识(基本的请求库,基本的解析库,CSS,正则表达式等),在那篇文 ...
- (数据科学学习手札47)基于Python的网络数据采集实战(2)
一.简介 马上大四了,最近在暑期实习,在数据挖掘的主业之外,也帮助同事做了很多网络数据采集的内容,接下来的数篇文章就将一一罗列出来,来续写几个月前开的这个网络数据采集实战的坑. 二.马蜂窝评论数据采集 ...
随机推荐
- logging模块使用
日志介绍 日志级别: 默认显示级别为warning,(critical>error>warning>info>debug>notset) 日志格式配置,测试使用 impo ...
- 兼容性 memo
一.async 与 defer <script src="js/require.js" defer async="true" ></scrip ...
- <a></a>标签传参出现乱码问题
在段代码在传递参数的时候会出现中文乱码,正常情况下,只要在接收参数的时候写上: request.setCharacterEncoding("UTF-8");就能解决问题. 但是,今 ...
- 精确值避免使用float和double,使用BigDecimal
实现将double类型的值转换为BigDecimal类型的值的不同途径以及各途径间的区别 一:有人可能认为在 Java 中写入 new BigDecimal(0.1) 所创建的 BigDecimal ...
- 成功解决android studio打包报错
Win7系统,Android Studio 版本2.3.1,对cpp-empty-test使用了 cocos compile -p android --android-studio,命令 编译打包AP ...
- FCC JS基础算法题(3):Find the Longest Word in a String (找出最长单词)
题目描述: 在句子中找出最长的单词,并返回它的长度.函数的返回值应该是一个数字. 基本思路,将字符串转换成数组,然后得出数组中单个元素的长度,对长度进行排序,返回最大的一个 代码: function ...
- UnsupportedClassVersionError: org/apache/maven/plugin/compiler/CompilerMojo : Unsupported major.minor version 51.0
这篇博主说明了原因并给出了相应的解决方案!!! 博文连接如下: https://www.cnblogs.com/qiumingcheng/p/7151629.html
- 慢工出细活 JS 等待加载效果
实例可以直接运行查看效果.很方便快捷 <html> <head> <meta http-equiv="content-Type" content=&q ...
- Vue2.0
Vue 1.0到2.0的变化: 1.在每个组件的模板中,不再支持片段代码 组件中的模板: 之前: <template> <h3我是组件<strong>我是加粗模板< ...
- 安装MySQL Connector/C++并将其配置到VS2015中
安装MySQL Connector/C++并将其配置到VS中 1.下载MySQL Connector/C++并安装 在下载地址:https://dev.mysql.com/downloads/conn ...