Skip to content
This repository has been archived by the owner on Jul 13, 2021. It is now read-only.

Latest commit

 

History

History
170 lines (105 loc) · 8.53 KB

README_CN.md

File metadata and controls

170 lines (105 loc) · 8.53 KB

inlets

轻松将服务暴露到公网或其它网络,穿透内网、代理和 NAT。

Build Status License: MIT Go Report Card Documentation GitHub All Releases

Follow @inletsdev on Twitter

English | 中文文档

简介

inlets® 利用反向代理和 Websocket 隧道,将内部、或是开发中的服务通过「出口节点」暴露到公网。出口节点可以是几块钱一个月的 VPS,也可以是任何带有公网 IPv4 的电脑。 如果无需公开服务到公网,可以只建立服务隧道,使 inlets 成为 VPN 的替代品。

为什么需要这个项目?类似的工具例如 ngrok 和由 Cloudflare 开发的 Argo Tunnel 皆为闭源,内置了一些限制,并且价格不菲,以及对 arm/arm64 的支持很有限。Ngrok 还经常会被公司防火墙策略拦截而导致无法使用。而其它开源的隧道工具,基本只考虑到静态地配置单个隧道。inlets 旨在动态地发现本地服务,通过 Websocket 隧道将它们暴露到公网 IP 或域名,并自动化配置 TLS 证书。

当开启 SSL 时,inlets 可以通过任何支持 CONNECT 方法的 HTTP 代理服务器。

概念示意图

inlets 概念示意图

Built for developers by developers

Sponsor this project

协议与条款

重要

如您需要在企业网络中使用 inlets,建议先征求 IT 管理员的同意。下载、使用或分发 inlets 前,您必须同意 协议 条款与限制。本项目不提供任何担保,亦不承担任何责任。

待办事项和目标

已完成

  • 基于客户端的定义,自动在出口节点创建服务入口
    • 通过 DNS / 域名实现单端口、单 Websocket 承载多站点
  • 利用 SSL over Websockets 实现链路加密(wss://
  • 服务端和客户端验权
  • 自动重连
  • 原生多架构(ARMHF / ARM64)支持
  • 提供 Dockerfile 以及 Kubernetes YAML 文件
  • 自动发现并实例化 Kubernetes 集群内 LoadBalancer 类型的 Service - inlets-operator
  • 传输 Websocket 流量
  • 为该项目制作一枚 Logo
  • 和反向代理或 inlets PRO 搭配时支持配置 TLS 证书

inlets PRO

以下是 inlets PRO 的特性和用例:

  • 传输 4 层的 TCP 流量,例如 Websockets、数据库流量、反向代理、远程桌面和 SSH
  • 暴露同一个客户端的多个端口 - 例如 80 和 443
  • 作为反向代理或 Kubernetes IngressController 运行
  • 自动为控制平面部署 TLS 证书
  • 商业服务和客户支持
  • 文档、博客、教程、视频等

项目状态

与 HTTP 1.1 遵循同步的请求/响应模型不同,Websocket 使用异步的发布/订阅模型来发送和接收消息。这带来了一些挑战 —— 通过 异步总线 隧道化传输 同步协议

inlets 2.0 带来了性能上的提升,以及调用部分 Kubernetes 和 Rancher API 的能力。本项目使用了 Rancher 的 K3s 项目 实现节点间通讯同样的隧道依赖包。它非常适用于开发,在生产环境中也很实用。不过在部署 inlets 到生产环境中之前,建议先做好充足的测试。

如果您有任何评论、建议或是贡献想法,欢迎提交 Issue 讨论。

  • 隧道链路通过 --token 选项指定的共享密钥保证安全
  • 默认配置使用不带 SSL 的 Websocket ws://,但支持开启加密,即启用 SSL wss://
  • 可通过服务器端选项设定请求超时时间
  • 服务发现机制完成前,在服务端和客户端都必须配置上游 URL 客户端可发布其可提供服务的上游 URLs
  • 默认情况下,隧道传输会移除响应内的 CORS 头,但你可以在服务端使用 --disable-transport-wrapping 关闭该特性

相关项目

Inlets 作为 服务代理 已被列入 Cloud Native Landscape

  • inlets PRO - 云原生的隧道服务 - TCP、HTTP 以及 Websockets,支持全自动 TLS 加密
  • inlets - 云原生的隧道服务,只支持 HTTP - TLS 需要单独配置
  • inlets-operator - 给私有 Kubernetes Services 实现公网 IP,支持 CRD
  • inletsctl - 搭建出口节点的最快方法

安装 inlets

你可以使用 curl 下载安装脚本,或是用 brew 安装,或者直接在 Releases 页面直接下载二进制文件。安装完成后即可使用 inlets 命令。

安装 CLI

提示:虽然 inlets 是一款免费工具,但你也可以在 GitHub Sponsors 页面支持后续的开发 💪

使用 curl 和辅助脚本:

# 安装到当前目录
curl -sLS https://get.inlets.dev | sh

# 安装到 /usr/local/bin/
curl -sLS https://get.inlets.dev | sudo sh

使用 brew

brew install inlets

提示:brew 分发的版本由 Homebrew 团队维护,因此可能会与 GitHub releases 存在一定延迟。

二进制文件可在 Releases 页面 找到;包含 Linux(x86_64、armhf、arm64),Windows(实验性)以及 Darwin(MacOS)版本。如果你想要验证你的下载,也可以查看 SHA 校验值。

Windows 用户建议使用 Git bash 来安装 inlets。

使用 inlets

快速上手

你可以在任何两台互相连接的「电脑」之间运行 inlets,「电脑」可以是两个容器,虚拟机,物理机,甚至单台机器的环回网络也可以。

可在本地尝试 quickstart tutorial now(英文)。

文档和教程

inlets 和 inlets PRO 有了独立的文档站点(英文):

官方文档:docs.inlets.dev

延伸阅读: advanced usage of inlets including Docker, Kubernetes, multiple-services, and binding to private IPs

大家如何评价 inlets?

读一读社区教程、Hacker News 推送,如果你有编写关于 inlets 和 inlets PRO 的内容,欢迎提交 PR:

你可以使用这些关键词在社交媒体分享 inlets:@inletsdev#inletsdevhttps://inlets.dev

工作用途或是在生产环境使用 inlets?

查看 ADOPTERS.md 来了解如今有哪些公司在使用 inlets 了。

周边商品

查看 OpenFaaS Ltd SWAG store 获得属于你自己的 inlets 卫衣、T 恤和水杯。

开发指引

查看 CONTRIBUTING.md

其它 Kubernetes 端口转发工具

  • kubectl port-forward - built into the Kubernetes CLI, forwards a single port to the local computer.
  • kubefwd - Kubernetes utility to port-forward multiple services to your local computer.
  • kurun - Run main.go in Kubernetes with one command, also port-forward your app into Kubernetes.

inlets® is a registered trademark of OpenFaaS Ltd. All rights reserved, registered company in the UK: 11076587