kubernetes网络之网络策略-----Network Policies - Example

news/2024/11/29 18:26:56/

创建一个Deployment并配置Service

  • 创建一个 nginx Deployment 用于演示 Kubernetes 的 NetworkPolicy:

    kubectl create deployment nginx --image=nginx   
    

    输出结果

    deployment.apps/nginx created
    
  • 通过Service暴露该Deployment

    kubectl expose deployment nginx --port=80 
    

    输出结果

    service/nginx exposed
    
  • 查询结果

    kubectl get svc,pod   
    

    输出结果

    NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
    service/kuard        ClusterIP   10.110.143.73    <none>        80/TCP    155d
    service/kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP   155d
    service/nginx        ClusterIP   10.102.109.126   <none>        80/TCP    17sNAME                           READY   STATUS    RESTARTS   AGE
    pod/nginx-8f458dc5b-mj7hv      1/1     Running   0          3m36s
    

从另外一个pod访问Service

默认是可以从另外一个Pod访问 nginx Service 的。下面的方法可以执行此测试:

default 名称空间中创建 busybox 容器,并执行 wget 命令:

kubectl run busybox --rm -ti --image=busybox -- /bin/sh

在命令行中执行 wget --spider --timeout=1 nginx

If you don't see a command prompt, try pressing enter.
/ # 
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.102.109.126:80)
remote file exists

限制对nginx的访问

下面的 NetworkPolicy 可以声明:只有带 access=true 标签的 Pod 可以访问 nginx 服务:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:name: access-nginx
spec:podSelector:matchLabels:app: nginxingress:- from:- podSelector:matchLabels:access: "true"
  1. apiVersion: networking.k8s.io/v1: 这指定了使用的 Kubernetes API 版本,表示该配置文件遵循的网络策略 API 的版本。
  2. kind: NetworkPolicy: 这表明我们正在定义一个网络策略对象。
  3. metadata: 这是网络策略对象的元数据部分,包含关于该策略的信息,比如名称(name)。
  4. name: access-nginx: 这是网络策略对象的名称。在这个例子中,它命名为 “access-nginx”。
  5. spec: 这是网络策略对象的规范部分,定义了实际的策略规则。
  6. podSelector: 这是策略的一个重要字段,用于选择要应用该策略的 Pod。
    • matchLabels: 这是一个标签选择器,用于指定选择的 Pod 必须具有哪些标签。在这里,app: nginx 表示只有带有标签 app=nginx 的 Pod 才会受到这个策略的影响。换句话说,这个策略只会应用于带有 app=nginx 标签的 Pod。
  7. ingress: - from: - podSelector: matchLabels: access: "true": 这是策略的一个重要字段,用于指定入站流量的规则。
    • from: 这是一个规则条件,指定了允许访问受该策略限制的 Pod 的来源。
    • podSelector: 这是一个标签选择器,用于指定允许访问的来源 Pod 必须具有哪些标签。在这里,matchLabels: access: "true" 表示只有带有标签 access=true 的 Pod 才被允许访问具有 app=nginx 标签的 Pod。换句话说,只有带有标签 access=true 的 Pod 可以访问具有 app=nginx 标签的 Pod。
  • 执行命令以创建该 NetworkPolicy:

    kubectl apply -f network-policy.yaml    
    

    输出结果如下:

    networkpolicy.networking.k8s.io/access-nginx created 
    

从不带标签的Pod访问nginx服务

如果从不带标签的 Pod 访问该 nginx 服务,请求将超时:

kubectl run  busybox --rm -ti --image=busybox -- /bin/sh

在命令行中执行 wget --spider --timeout=1 nginx

If you don't see a command prompt, try pressing enter.
/ # 
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.102.109.126:80)
wget: download timed out

从带有标签的Pod访问nginx服务

从带有 access=true 标签的 Pod 中访问 nginx 服务,将能够执行成功:

kubectl run busybox --rm -ti --labels="access=true" --image=busybox -- /bin/sh

在命令行中执行 wget --spider --timeout=1 nginx

If you don't see a command prompt, try pressing enter.
/ # 
/ # wget --spider --timeout=1 nginx
Connecting to nginx (10.102.109.126:80)
remote file exists

http://www.ppmy.cn/news/1011155.html

相关文章

【stream的使用】使用stream.filter过滤List对象

Stream初相识 概括讲&#xff0c;可以将Stream流操作分为3种类型&#xff1a; 创建Stream Stream中间处理 终止Steam 每个Stream管道操作类型都包含若干API方法&#xff0c;先列举下各个API方法的功能介绍。 开始管道 主要负责新建一个Stream流&#xff0c;或者基于现有的数组…

ReactNative 学习笔记

学习使用的开发工具 编译器 VSCode 开发语言工具 TypeScript 重要程度分类 一般 这个程度的知识点主要是达到熟练掌握即可&#xff0c;不用太深入研究和学习。 重要 这个程度的知识点主要是达到熟练掌握&#xff0c;并且内部的原理切要熟记&#xff0c;因为会关联到其他的知…

【二分查找】74. 搜索二维矩阵

74. 搜索二维矩阵 解题思路 方法1 将二维数组转换为一维数组使用二分查找 class Solution {public boolean searchMatrix(int[][] matrix, int target) {// 使用二分查找// 将矩阵写入一个数组中 然后使用二分查找算法int[] a new int[matrix.length * matrix[0].length];i…

STM32--综述

文章目录 前言STM32简介STM32F103C8T6系统结构Keil软件安装注意事项新建工程操作流程 前言 本专栏将学习B站江协科技的STM32入门教程&#xff0c;通过自身理解和对老师的总结所写的博客专栏。 STM32简介 STM32是意法半导体&#xff08;STMicroelectronics&#xff09;公司推…

当进行一个npm包开发时,依赖管理的重要性

npm install 的时候会进行什么&#xff1f; 当一个项目被拉下来并执行npm install的时候&#xff0c;其实dependencies 和 devDependencies都会被安装。 如果项目有严格区分生产、开发环境的话&#xff0c;是可以通过--production来以只安装 dependencies 字段的模块。 作为…

用栈实现队列(JS)

用栈实现队列 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int…

jvm-程序计数器

1、是什么 4 学习路线 类加载器 内存结构方法区 类堆 对象虚拟机栈程序计数器本地方法栈 执行引擎解释器编译器 热点代码 5 程序计数器–作用 java源代码编译蛏二进制字节码 jvm指令。 对所有平台保持一致性。记住下一条jvm指令的执行地址。寄存器&#xff0c;cpu中读取速度…

Sublime Text 4 Build 4151 4152 发布及注册方法

Sublime Text 是一个商业代码编辑器。它原生支持许多编程语言和标记语言&#xff0c;用户可以通过插件来扩展它的功能&#xff0c;这些插件通常是由社区建立的&#xff0c;并以自由软件许可证的形式维护。为了方便插件&#xff0c;Sublime Text 有一个 Python API。 Sublime T…