# vproxy
**Repository Path**: gngpp/vproxy
## Basic Information
- **Project Name**: vproxy
- **Description**: 1) proxy: LB,DNS,Socks. 2) k8s: CRD and Controllers. 3) sdn: L3 Virtual Switch + Flow Tables.
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-11-09
- **Last Updated**: 2022-05-26
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# vproxy
[](https://travis-ci.com/wkgcass/vproxy)
## 简介
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. 封装好的针对特定场景的应用,例如`WebSocksProxyAgent`和`WebSocksProxyServer`
## 构建
### 打包
使用已构建的版本
查看 [release page](https://github.com/wkgcass/vproxy/releases).
#### For linux
使用release页面中最新的`vproxy-linux`二进制文件。
或者
使用`jlink`打包的运行时文件:点[这里](https://github.com/wkgcass/vproxy/releases/download/1.0.0-BETA-5/vproxy-runtime-linux.tar.gz)下载。
#### For macos
使用release页面中最新的`vproxy-macos`二进制文件。
#### For windows
Java运行时可以从[这里](https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot)下载。
#### For musl
使用`jlink`打包的运行时文件:点[这里](https://github.com/wkgcass/vproxy/releases/download/1.0.0-BETA-5/vproxy-runtime-musl.tar.gz)下载。
>注意:该运行时仍然处于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](https://github.com/wkgcass/vproxy/blob/master/doc_zh/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:
```shell
# 需要事先安装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
```
详细信息可见[这里](https://github.com/vproxy-tools/vpctl/blob/master/README.md)
vpctl
我们提供一个命令行客户端应用,来帮助你操作vproxy实例。你可以参考[vpctl的仓库](https://github.com/vproxy-tools/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.md](https://github.com/wkgcass/vproxy/blob/master/doc/command.md)和[api文档](https://github.com/wkgcass/vproxy/blob/master/doc/api.yaml)以获取更多信息。
如果有任何关于实现细节的问题也欢迎在issue中提出。
### 文档
* [how-to-use.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/how-to-use.md): 如何使用配置文件和controller。
* [api.yaml](https://github.com/wkgcass/vproxy/blob/dev/doc/api.yaml): http-controller的api文档(swagger格式)。
* [command.md](https://github.com/wkgcass/vproxy/blob/master/doc/command.md): 详细的命令文档。
* [lb-example.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/lb-example.md): 关于TCP负载均衡的一个使用例子。
* [docker-example.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/docker-example.md): 关于构建镜像以及在docker中运行vproxy的一个例子。
* [architecture.md](https://github.com/wkgcass/vproxy/blob/master/doc/architecture.md): 架构相关。
* [extended-app.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/extended-app.md): 扩展应用的使用方式。
* [websocks.md](https://github.com/wkgcass/vproxy/blob/master/doc/websocks.md): The WebSocks Protocol.
* [vproxy-kcp-tunnel.md](https://github.com/wkgcass/vproxy/blob/master/doc/vproxy-kcp-tunnel.md): The KCP Tunnel Protocol.
* [using-application-layer-protocols.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/using-application-layer-protocols.md): 关于如何使用(自定义的)应用层协议。
* [fstack-how-to.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/fstack-how-to.md): 如何在`F-Stack`上运行vproxy。
* [vpws-direct-relay.md(中文)](https://github.com/wkgcass/vproxy/blob/master/doc_zh/vpws-direct-relay.md): 如何使用`vpws-agent`的`direct-relay`功能。
## 贡献
目前只有`我`自己在维护这个项目。希望能有更多人加入 :)
感谢[Jetbrains](https://www.jetbrains.com/?from=vproxy)制作的IDE,以及免费的开源许可证。
