K8S Calico
NetworkPolicy是kubernetes对pod的隔离手段,是宿主机上的一系列iptables规则。

Egress 表示出站流量,就是pod作为客户端访问外部服务,pod地址作为源地址。策略可以定义目标地址或者目的端口
Ingress 表示入站流量,pod地址和服务作为服务端,提供外部访问。pod地址作为目标地址。策略可以定义源地址和自己端口
官网
https://docs.projectcalico.org/v3.1/getting-started/kubernetes/
我们这里使用的是 flannel 构建 K8S 网络,使用 Calico 构建网络规则
mkdir ~/networkpolicy ; cd ~/networkpolicy
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/rbac.yaml
kubectl apply -f https://docs.projectcalico.org/v3.1/getting-started/kubernetes/installation/hosted/canal/canal.yaml
kubectl get pods -n kube-system
# 创建两个命名空间 dev 和 prod 进行测试
kubectl create namespace dev
kubectl create namespace prod
vi pod-a.yaml
# 内容如下
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
# 在命名空间 dev 创建 pod1
kubectl apply -f pod-a.yaml -n dev
kubectl get pods -n dev -o wide
# 运行结果:
NAME READY STATUS RESTARTS AGE IP NODE
pod1 1/1 Running 0 14m 10.244.2.2 node2
# 在命名空间 prod 创建 pod1
kubectl apply -f pod-a.yaml -n prod
kubectl get pods -n prod -o wide
# 运行结果:
NAME READY STATUS RESTARTS AGE IP NODE
pod1 1/1 Running 0 14m 10.244.1.2 node1
# 测试网络
curl 10.244.1.2 # 正常访问
curl 10.244.2.2 # 正常访问
kubectl exec pod1 -it -n prod -- /bin/sh
ping 10.244.2.2 # 链路正常
Ingress
# Ingress 默认禁止所有的入站流量
vi ngress-def.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyTypes:
- Ingress
kubectl apply -f ingress-def.yaml -n dev
# 查看 networkpolicy 规则
kubectl get netpol -n dev
curl 10.244.2.2 # 命名空间 dev pod1 无法访问
curl 10.244.1.2 # 命名空间 prod pod1 正常访问
# 开放所有的入站流量
vi ingress-def.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
ingress:
- {}
policyTypes:
- Ingress
kubectl apply -f ingress-def.yaml -n dev
curl 10.244.1.2 # 命名空间 prod pod1 正常访问
curl 10.244.2.2 # 命名空间 dev pod1 正常访问
通过规则限制入站流量
kubectl delete netpol deny-all-ingress -n dev
kubectl label pods pod1 app=myapp -n dev
# 添加网络规则
vi allow-netpol-demo.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-myapp-ingress
spec:
podSelector:
matchLabels:
app: myapp # 选择app=myapp 的标签放行
ingress:
- from:
- ipBlock: # 地址段
cidr: 10.244.0.0/16 # 允许这个地址段访问
except: # 排除一下地址不可以访问
- 10.244.1.2/32
ports:
- protocol: TCP
port: 80 # 允许访问80端口
- protocol: TCP
port: 443
kubectl apply -f allow-netpol-demo.yaml -n dev
kubectl get netpol -n dev
curl 10.244.2.2:80 # 命名空间 dev pod1 正常访问
curl 10.244.2.2:443 # NetworkPolicy 放行,没有开放 443 端口,服务器拒绝
curl: (7) Failed connect to 10.244.2.2:443; Connection refused
curl 10.244.2.2:6443 # 卡住,被 NetworkPolicy 拒绝
Egress
# 默认限制所有的出站流量
vi egrees-def.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
spec:
podSelector: {}
policyTypes:
- Egress
kubectl apply -f egrees-def.yaml -n prod
kubectl get pods -n kube-system -o wide
# 选取一个 coredns 的 pod ip
kubectl exec pod1 -it -n prod -- /bin/sh
ping 10.244.0.4 # 无法正常 ping 通
# 放行所有的出站流量
vi egrees-def.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-egress
spec:
podSelector: {}
egress:
- {}
policyTypes:
- Egress
kubectl apply -f egrees-def.yaml -n prod
kubectl exec pod1 -it -n prod -- /bin/sh
ping 10.244.0.4 # 正常 ping 通
K8S Calico的更多相关文章
- K8S Calico网络插件
0.前言 参考文档:https://github.com/containernetworking/cni Pod网络插件,为了实现Pod网络而需要的插件.组件.由于Kubernetes通过开放的CNI ...
- K8S从入门到放弃系列-(11)kubernetes集群网络Calico部署
摘要: 前面几个篇幅,已经介绍master与node节点集群组件部署,由于K8S本身不支持网络,当 node 全部启动后,由于网络组件(CNI)未安装会显示为 NotReady 状态,需要借助第三方网 ...
- k8s的两种网络方案与多种工作模式[flannel与calico]
k8s的两种网络方案与多种工作模式 1. Flannel: flannel有三种工作模式: 1. vxlan(隧道方案) 2. host-gw(路由方案) 2. udp(在用户态实现的数据封装解封装, ...
- Kubeasz部署K8s基础测试环境简介
下面介绍使用Kubeasz部署K8s集群环境. https://github.com/easzlab/kubeasz在需要使用kubeeasz项目安装的k8s时,需要将所有需要它来部署的节点上,都安装 ...
- 8、二进制安装K8s之部署CIN网络
二进制安装K8s之部署CIN网络 部署CIN网络可以使用flannel或者calico,这里介绍使用calico ecd 方式部署. 1.下载calico二进制安装包 创建所需目录 mkdir -p ...
- 从一到万的运维之路,说一说VM/Docker/Kubernetes/ServiceMesh
摘要:本文从单机真机运营的历史讲起,逐步介绍虚拟化.容器化.Docker.Kubernetes.ServiceMesh的发展历程.并重点介绍了容器化阶段之后,各项重点技术的安装.使用.运维知识.可以说 ...
- 使用Kubeadm(1.13+)快速搭建Kubernetes集群
Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并 ...
- k8s网络之Calico网络
k8s网络主题系列: 一.k8s网络之设计与实现 二.k8s网络之Flannel网络 三.k8s网络之Calico网络 简介 Calico 是一种容器之间互通的网络方案.在虚拟化平台中,比如 Open ...
- k8s网络之calico
一.概述 前面我们部署calico由于集群规模不是很大,使用的是calico的bgp模式的node-to-node-mesh全节点互联,这种模式在小规模集群里面还可以用,3.4.0版本的calico支 ...
随机推荐
- 微博第三方登录使用social_django实现显示登陆的用户名
首先修改social_soce源码,将用户信息添加进cookie 将其修改为: response = backend.strategy.redirect(url) payload = jwt ...
- HTML学习一_网页的基本结构及HTML简介
HTML网页的基本结构 ```angular2html<!DOCTYPE html> 声明为 HTML5 文档<html> 元素是 HTML 页面的根元素<head> ...
- StringBuffer 和 StringBuilder 的 3 个区别
StringBuffer 和 StringBuilder 它们都是可变的字符串,不过它们之间的区别是 Java 初中级面试出现几率十分高的一道题.这么简单的一道题,栈长在最近的面试过程中,却经常遇到很 ...
- Python爬虫目录
Python爬虫目录 工具使用 Pycharm 连接Linux 远程开发 mongodb在windows下安装启动 爬虫抓包工具Fiddle设置 爬虫抓包工具Charles设置 爬虫工具fiddle在 ...
- 课程五(Sequence Models),第二 周(Natural Language Processing & Word Embeddings) —— 1.Programming assignments:Operations on word vectors - Debiasing
Operations on word vectors Welcome to your first assignment of this week! Because word embeddings ar ...
- Storm是什么
Why use Storm? Apache Storm是一个免费的开源的分布式实时计算系统.Storm使得可靠的实时处理无边界的数据量变得很容易,就如同Hadoop做批处理那样.Storm很简单,可以 ...
- 2014--My Plan
写于2014/1/10 从2014年开始我每年规划自己的life,每年10个plans. 回忆2013: 2013年,改变了很多.准确的说,那10个月,像个漫长的旅程,像个人生的转折点,应该可以这么说 ...
- linux 命令 — sort、uniq
sort uniq sort:对行或者文本文件排序 uniq:去除重复的行 常用 sort -n file.txt 按数字进行排序 sort -r file.txt 按逆序进行排序 sort -M f ...
- 高性能Mysql笔记 — 优化
性能优化 了解查询的整个生命周期,清楚每个阶段的时间消耗情况 性能分析 慢查询日志--服务器性能分析 参考 慢查询日志是优化很重要的手段,但是开启慢查询日志对性能的影响并不大,所以可以考虑在线上打开慢 ...
- Java反射,注解,以及动态代理
Java反射,注解,以及动态代理 基础 最近在准备实习面试,被学长问到了Java反射,注解和动态代理的内容,发现有点自己有点懵,这几天查了很多资料,就来说下自己的理解吧[如有错误,望指正] Java ...