首页 文章 精选 留言 我的

精选列表

搜索[文本图像增强],共10000篇文章
优秀的个人博客,低调大师

Rook v1.18 发布,存储增强

Rook v1.18 版本现已发布,这是一个功能丰富的版本,进一步提升了 Kubernetes 存储能力。本次 v1.18 版本带来了很多 Ceph 存储提供者的新功能。 Ceph CSI Operator Ceph CSI Operator 现在是默认且推荐的组件,用于配置 RBD、CephFS 和 NFS 卷的 CSI 驱动。此前,CSI 驱动由 Rook 自动配置。现在 CSI Operator 独立运行,管理 Ceph-CSI 驱动。 升级期间及整个 v1.18.x 版本中,Rook 会自动将旧的 CSI 配置转换为新的 CSI Operator CR,转换过程对用户透明。未来的 v1.19 版本中,Rook 将不再直接控制这些设置,让高级用户有更大灵活性。届时会发布新指南,讲解如何直接配置 Ceph CSI Operator CR。 目前需要注意: 安装时(详见快速入门指南),需要新建一个 manifest 文件:csi-operator.yaml 通过 Helm 安装时,rook-ceph chart 中新增的csi.rookUseCsiOperator设置默认启用,会自动安装 Ceph CSI Operator。 自 v1.15 起,CSI Operator 一直处于实验阶段,但稳定性已得到提升。如果遇到阻塞问题,可以通过在operator.yaml设置ROOK_USE_CSI_OPERATOR: false或 Helm 设置csi.rookUseCsiOperator: false来禁用 CSI Operator,回退到旧的 CSI 驱动。禁用后请务必提交问题报告。 Ceph CSI 3.15 Ceph CSI v3.15 版本带来了 RBD、CephFS 和 NFS 驱动的多项新特性和改进。此版本既支持通过 Ceph CSI Operator 配置,也支持 Rook 直接配置。下一版本(预计 12 月)将强制通过 Ceph CSI Operator 配置 CSI 驱动。届时会发布配置指南。 CephX 密钥轮换 该功能目前处于实验阶段。 Ceph 和 Rook 团队合作实现了 CephX 认证密钥的轮换功能。本次发布了新的实验性 API,支持 CephX 密钥轮换。新部署的 Rook 集群会在部分资源中显示新的 cephx 状态,也可以通过spec.security.cephx设置启动密钥轮换。 注意事项: 只有 Ceph 版本 v19.2.3 及以上支持 Rook 所需的密钥轮换功能。 Rook 管理的 Ceph 管理密钥暂时不能轮换,预计会在 v1.18 的补丁版本中支持,保证企业级可靠性。 由于 Ceph 架构限制,Ceph v19 版本的 Monitor(mon)密钥暂不支持轮换。Rook 和 Ceph 正在合作,争取未来 Ceph 版本安全支持 mon 密钥轮换。 完整密钥轮换文档见官网。 节点拓扑验证 创建 OSD 时可以通过节点标签配置拓扑。Ceph 对 CRUSH map 的拓扑有严格要求。之前拓扑无效时,只会在 Rook operator 日志中出现难懂错误。现在,Rook 会在创建 OSD 前验证拓扑有效性,无效时拒绝创建,并在 operator 日志中输出详细错误。 无效拓扑示例: 拓扑名称在集群中必须唯一,比如不能让机架和区域重名。 同名的子拓扑不能跨不同故障域存在,比如两个不同区域不能包含同名机架。 已有集群检测到无效拓扑时,Rook 仅记录警告并继续运行。 资源 ID 存储类通常从池(RBD)或文件系统(CephFS)配置卷。为支持多租户隔离,也可使用特定 RADOS 命名空间(RBD)或子卷组(CephFS)。之前创建这类存储类需由 Rook 生成 ID 并从 CR 状态中解析。现在可以直接在相关 CR 上声明 clusterID,简化流程。详情见: CephBlockPoolRadosNamespace CephFilesystemSubvolumeGroup Monitor 故障转移 在某些情况下,如果 Monitor(mon)失去法定人数,将自动故障转移。此前会等待 10-20 分钟超时,给 mon 机会恢复。现在如果分配的 K8s 节点已不存在,mon 会立即故障转移,无需等待超时。 版本支持 Ceph Tentacle v20 预计未来 1-2 个月内,Ceph 团队将发布 Ceph Tentacle(v20.2.0)版本。Rook 已开始测试并准备支持该版本的新特性。 Ceph 正式发布后,Rook 会第一时间添加官方支持。目前 Rook 仍持续测试 Ceph Reef v18 和 Ceph Squid v19。 Kubernetes v1.29 - v1.34 Rook 现在最低支持 Kubernetes v1.29,最高支持即将发布的 v1.34。Rook CI 会针对这些版本做测试,确保兼容性。如果仍需使用更旧版本 Kubernetes,虽未完全测试,但并无硬性阻止。 Helm v3.13+ 此前只测试最新 Helm 版本,文档也只要求 3.x 版本。现在 Rook 支持最近六个次版本及其补丁版本,具体支持 Helm 3.13 及以上版本。

优秀的个人博客,低调大师

Manifold —— 流式能力增强 Java 编译插件

Manifold是一个Java编译器插件,提供以下能力: 直接、类型安全地访问: GraphQL JSON & JSON 模式,YAML,XML CSV JavaScript 等等 扩展方法 Properties Tuple表达式 运算符重载 Unit表达式 Java模板引擎 预处理器 在Java 8 - 19中全部支持,在IntelliJ IDEA和Android Studio中有全面的IDE支持。Manifold由一组模块组成,每个功能都有一个模块。只需将你选择的Manifold依赖项添加到你现有的项目中,就可以开始利用它们了。

优秀的个人博客,低调大师

使用 Cilium 增强 Kubernetes 网络安全

TL;DR 在本篇,我们分别使用了 Kubernetes 原生的网络策略和 Cilium 的网络策略实现了 Pod 网络层面的隔离。不同的是,前者只提供了基于 L3/4 的网络策略;后者支持 L3/4、L7 的网络策略。 通过网络策略来提升网络安全,可以极大降低了实现和维护的成本,同时对系统几乎没有影响。 尤其是基于 eBPF 技术的 Cilium,解决了内核扩展性不足的问题,从内核层面为工作负载提供安全可靠、可观测的网络连接。 背景 为什么说 Kubernetes 网络存在安全隐患?集群中的 Pod 默认是未隔离的,也就是 Pod 之间的网络是互通的,可以互相通信的。 这里就会有问题,比如由于数据敏感服务 B 只允许特定的服务 A 才能访问,而服务 C 无法访问 B。要禁止服务 C 对服务 B 的访问,可以有几种方案: 在 SDK 中提供通用的解决方案,实现白名单的功能。首先请求要带有来源的标识,然后服务端可以接收规则设置放行特定标识的请求,拒绝其他的请求。 云原生的解决方案,使用服务网格的 RBAC、mTLS 功能。RBAC 实现原理与应用层的 SDK 方案类似,但是属于基础设施层的抽象通用方案;mTLS 则会更加复杂一些,在连接握手阶段进行身份验证,涉及证书的签发、验证等操作。 以上两种方案各有利弊: SDK 的方案实现简单,但是规模较大的系统会面临升级推广困难、多语言支持成本高等问题。 服务网格的方案是基础设施层的通用方案,天生支持多语言。但是对于未落地网格的用户来说,架构变化大,成本高。如果单纯为了解决安全问题,使用网格方案性价比又很低,且不说现有网格实现等落地难度大及后期的使用维护成本高。 继续向基础设施下层找方案,从网络层入手。Kubernetes 提供了的网络策略 NetworkPolicy,则可以实现“网络层面的隔离”。 示例应用 在进一步演示 NetworkPolicy 的方案之前,先介绍用于演示的示例应用。我们使用 Cilium 在互动教程 Cilium getting started 中使用的“星球大战”场景。 这里有三个应用,星战迷估计不会陌生: 死星 deathstar:在 80 端口提供 web 服务,有 2 个 副本,通过 Kubernetes Service 的负载均衡为帝国战机对外提供”登陆“服务。 钛战机 tiefighter:执行登陆请求。 X翼战机 xwing:执行登陆请求。 如图所示,我们使用了 Label 对三个应用进行了标识:org 和 class。在执行网络策略时,我们会使用这两个标签识别负载。 # app.yaml --- apiVersion: v1 kind: Service metadata: name: deathstar labels: app.kubernetes.io/name: deathstar spec: type: ClusterIP ports: - port: 80 selector: org: empire class: deathstar --- apiVersion: apps/v1 kind: Deployment metadata: name: deathstar labels: app.kubernetes.io/name: deathstar spec: replicas: 2 selector: matchLabels: org: empire class: deathstar template: metadata: labels: org: empire class: deathstar app.kubernetes.io/name: deathstar spec: containers: - name: deathstar image: docker.io/cilium/starwars --- apiVersion: v1 kind: Pod metadata: name: tiefighter labels: org: empire class: tiefighter app.kubernetes.io/name: tiefighter spec: containers: - name: spaceship image: docker.io/tgraf/netperf --- apiVersion: v1 kind: Pod metadata: name: xwing labels: app.kubernetes.io/name: xwing org: alliance class: xwing spec: containers: - name: spaceship image: docker.io/tgraf/netperf Kubernetes 网络策略 可以通过官方文档获取更多详细信息,这里我们直接放出配置: # native/networkpolicy.yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: policy namespace: default spec: podSelector: matchLabels: org: empire class: deathstar policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: org: empire ports: - protocol: TCP port: 80 podSelector :表示要应用网络策略的工作负载均衡,通过 label 选择到了 deathstar 的 2 个 Pod。 policyTypes :表示流量的类型,可以是 Ingress 或 Egress 或两者兼具。这里使用 Ingress,表示对选择的 deathstar Pod 的入站流量执行规则。 ingress.from:表示流量的来源工作负载,也是使用 podSelector 和 Label 进行选择,这里选中了 org=empire 也就是所有“帝国的战机”。 ingress.ports:表示流量的进入端口,这里列出了 deathstar 的服务端口。 接下来,我们测试下。 测试 先准备环境,我们使用 K3s 作为 Kubernetes 环境。但由于 K3s 默认的 CNI 插件 Flannel 不支持网络策略,我们需要换个插件,这里选择 Calico,即 K3s + Calico 的方案。 先创建一个单节点的集群: curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="--flannel-backend=none --cluster-cidr=10.42.0.0/16 --disable-network-policy --disable=traefik" sh - 此时,所有的 Pod 都处于 Pending 状态,因为还需要安装 Calico: kubectl apply -f https://projectcalico.docs.tigera.io/manifests/calico.yaml 待 Calico 成功运行后,所有的 Pod 也会成功运行。 接下来就是部署应用: kubectl apply -f app.yaml 执行策略前,执行下面的命令看看“战机能否登陆死星”: kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing Ship landed kubectl exec xwing -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing Ship landed 从结果来看,两种 ”战机“(Pod 负载)都可以访问 deathstar 服务。 此时执行网络策略: kubectl apply -f native/networkpolicy.yaml 再次尝试”登陆“,xwing 的登陆请求会停在那(需要使用 ctrl+c 退出,或者请求时加上 --connect-timeout 2)。 思考 使用 Kubernetes 网络策略实现了我们想要的,从网络层面为服务增加了白名单的功能,这种方案没有改造成本,对系统也几乎无影响。 Cilium 还没出场就结束了?我们继续看: 有时我们的服务会对外暴露一些管理端点,由系统调用执行一些管理上的操作,比如热更新、重启等。这些端点是不允许普通服务来调用,否则会造成严重的后果。 比如示例中,tiefighter 访问了 deathstar 的管理端点 /exhaust-port: kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port Panic: deathstar exploded goroutine 1 [running]: main.HandleGarbage(0x2080c3f50, 0x2, 0x4, 0x425c0, 0x5, 0xa) /code/src/github.com/empire/deathstar/ temp/main.go:9 +0x64 main.main() /code/src/github.com/empire/deathstar/ temp/main.go:5 +0x85 出现了 Panic 错误,检查 Pod 你会发现 dealthstar 挂了。 Kubernetes 的网络策略仅能工作在 L3/4 层,对 L7 层就无能为力了。 还是要请出 Cilium。 Cilium 网络策略 由于 Cilium 涉及了 Linux 内核、网络等众多知识点,要讲清实现原理篇幅极大。故这里仅摘取了官网的介绍,后期希望有时间再写一篇关于实现的。 Cilium 简介 Cilium 是一个开源软件,用于提供、保护和观察容器工作负载(云原生)之间的网络连接,由革命性的内核技术 eBPF 推动。 eBPF 是什么? Linux 内核一直是实现监控/可观测性、网络和安全功能的理想地方。 不过很多情况下这并非易事,因为这些工作需要修改内核源码或加载内核模块, 最终实现形式是在已有的层层抽象之上叠加新的抽象。 eBPF 是一项革命性技术,它能在内核中运行沙箱程序(sandbox programs), 而无需修改内核源码或者加载内核模块。 将 Linux 内核变成可编程之后,就能基于现有的(而非增加新的)抽象层来打造更加智能、 功能更加丰富的基础设施软件,而不会增加系统的复杂度,也不会牺牲执行效率和安全性。 我们来看下 Cilium 的网络策略: # cilium/networkpolicy-L4.yaml apiVersion: "cilium.io/v2" kind: CiliumNetworkPolicy metadata: name: "rule1" spec: description: "L7 policy to restrict access to specific HTTP call" endpointSelector: matchLabels: org: empire class: deathstar ingress: - fromEndpoints: - matchLabels: org: empire toPorts: - ports: - port: "80" protocol: TCP 与 Kubernetes 的原生网络策略差异不大,参考前面的介绍也都看懂,我们直接进入测试。 测试 由于 Cilium 本身就实现了 CNI,所以之前的集群就不能用了,先卸载集群: k3s-uninstall.sh # !!!切记要清理之前的 cni 插件 sudo rm -rf /etc/cni/net.d 还是使用同样的命令创建单节点的集群: curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="--flannel-backend=none --cluster-cidr=10.42.0.0/16 --disable-network-policy --disable=traefik" sh - # cilium 会使用该变量 export KUBECONFIG=/etc/rancher/k3s/k3s.yaml 接下来安装 Cilium CLI: curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz{,.sha256sum} sha256sum --check cilium-linux-amd64.tar.gz.sha256sum sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin rm cilium-linux-amd64.tar.gz{,.sha256sum} cilium version cilium-cli: v0.10.2 compiled with go1.17.6 on linux/amd64 cilium image (default): v1.11.1 cilium image (stable): v1.11.1 cilium image (running): unknown. Unable to obtain cilium version, no cilium pods found in namespace "kube-system" 安装 Cilium 到集群: cilium install 待 Cilium 成功运行: cilium status /¯¯\ /¯¯\__/¯¯\ Cilium: OK \__/¯¯\__/ Operator: OK /¯¯\__/¯¯\ Hubble: disabled \__/¯¯\__/ ClusterMesh: disabled \__/ Deployment cilium-operator Desired: 1, Ready: 1/1, Available: 1/1 DaemonSet cilium Desired: 1, Ready: 1/1, Available: 1/1 Containers: cilium Running: 1 cilium-operator Running: 1 Cluster Pods: 3/3 managed by Cilium Image versions cilium-operator quay.io/cilium/operator-generic:v1.11.1@sha256:977240a4783c7be821e215ead515da3093a10f4a7baea9f803511a2c2b44a235: 1 cilium quay.io/cilium/cilium:v1.11.1@sha256:251ff274acf22fd2067b29a31e9fda94253d2961c061577203621583d7e85bd2: 1 部署应用: kubectl apply -f app.yaml 待应用启动后测试服务调用: kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing Ship landed kubectl exec xwing -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing Ship landed 执行 L4 网络策略: kubectl apply -f cilium/networkpolicy-L4.yaml 再次尝试“登陆”死星,xwing 战机同样无法登陆,说明 L4 层的规则生效。 我们再尝试 L7 层的规则: # cilium/networkpolicy-L7.yaml apiVersion: "cilium.io/v2" kind: CiliumNetworkPolicy metadata: name: "rule1" spec: description: "L7 policy to restrict access to specific HTTP call" endpointSelector: matchLabels: org: empire class: deathstar ingress: - fromEndpoints: - matchLabels: org: empire toPorts: - ports: - port: "80" protocol: TCP rules: http: - method: "POST" path: "/v1/request-landing" 执行规则: kubectl apply -f cilium/networkpolicy-L7.yaml 这回,使用 tiefighter 调用死星的管理接口: kubectl exec tiefighter -- curl -s -XPUT deathstar.default.svc.cluster.local/v1/exhaust-port Access denied # 登陆接口工作正常 kubectl exec tiefighter -- curl -s -XPOST deathstar.default.svc.cluster.local/v1/request-landing Ship landed 这回返回了 Access denied,说明 L7 层的规则生效了。 文章统一发布在公众号云原生指北

优秀的个人博客,低调大师

QuickDAO 4.1.2 发布,索引相关功能增强

QuickDAO4.1.2版本已发布,可在maven中央仓库下载(阿里云仓库可能更新不及时),本次更新内容如下: [新增]@CompositeIndex注解,支持在表上建立组合索引 [新增]@UniqueField注解,标识哪些字段作为判断实例是否唯一 [新增]支持指定返回列类型,可通过columnTypeMapping方法指定要返回的列的类型 [优化]@Index注解现在支持制定索引类型,索引名称,索引方法等等功能 [优化]SQLite数据库支持LocalDate和LocalDateTime类型 QuickDAO是一款简单易用的ORM框架,虽然市面上ORM框架已经非常多,但是有很多痛点这些框架并没有解决.QuickDAO相较于其他ORM框架的特点如下: 支持外键关联操作 虽然很多ORM框架宣称支持外键查询,但无一例外最终形式仍然是让开发者手写SQL语句.QuickDAO在API设计层面上支持外键关联查询,真正的无需手写多表关联查询SQL语句. 所有对数据库的操作只需要注入一个DAO对象即可完成 Mybatis等框架一个实体类对应一个Mapper接口文件,一个xml文件.特别是涉及到多表查询时,经常在开发中才发现需要引入另外的XXXMapper.QuickDAO只需要一个DAO对象,即可完成对数据库的所有操作 支持Java代码里指定数据库列类型,索引等信息 QuickDAO支持自动建表,自动新增字段.不仅如此,QuickDAO支持在Java代码里指定列类型,列名,是否创建外键,创建数据库索引等等.此外,QuickDAO还支持查询数据库字段信息,新增字段,删除字段等操作. 强大的查询操作API 如果您真正深入了解QuickDAO后,会发现QuickDAO的API设计绝对让您欣喜.QuickDAO的Query接口定义了大量查询操作API,例如非空查询,等值查询,大于小于不等于查询,IN查询,子查询,分页,排序,指定返回的列等等等等.这些接口都添加了相应的接口注释,此外命名也是相对规范的,所有添加查询的接口都以add开头. 最后,写这个框架的初衷是市面上已有的ORM框架不能解决开发中痛点.QuickDAO经过近2年的支持开发,目前已经迭代到4.X版本,也在个人项目,公司项目实际使用过.希望本人开发的QuickDAO框架能够为中国的开源事业贡献一份自己的力量. QuickDAO文档: https://quickdao.schoolwow.cn QuickDAO的github地址: https://github.com/sunyue1380/QuickDAO4 QuickDAO的gitee地址: https://gitee.com/648823596/quickdao4

优秀的个人博客,低调大师

Animated Drawings —— 图像转动画工具

Animated Drawings 是一个可以将绘画作品转换成动画的项目,这个项目旨在成为一个有用的创造性工具,允许你灵活地创造动画,让你自己画的人物成为主角。 项目网站:http://www.fairanimateddrawings.com 安装 本项目已在 macOS Ventura 13.2.1 和 Ubuntu 18.04 上测试。如果你在其他操作系统上安装,可能会遇到问题。 强烈建议在安装 Animated Drawings 之前激活一个 Python 虚拟环境。Conda 的 Miniconda 是一个不错的选择。按照这些步骤下载并安装它。然后运行以下命令: # create and activate the virtual environment conda create --name animated_drawings python=3.8.13 conda activate animated_drawings # clone AnimatedDrawings and use pip to install git clone https://github.com/facebookresearch/AnimatedDrawings.git cd AnimatedDrawings pip install -e . 快速开始 要开始使用,请按照下列步骤操作: 打开终端并激活 animated_drawings conda 环境: ~ % conda activate animated_drawings 确保位于 AnimatedDrawings 的根目录中: (animated_drawings) ~ % cd {location of AnimatedDrawings on your computer} 启动 Python 解释器: (animated_drawings) AnimatedDrawings % python 将以下两行复制并粘贴到解释器中: from animated_drawings import render render.start('./examples/config/mvc/interactive_window_example.yaml')

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册