1 Star 0 Fork 0

gngpp / vproxy

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README_ZH.md 7.08 KB
一键复制 编辑 原始数据 按行查看 历史
wkgcass 提交于 2021-01-15 18:18 . add travis ci badge in README

vproxy

Build Status

简介

VProxy是一个零依赖的基于NIO的TCP负载均衡器。本项目仅需要Java 11即可运行。

  1. clone,2) 编译,3) 运行!

特性

  1. TCP和TLS负载均衡
  2. HTTP/1.x和HTTP/2负载均衡,支持根据Host分发请求
  3. 支持其他协议的负载均衡,例如grpc, dubbo
  4. Socks5服务
  5. DNS服务,支持A|AAAA记录
  6. 与Kubernetes整合
  7. 封装好的针对特定场景的应用,例如WebSocksProxyAgentWebSocksProxyServer

构建

打包

使用已构建的版本

查看 release page.

For linux

使用release页面中最新的vproxy-linux二进制文件。

或者

使用jlink打包的运行时文件:点这里下载。

For macos

使用release页面中最新的vproxy-macos二进制文件。

For windows

Java运行时可以从这里下载。

For musl

使用jlink打包的运行时文件:点这里下载。

注意:该运行时仍然处于beta阶段

打jar包
./gradlew clean jar
java -jar build/libs/vproxy.jar -Deploy=HelloWorld
jlink
make jlink
./build/image/bin/vproxy -Deploy=HelloWorld
docker
docker build --no-cache -t vproxy:latest https://raw.githubusercontent.com/wkgcass/vproxy/master/docker/Dockerfile
docker run --rm vproxy -Deploy=HelloWorld
graal native-image
./gradlew clean jar
native-image -jar build/libs/vproxy.jar --enable-all-security-services --no-fallback --no-server vproxy
./vproxy -Deploy=HelloWorld
native fds impl

仅支持macos(bsd)/linux。另外在编译前,你可能需要配置JAVA_HOME环境变量。

make vfdposix
java -Dvfd=posix -Djava.library.path=./base/src/main/c -jar build/libs/vproxy.jar -Deploy=HelloWorld

如果要使用F-Stack版本,可以按照这个文档的步骤执行:fstack-how-to.md

此外,Windows有一个特别版本用于支持Tap设备:-Dvfd=windows,但是普通fd和事件循环依旧是jdk selector channel.

make vfdwindows
java -Dvfd=posix -Djava.library.path=./base/src/main/c -jar build/libs/vproxy.jar -Deploy=HelloWorld
测试功能

执行测试用例:

./gradlew runTest

测试vswitch, docker network plugin, vpctl, k8s controller:

# 需要事先安装virtualbox

cd ./misc/auto-setup/
./auto-setup.sh
./auto-verify.sh

目标

  • 零依赖: 除了java标准库外不加任何依赖,也不使用jni扩展。
  • 简单:代码简单易懂.
  • 运行时可修改:更新配置不需要重启。
  • 高效:性能是首要目标之一。
  • TCP负载均衡:支持TCP以及一些基于TCP的协议,也允许你使用自己的协议。
  • Kubernetes:将vproxy资源整合到k8s中。

如何使用

在K8S中使用vproxy

添加crd并启动vproxy和controller

kubectl apply -f https://github.com/vproxy-tools/vpctl/blob/master/misc/crd.yaml
kubectl apply -f https://github.com/vproxy-tools/vpctl/blob/master/misc/k8s-vproxy.yaml

启动示例应用

kubectl apply -f https://github.com/vproxy-tools/vpctl/blob/master/misc/cr-example.yaml

详细信息可见这里

vpctl

我们提供一个命令行客户端应用,来帮助你操作vproxy实例。你可以参考vpctl的仓库以获取更多信息。

该工具经过完整的测试,并且非常简单易用。该工具的仓库里提供了一些例子供参考。

简易模式

你可以用一行命令启动一个简单的负载均衡:

java -Deploy=Simple -jar vproxy.jar \  
                bind {port} \
                backend {host1:port1,host2:port2} \
                [ssl {path of cert1,cert2} {path of key} \]
                [protocol {...} \]

可以输入help检查参数列表。

标准模式

使用help查看启动参数。

在启动vproxy实例时,会默认开启一个监听18776端口的http-controller和一个监听16309端口的resp-controller。后续则可以使用curl或者redis-cli来操作该vproxy实例。当然你也可以直接通过标准输入(stdin)来操作vproxy实例。

查看command.mdapi文档以获取更多信息。
如果有任何关于实现细节的问题也欢迎在issue中提出。

文档

贡献

目前只有自己在维护这个项目。希望能有更多人加入 :)

感谢Jetbrains制作的IDE,以及免费的开源许可证。

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/gngpp/vproxy.git
git@gitee.com:gngpp/vproxy.git
gngpp
vproxy
vproxy
master

搜索帮助