【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

相关文章

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

redis群集简单部署过程

《redis群集简单部署过程》文章介绍了Redis,一个高性能的键值存储系统,其支持多种数据结构和命令,它还讨论了Redis的服务器端架构、数据存储和获取、协议和命令、高可用性方案、缓存机制以及监控和... 目录Redis介绍1. 基本概念2. 服务器端3. 存储和获取数据4. 协议和命令5. 高可用性6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测