@levinzhang
2023-03-24T21:53:18.000000Z
字数 1322
阅读 329
by
Ngrok-go是一个地道的(idiomatic)的Go软件包,它使Go应用程序能够通过ngrok的ingress即服务(ingress-as-a-service)平台安全地接收网络请求,就像监听本地端口一样。
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上找到,官方的入门指南是一个很好的起点。
查看英文原文:Open-Source Package ngrok-go Aims to Make it Easier to Embed Ingress into Go Apps