开源软件包 ngrok-go 致力于让 Ingress 更容易地嵌入到 Go 应用中
Ngrok-go 是一个地道的(idiomatic)的 Go 软件包,它使 Go 应用程序能够通过 ngrok 的 ingress 即服务(ingress-as-a-service)平台安全地接收网络请求,就像监听本地端口一样。
ngrok-go 旨在简化网络 ingress 的创建,它负责处理网络栈中不同层的一些低级网络基元(primitive),这些基元目前需要由开发人员来设置,以启用网络 ingress。它们包括 DNS、TLS 证书、网络级 CIDR 策略、IP 与子网路由、负载均衡、VPN 和 NAT。
ngrok-go 可以看作一种将 ngrok 代理打包并嵌入 Go 应用程序的方式,从而为捆绑 ngrok 来创建网络 ingress 的应用消除了巨大的复杂性,例如物联网设备、CI/CD 流水线等。
ngrok-go 让开发人员只需一行代码就能将 Go 应用发布到互联网上,而无需设置 IP、证书、负载均衡器甚至端口等低级别的网络基元!
要通过 ngrok 将 ingress 嵌入 Go 应用,开发人员只需调用 ngrok-go 提供的 ngrok.Listen 原语即可。如果你的环境有 ngrok authtoken 的话,对 Listen 的调用将初始化与 ngrok 的安全和持久连接,并传输你所指定的配置需求,包括 URL、认证、IP 限制等,例如:
ngrok.Listen(ctx,
config.HTTPEndpoint(
config.WithDomain("my-app.ngrok.io"),
config.WithAllowCDIRString("192.30.252.0/22"),
config.WithCircuigBreaker(0.8),
config.WithCompression(),
config.WithOAuth("github")
),
ngrok.WithAuthtokenFromEnv(),
)
调用 Listen 时指定的所有策略都由 ngrok 执行,它在边缘处拒绝所有未经授权的请求,这意味着只有有效的请求才能到达 Go 应用。
使用 ngrok-go 的另一个优势是它在 ingress 方面的“可移植性”。这意味着使用它的应用将以同样的方式运行,与底层平台无关,无论是裸机、虚拟机、AWS、Azure、Kubernetes 等均是如此。
虽然 ngrok 选择 Go 作为第一个支持的语言,但对其他语言的支持已经在进行中,包括 Rust 和 JavaScript。对其他语言(如 Java、C#、Python 和 Ruby)的支持预计很快就会纳入路线图,这也会基于用户的反馈。
如果你有兴趣尝试,ngrok-go 可以在 GitHub 上找到,官方的入门指南是一个很好的起点。
原文链接:
https://www.infoq.com/news/2023/03/ngrok-go-ingress-package/
文章版权归极客邦科技 InfoQ 所有,未经许可不得转载。
你也「在看」吗? 👇
微信扫码关注该文公众号作者