【k8s】k8s部署网络插件Calico、创建网络策略

2024-01-08 11:32

本文主要是介绍【k8s】k8s部署网络插件Calico、创建网络策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、简介

01_calico简介

calico官网

  • flannel实现的是网络通信 , calico的特性是在pod之间的隔离。
  • 通过BGP路由,但大规模端点的拓扑计算和收敛往往需要一定的时间和计算资源。
  • 纯三层的转发,中间没有任何的NAT和overlay,转发效率最好。
  • Calico仅依赖三层路由可达。Calico 较少的依赖性使它能适配所有VM、Container、白盒或者混合环境场景。

02_calico网络架构

  • Felix:监听ECTD中心的存储获取事件,用户创建pod后,Felix负责将其网卡、IP、MAC都设置好,然后在内核的路由表里面写一条,注明这个IP应该到这张网卡。同样如果用户制定了隔离策略,Felix同样会将该策略创建到ACL中,以实现隔离。
  • BIRD:一个标准的路由程序,它会从内核里面获取哪一些IP的路由发生了变化,然后通过标准BGP的路由协议扩散到整个其他的宿主机上,让外界都知道这个IP在这里,路由的时候到这里来。
    在这里插入图片描述
    IPIP工作模式:适用于互相访问的pod不在同一个网段中,跨网段访问的场景。
    在这里插入图片描述
    BGP工作模式:适用于互相访问的pod在同一个网段,适用于大型网络。

在这里插入图片描述

二、部署网络插件Calico

01_准备

之前安装过Flannel插件,需要清理相关信息:

  • master端:kubectl delete -f kube-flannel.yml
  • 所有节点执行:mv /etc/cni/net.d/10-flannel.conflist /mnt/

02_安装

  • 建立目录
    mkdir calico
    cd calico/
  • 下载yaml文件:
    官网:wget https://docs.projectcalico.org/manifests/calico.yaml
    这里使用自己定义的部署文件,还是在官网基础上修改的
    #v3.16.1版本
    需要修改一下内容及镜像版本
    - name: CALICO_IPV4POOL_IPIP
    value: “off”
  • 部署
    kubectl apply -f calico.yaml
    在这里插入图片描述

三、创建网络策略

创建带有标签:app=nginx 的服务nginx-svc

kubectl apply -f /root/ingress/nginx-svc.yml

---
apiVersion: v1
kind: Service
metadata:name: nginx-svc
spec:selector:app: nginxports:- protocol: TCPport: 80targetPort: 80
---
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment
spec:replicas: 2selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: myappimage: myapp:v2

测试可以访问:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

01_拒绝访问指定服务

  • 设置带app=nginx标签的不能访问:
    vim deny-nginx.yml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: deny-nginx
spec:podSelector:matchLabels:app: nginx
  • 创建:kubectl apply -f deny-nginx.yml
    在这里插入图片描述
  • 测试:curl访问失败
    在这里插入图片描述

02_允许指定pod访问服务

  • 未创建策略前pod访问app:nginx的服务被拒绝:
    在这里插入图片描述
    在这里插入图片描述

  • 添加标签 app:demo:
    kubectl label pod demo app=demo
    在这里插入图片描述

  • vim acces-demo.yml

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: access-nginx
spec:podSelector:matchLabels:app: nginxingress:- from:- podSelector:matchLabels:app: demo
  • 创建策略:kubectl apply -f acces-demo.yml

  • 测试:访问成功
    在这里插入图片描述

03_禁止 namespace 中所有pod之间的相互访问

  • 创建命名空间demo
    kubectl create namespace demo
  • 创建两个pod并交互式(命名空间为demo)
    kubectl run demo1 --image=radial/busyboxplus -it -n demo
    kubectl run demo2 --image=radial/busyboxplus -it -n demo
    在这里插入图片描述
  • 命名空间demo中的pod可以相互访问
    在这里插入图片描述
  • 创建策略:vim deny-pod.yml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: default-denynamespace: demo
spec:podSelector: {}
  • kubectl apply -f deny-pod.yml
    在这里插入图片描述
  • 创建策略成功后:命名空间demo中的pod不能相互访问
    在这里插入图片描述

04_禁止其他 namespace 访问服务

  • 创建pod:可以访问
    kubectl run nginx --image=myapp:v2
    在这里插入图片描述在这里插入图片描述

创建策略:vim deny-ns.yml

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: deny-namespace
spec:podSelector:matchLabels:ingress:- from:- podSelector: {}

kubectl apply -f deny-ns.yml

  • 测试:访问失败
    在这里插入图片描述

05_允许指定namespace访问服务

  • 允许 role=prod并且ns 为 test的 pod 可以访问 run=nginx
    创建namespace为test
    kubectl create namespace test
  • 为test添加标签role:prod
    kubectl label ns test role=prod
  • 创建test下的pod并交互式
    kubectl run test1 --image=radial/busyboxplus -it -n test
  • 测试发现不能访问(在4.1中设置带app=nginx标签的不能访问)
    curl 10.244.22.3
    在这里插入图片描述
  • 创建策略:vim acces-ns.yml
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: access-namespace
spec:podSelector:matchLabels:run: nginxingress:- from:- namespaceSelector:matchLabels:role: prod
  • kubectl apply -f acces-ns.yml
  • 测试:成功访问
    在这里插入图片描述

06_允许外网访问服务

  • 带标签 app=nginx 的pod可以从外网访问到
  • 创建ingress:
    vim nginx.yml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:name: ingress-demo
spec:rules:- host: www1.westos.orghttp:paths:- path: /backend:serviceName: nginx-svcservicePort: 80
  • 外网测试访问失败(提前解析www1.westos.org)
    curl www1.westos.org
  • 创建策略:
    kubectl apply -f acces-ex.yml
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:name: web-allow-external
spec:podSelector:matchLabels:app: nginxingress:- ports:- port: 80from: []
  • 外网可以成功访问:
    在这里插入图片描述

这篇关于【k8s】k8s部署网络插件Calico、创建网络策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/583310

相关文章

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略