首页 文章 精选 留言 我的

精选列表

搜索[动态代码分析],共10000篇文章
优秀的个人博客,低调大师

MoE 系列(三)|使用 Istio 动态更新 Go 扩展配置

上一篇我们用 Go 扩展实现了 Basic Auth,体验了 Go 扩展从 Envoy 接受配置。 之所以这么设计,是想复用 Envoy 原有的 xDS 配置推送通道,今天我们就来体验一番,云原生的配置变更。 前提准备 这次我们需要一套 K8s 环境,如果你手头没有,推荐使用 Kind 安装一套。具体安装方式,这里就不展开了。 安装 Istio 我们直接安装最新版的 Istio: # 下载最新版的 istioctl$ export ISTIO_VERSION=1.18.0-alpha.0$ curl -L https://istio.io/downloadIstio | sh - # 将 istioctl 加入 PATH$ cd istio-$ISTIO_VERSION/$ export PATH=$PATH:$(pwd)/bin # 安装,包括 istiod 和 ingressgateway$ istioctl install 是的,由于 Go 扩展已经贡献给了上游官方,Istiod(Pilot)和 Ingress Gateway 都已经默认开启了 Go 扩展,并不需要重新编译。 Istio 配置 Ingress 我们先用 Istio 完成标准的 Ingress 场景配置,具体可以看Istio 的官方文档[1]。 配置好了之后,简单测试一下: $ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/status/200"HTTP/1.1 200 OKserver: istio-envoydate: Fri, 10 Mar 2023 15:49:37 GMT 基本的 Ingress 已经跑起来了。 挂载 Golang so 之前我们介绍过,Go 扩展是单独编译为 so 文件的,所以,我们需要把 so 文件,挂载到 Ingress Gateway 中。 这里我们把上次 Basic Auth 编译出来的 libgolang.so,通过本地文件挂载进来。简单点搞,直接 edit deployment 加了这些配置: # 申明一个 hostPath 的 volumevolumes:- name: golang-so-basic-auth hostPath: path: /data/golang-so/example-basic-auth/libgolang.so type: File # 挂载进来volumeMounts:- mountPath: /etc/golang/basic-auth.so name: golang-so-basic-authreadOnly:true 开启 Basic Auth 认证 Istio 提供了 EnvoyFilter CRD,所以,用 Istio 来配置 Go 扩展也比较方便,apply 这段配置,Basic Auth 就开启了。 apiVersion: networking.istio.io/v1alpha3kind: EnvoyFiltermetadata: name: golang-filter namespace: istio-systemspec: configPatches: # The first patch adds the lua filter to the listener/http connection manager - applyTo: HTTP_FILTER match: context: GATEWAY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" subFilter: name: "envoy.filters.http.router" patch: operation: INSERT_BEFORE value: # golang filter specification name: envoy.filters.http.golang typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.http.golang.v3alpha.Config" library_id: example library_path: /etc/golang/basic-auth.so plugin_name: basic-auth plugin_config: "@type": "type.googleapis.com/xds.type.v3.TypedStruct" type_url: typexx value: username: foo password: bar 虽然有点长,但是,也很明显,配置的用户名密码还是:foo:bar。 测试 我们测试一下: $ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/status/200"HTTP/1.1 401 Unauthorized # valid foo:bar$ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/status/200" -H 'Authorization: basic Zm9vOmJhcg=='HTTP/1.1 200 OK 符合预期。 接下来,我们改一下 EnvoyFilter 中的密码,重新 apply,再测试一下: # foo:bar not match the new password$ curl -s -I -HHost:httpbin.example.com "http://$INGRESS_HOST:$INGRESS_PORT/status/200" -H 'Authorization: basic Zm9vOmJhcg=='HTTP/1.1 401 Unauthorized 此时的 Envoy 并不需要重启,新的配置就立即生效了,云原生的体验就是这么溜~ 总结 因为 Go 扩展可以利用 Envoy 原有的 xDS 来接受配置,所以,从 Istio 推送配置也变得很顺利。 不过,Istio 提供的 EnvoyFilter CRD 在使用上,其实并不是那么方便和自然,后面我们找机会试试 Envoy Gateway,看看 K8s Gateway API 的体验如何。 至此,我们已经体验了整个 Envoy Go 的开发&使用流程,在云原生时代,人均 Golang 的背景下,相信可以很好的完成网关场景的各种定制需求。 下一篇,我们将介绍,如何在 Go 扩展中使用异步协程。这意味着,我们可以使用的是一个全功能的 Go 语言,而不是像 Go Wasm 那样,只能用阉割版的。 敬请期待:MoE 系列(四)|Go 扩展的异步模式 [1]Istio 的官方文档: https://istio.io/latest/docs/tasks/traffic-management/ingress/ingress-control/

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

云原生计算动态周报:深入理解 CNI

业界要闻 1.Kubernetes 应用程序开发者认证(CKAD)中文版正式上线! 摘要:考试需要在两个小时内完成,这是一个完全基于实操的考试,它要求考生在模拟考试环境下完成日常进行的任务,将测试考生为 Kubernetes 构建、配置和公开云原生应用程序的能力。 2.云计算开源产业大会即将开幕 摘要:大会旨在进一步探索我国开源生态发展模式,加速开源技术在国内市场落地,提升企业开源治理能力,推动国内开源生态快速、健康有序发展。 云原生最佳实践 1.服务网格在百度核心业务大规模落地实践 摘要:分享包括微服务框架到服务网格的演进;百度微服务治理的现状和痛点;百度服务网络整体方案:服务网格接入方案优化以及服务网格性能优化等,并介绍了业务收益及启示。 2.联通天宫平台数字化虚拟网络基座实践 摘要:重点介绍了天宫虚拟网络的一些关键特性,以及联通天宫容器云平台虚拟网络的演进,以及第三代底层底座网络模型以及上层租户网络模型的设计。 推荐阅读 1.部署一个 Containerd 容器运行时的 Kubernetes 集群 摘要:使用 kubeadm 从头搭建一个使用 containerd 作为容器运行时的 Kubernetes 集群,使用的是最新的v1.22.1版本。 2.以 Serverless 的方式实现 Kubernetes 日志告警 摘要:部署一个专用的日志处理工作负载可能会耗费多余的成本,而当日志体量骤增、骤降时亦难以评估日志处理工作负载的待机数量。本文提供了一种基于 Serverless 的日志处理思路,可以在降低该任务链路成本的同时提高其灵活性。 3.深入理解 CNI(容器网络接口) 摘要:CNI 最初是由 CoreOS 为 rkt 容器引擎创建的,随着不断发展,已经成为事实标准。目前绝大部分的容器平台都采用 CNI 标准(rkt,Kubernetes ,OpenShift等)。本篇内容基于 CNI 最新的发布版本v0.4.0。 - End -

资源下载

更多资源
Mario

Mario

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

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应用均可从中受益。

Sublime Text

Sublime Text

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

用户登录
用户注册