NJet KIC capabilities管理
NGINX 向云原生演进,All in OpenNJet
前言
从Linux 2.2开始,Linux将传统上与超级用户关联的特权划分为不同的单元(units),称为能力(capabilities),能力可以独立启用和禁用。能力是每个线程的属性。
Linux 有了capabilities机制,基于最小特权原则,可以按需给每个线程赋予需要的能力,而不是全部。从而降低了安全风险。
本文章,重点在于介绍在k8s环境中,使用NJet高级特性时,如何授予相应的能力。而不是介绍Linux capabilities机制和Linux capabilities 在docker中的应用。
NJet 哪些特性需要特权呢?
KIC中使用到的NJet特性,需要特权的特性如下:
- UDP代理(cap_net_admin\cap_net_raw)
- TCP代理(cap_net_admin\cap_net_raw)
- Bind 1024以下端口(cap_net_bind_service)
- 修改进程用户id(cap_setuid)
NJet KIC capabilities管理
通过对NJet KIC进行 capabilities管理,使用101用户启动容器后,使KIC中使用到的需要特权的NJet特性可以正常工作。
K8s环境
K8s版本 | 容器运行时 | Docker版 | 节点操作系统 |
---|---|---|---|
v1.23.8 | Docker | 20.10.11 | CentOS Linux release 7.9.2009 |
容器
通过deployment设置容器capability sets,deployment清单如下:
apiVersion: apps/v1 kind: Deployment metadata: name: njet-ingress namespace: njet-ingress spec: replicas: 1 selector: matchLabels: app: njet-ingress template: metadata: labels: app: njet-ingress #annotations: #prometheus.io/scrape: "true" #prometheus.io/port: "9113" #prometheus.io/scheme: http spec: serviceAccountName: njet-ingress automountServiceAccountToken: true containers: - image: tmlake/njet-ingress:1.2 imagePullPolicy: IfNotPresent name: njet-ingress ports: - name: http containerPort: 80 - name: https containerPort: 443 - name: readiness-port containerPort: 8081 - name: prometheus containerPort: 12001 readinessProbe: httpGet: path: /nginx-ready port: readiness-port periodSeconds: 1 resources: requests: cpu: "100m" memory: "128Mi" #limits: # cpu: "1" # memory: "1Gi" securityContext: allowPrivilegeEscalation: true runAsUser: 101 #njet runAsNonRoot: true capabilities: drop: - ALL # Containers can start njet binaries, Excluding SETGID add: - NET_BIND_SERVICE - NET_ADMIN - NET_RAW - SETGID #You can use sudo - SETUID #You can use sudo env: - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name args: - -nginx-configmaps=$(POD_NAMESPACE)/njet-config - -ingress-class=njet - -v=2 - -ingress-version=networking/v1 - -watch-endpointslices=true #true: k8s version > 1.21 # - -default-server-tls-secret=$(POD_NAMESPACE)/default-server-secret #- -include-year #- -enable-cert-manager #- -enable-external-dns #- -v=3 # Enables extensive logging. Useful for troubleshooting. #- -report-ingress-status #- -external-service=nginx-ingress #- -enable-prometheus-metrics #- -global-configuration=$(POD_NAMESPACE)/nginx-configuration
正常启动后,登录njet-ingress容器内可以查看容器进程的capability sets:
由图可知容器内1 号进程/njet-ingress继承了 cap_setgid,cap_setuid,cap_net_bind_service,cap_net_admin,cap_net_raw能力集。effective set(一种Thread capability sets)没有被设置。
容器设置上述能力集,以便1号进程有权限创建子进程NJet。
NJet binary file
使用101用户启动容器后,容器中的进程effective set(一种Thread capability sets)是没有进程需要的capability sets。所以在制作容器镜像时需要对二进制文件设置需要的capability sets,设置方式如下:
RUN setcap 'cap_net_bind_service,cap_setuid,cap_net_admin,cap_net_raw=+eip' /usr/local/njet/sbin/njet
正常启动后,登录njet-ingress容器内查看NJet进程的capability sets:
由图可知容器内 17 号进程 njet 继承了
cap_setgid,cap_setuid,cap_net_bind_service,cap_net_admin,cap_net_raw 能力集。CapEff 被授予二进制文件设置的
cap_setuid,cap_net_bind_service,cap_net_admin,cap_net_raw能力集,这样 njet 进程具有权限使用NJet特权特性了。
OpenNJet 最早是基于 NGINX1.19 基础 fork 并独立演进,具有高性能、稳定、易扩展的特点,同时也解决了 NGINX 长期存在的难于动态配置、管理功能影响业务等问题。 邮件组 官网

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
GaussDB与openGauss有什么相同和不同?
众所周知,GaussDB是华为自主创新研发的分布式关系型数据库,为企业提供功能全面、稳定可靠、扩展性强、性能优越的企业级数据库服务,openGauss是开源数据库,两者之间又是什么样的关系,有什么相同和不同,让我们一一展开来探讨。 一、产品定位 1、openGauss: 一款支持SQL2003标准语法,支持主备部署的高可用关系型数据库。 多种存储模式支持复合业务场景,新引入提供原地更新存储引擎。 NUMA化数据结构支持高性能。 Paxos一致性日志复制协议,主备模式,CRC校验支持高可用。 支持全密态计算、账本数据库等安全特性,提供全方位端到端的数据安全保护。 通过Table Access Method接口层支持多存储引擎。 2、GaussDB: 华为自主创新研发的分布式关系型数据库。该产品具备企业级复杂事务混合负载能力,同时支持分布式事务,同城跨AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。 二、内核 1、G...
- 下一篇
RXThinkCMF 敏捷开发框架 Laravel10.x+Layui 版本 v2.0.0 发布
v2.0.0更新如下:1、新增Docker容器化解决方案;2、优化系统功能模块和文件结构;3、优化编码规范,统一命名和描述;4、优化数据库表结构和编码;5、优化模块页面,提升使用体验度;6、修复近期用户反馈的问题; 项目介绍 一款 PHP 语言基于 Laravel10.x、Layui、MySQL 等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,框架自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传、下拉选择、开关按钮、单选按钮、多选按钮、图片裁剪等等一系列个性化、轻量级的组件,是一款真正意义上实现组件化开发的敏捷开发框架,框架已集成了完整的 RBAC 权限架构和常规基础模块,为了敏捷快速开发,提升研发效率,框架内置了一键 CRUD 代码生成器,自定义了模块生成模板,可以根据已建好的表结构 (字段注释需规范) 快速的一键生成整个模块的所有代码和增删改查等等功能业务,真正实现了低代码开发,极大的节省了人力成本的同时提高了开发效率,缩短了研发周期,是一款真正意义上实现组件化、...
相关文章
文章评论
共有0条评论来说两句吧...