【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

相关文章

Spring Boot Maven 插件如何构建可执行 JAR 的核心配置

《SpringBootMaven插件如何构建可执行JAR的核心配置》SpringBoot核心Maven插件,用于生成可执行JAR/WAR,内置服务器简化部署,支持热部署、多环境配置及依赖管理... 目录前言一、插件的核心功能与目标1.1 插件的定位1.2 插件的 Goals(目标)1.3 插件定位1.4 核

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

如何在Ubuntu 24.04上部署Zabbix 7.0对服务器进行监控

《如何在Ubuntu24.04上部署Zabbix7.0对服务器进行监控》在Ubuntu24.04上部署Zabbix7.0监控阿里云ECS服务器,需配置MariaDB数据库、开放10050/1005... 目录软硬件信息部署步骤步骤 1:安装并配置mariadb步骤 2:安装Zabbix 7.0 Server

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机