使用docker创建只读文件系统

容器化部署对应用的运维带来了极大的方便,同时也带来一些新的安全问题需要考虑.比如黑客入侵到容器内,对容器内的系统级别或者应用级别文件进行修改,会造成难以估量的损失.(比如修改hosts文件导致dns解析异常,修改web资源导致网站被嵌入广告,后端逻辑被更改导致权限验证失效等,由于是分布式部署,哪些容器内的资源被修改也很难以发现).解决这个问题的办法就是创建创建一个具有只读文件系统的容器.下面介绍使用docker run命令和docker compose来创建具有只读文件系统的容器.

使用docker run命令创建只读文件系统

比如说要创建一个只读文件系统的redis容器,可以执行以下命令

docker run --read-only redis

docker compose/swarm创建只读文件系统

yaml编排文件示例如下

version: '3.3' services:  redis:    image: redis:4.0.1-alpine    networks:      - myoverlay    read_only: truenetworks:  myoverlay:

问题:创建只读文件系统看起来很不错,但是实际上往往会有各种各样的问题,比如很多应用要写temp文件或者写日志文件,如果对这样的应用创建只读容器则很可能导致应用无法正常启动.对于需要往固定位置写入日志或者临时文件的应用,可以挂载宿主机的存储卷,虽然容器是只读的,但是挂载的盘仍然是可读写的.

创建只读的asp.net core容器

上面一节我们讲到了创建容器只读文件系统以增加安全性,以及如何解决需要写入日志文件或者临时文件这样常见的问题.我们尝试创建一个只读的asp.net应用时,即便不使用任何log组件(即不写入日志),仍然无法正常启动镜像.解决这个问题其实也非常简单,只需要把环境变量COMPlus_EnableDiagnostics的值设置为0即可.

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS baseWORKDIR /appEXPOSE 52193FROM microsoft/dotnet:2.2-sdk AS buildWORKDIR /srcCOPY . .WORKDIR "/src"RUN dotnet build "ReadOnlyTest.csproj" -c Release -o /appFROM build AS publishRUN dotnet publish "ReadOnlyTest.csproj" -c Release -o /appFROM base AS finalWORKDIR /appENV DOTNET_RUNNING_IN_CONTAINER=trueENV DOTNET_CLI_TELEMETRY_OPTOUT=1ENV COMPlus_EnableDiagnostics=0COPY --from=publish /app .ENTRYPOINT ["dotnet", "ReadOnlyTest.dll"]

我们对这些环境变量进行简单介绍

  • DOTNET_RUNNING_IN_CONTAINER值设置为true时则表示应用运行在容器内,方便我们获取程序的运行环境,然后根据环境做出不同决策(比如单元测试的时候,可能要根据项目是运行在windows,linux或者linux容器做出不同的测试策略).当然,你也可以设置其它的环境变量来方便自己使用,比如你键名称设置为IsRunningInDocker,但是DOTNET_RUNNING_IN_CONTAINER

  • DOTNET_CLI_TELEMETRY_OPTOUT是否输出遥测信息,如果设置为1则是关闭,这样dotnet.exe就不会向调试窗口输出遥测信息.

  • COMPlus_EnableDiagnostics目前没有找到太多关于这个参数的详细信息,只是查阅资源发现这开启这项配置可以创建只读权限 aspnet 应用程序.

微软官方基础镜像里还包含一项名称叫作ASPNETCORE_VERSION的环境变量,我们可以直接读取它,这样使用公共的环境变量一来避免息手动设置和更新的麻烦,二来便于和社区交流(自己定义约束的只能用于内部团队交流)

我们如何使用这些环境变量呢,其它可以在程序里面暴露一个helper方法,比如

这样我们就可以根据实际的需求来使用它.

上面我们介绍了如何使用docker run命令以及docker-compose创建只读文件系统.然而在kubernetes集群里,我们需要使用k8s的编排方法来创建只读文件系统.那么在k8s里如何创建只读文件系统.其实这里涉及到了另一个高级主题:那就是k8s的安全策略(Pod Security Policies)我们将在下一节介绍它.

原文地址:https://www.cnblogs.com/tylerzhou/p/11075201.html

kubernetes高级之创建只读文件系统以及只读asp.net core容器相关推荐

  1. 为什么只读文件系统_xfs 只读共享盘的数据不一致问题

    记录一个线上遇到的坑. 问题还原 有一个只读共享盘,它的文件系统是 xfs.它会被并发挂载到不同的容器上,数量规模是上百个吧.有一天运维人员发现这个盘无法挂载了,而且很奇怪的是:有一部分容器能挂载上, ...

  2. Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例

    在<Kubernetes中分布式存储Rook-Ceph部署快速演练>文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernete ...

  3. ASP .NET Core Web MVC系列教程一:创建一个Web应用程序

    系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 从Visual Studio中选择" 创建新项目". 选 ...

  4. ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序

    本系列教程翻译自微软官方教程,官方教程地址:Get started with ASP.NET Core MVC | Microsoft Docs 本系列教程介绍了构建MVC Web应用程序的基础知识. ...

  5. 学习ASP.NET Core Razor 编程系列三——创建数据表及创建项目基本页面

    原文:学习ASP.NET Core Razor 编程系列三--创建数据表及创建项目基本页面 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 ...

  6. ASP.NET Core 高级(一)【.NET 的开放 Web 接口 (OWIN)】

    ASP.NET Core 中 .NET 的开放 Web 接口 (OWIN) ASP.NET Core 支持 .NET 的开放 Web 接口 (OWIN). OWIN 允许 Web 应用从 Web 服务 ...

  7. linux创建只读共享目录,mkdir: 无法创建目录kk: 只读文件系统

    创建文件提示 [email protected]:/test>mkdir kk mkdir: 无法创建目录"kk": 只读文件系统 [email protected]:/te ...

  8. 解决ntfs格式的移动硬盘mount到Linux下时变成只读文件系统的问题

    环境介绍 主机: XP 虚拟机:VirtualBox+Debian6 遇到的问题 我有一块西部数据的移动硬盘,虚拟机中有一些资料需要拷贝到移动硬盘中,然后我将移动硬盘插上后,执行如下设置,将移动硬盘分 ...

  9. 嵌入式linux只读保护,如何使用squashfs只读文件系统制作Linux系统文件

    在使用嵌入式Linux 系统的时,会出现由于设备意外断电引起文件系统损坏而最终使该设备无法启动的现象.为了应对这种情况,通常会从硬件设计如采用备用电源,无论是锂电池还是超级电容等,或者从系统软件设上加 ...

最新文章

  1. python介绍和用途-python应用领域介绍
  2. ApplicationListener,Game,Screen,Stage,Actor,Group
  3. 轻松实现突破网管限制(SoftEther实际应用)
  4. 尽可能地做到无服务器,但不止于此
  5. 基于RTP的QOS算法简介
  6. 美团无人配送CVPR2020论文CenterMask解读
  7. layui select日期_layui给下拉框、按钮状态、时间赋初始值的方法
  8. 如何在点击a标签下载文件的时候通过JavaScript动态的修改文件的名称?
  9. 札记:Xen是如何工作的?
  10. java-commons-pool2--(1)--连接池详解
  11. orocos KDL 由位置计算力矩
  12. [置顶] 得失寸心知
  13. python内存持续增长_Python 进程内存增长解决方案
  14. RISC-V架构中断定义
  15. 什么是SaaS? 定义软件即服务
  16. 悲惨程序生涯 狗血得你无法相信
  17. python开源oa系统_「开源」目前见过的最好的开源OA产品
  18. 输入一元二次方程的三个系数求方程的实根(顺序结构)
  19. c语言的画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  20. GHOST装机出现A:\GHOSTERR.TXT 问题分析和详解

热门文章

  1. java注解类型_Java注解类型
  2. chromebook刷机_如何获取Android应用以查看Chromebook上的外部存储
  3. mac 不能连接wi-fi_如何阻止Mac自动连接到Wi-Fi网络
  4. hadoop编译java,Hadoop源码编译(2.4.1)
  5. IT兄弟连 JavaWeb教程 AJAX定义以及解决的问题
  6. js中关于Blob对象的介绍与使用
  7. 7z压缩文档的powershell示例
  8. IBM与博世合作打造轻松的工业物联网
  9. 详解Oracle DELETE和TRUNCATE 的区别
  10. SD卡读写扇区注意事项(转)