首页 文章 精选 留言 我的

精选列表

搜索[代码增强],共10049篇文章
优秀的个人博客,低调大师

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 层的规则生效了。 文章统一发布在公众号云原生指北

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

OpenAI 收购 Rockset 以增强其检索能力

OpenAI 宣布完成对数据库分析公司 Rockset 的收购,但具体财务条款尚未披露。此举是 OpenAI 继去年收购 AI 设计公司 Global Illumination 之后公开宣布的第二次重大收购。 OpenAI 在其官方博客上发表的一篇公告中表示,他们将整合 Rockset 的技术来“为其所有产品的基础设施提供支持”。Rockset 团队的成员将加入 OpenAI,而 Rockset 的现有客户也将“逐步”离开 Rockset 平台。 OpenAI 首席运营官 Brad Lightcap 称,“Rockset 的基础设施使公司能够将其数据转化为可操作的情报。我们很高兴通过将 Rockset 的基础集成到 OpenAI 产品中,为我们的客户带来这些好处。” Rockset 由前 Facebook 工程师 Venkat Venkataramani 和 Tudor Bosman 以及数据库架构师 Dhruba Borthakur 于 2016 年共同创立,其创建的工具可让公司自动从数据库和公共云存储服务中提取数据,然后为搜索和分析应用程序索引这些数据。 数据显示,在被收购之前, Rockset 已成功从 Icon Ventures、Sequoia 和 Greylock 等投资者手中筹集了超过 1.175 亿美元的资金。该公司还拥有 Meta 和 JetBlue 等知名客户。

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

Mozi.Network 1.4.2 发布,增强 Http 功能

Mozi.Network是基于.Net开发的网络应用组件套装。项目实现了几个常见的网络通讯协议。所有的模块在实现时均以应用场景为出发点进行开发,保证模块精巧,功能完备,调用简单,可扩展性强,且调用不破坏宿主程序的逻辑结构。 [新增] HttpEmbedded中新增断点续传 HttpEmbedded中增加API简易注册接口, 无需继承BaseApi即可实现接口 HttpEmbedded中增加Transfer-Encoding:chunked,分块传输

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

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

用户登录
用户注册