Compare commits

...

8 Commits

Author SHA1 Message Date
p_caiwfeng
51515607dc fix can not get tag issue 2022-02-16 14:26:08 +08:00
p_caiwfeng
a69ed17fe1 move kubevpn connect logic from method init to before testcase start 2022-02-16 14:00:16 +08:00
p_caiwfeng
4f0da2803f update github token for repository-dispatch 2022-02-16 11:10:22 +08:00
p_caiwfeng
cebd3f7623 update docker login url 2022-02-16 10:53:49 +08:00
p_caiwfeng
a2f6c26101 optimize Makefile 2022-02-16 10:44:49 +08:00
p_caiwfeng
a27f9d6779 fix testcase 2022-02-16 09:34:41 +08:00
p_caiwfeng
cee42b2900 support arm64 and 386 2022-02-15 17:37:49 +08:00
p_caiwfeng
1c55e92e1a update get route table on linux go build 2022-02-15 09:38:58 +08:00
10 changed files with 150 additions and 79 deletions

View File

@@ -26,8 +26,8 @@ jobs:
release_name: Release ${{ github.ref }}
body: |
Changes in this Release
- First Change
- Second Change
- Fix known bugs
- Optimize code
draft: false
prerelease: false
@@ -48,38 +48,15 @@ jobs:
with:
name: UPLOAD_URL
path: UPLOAD_URL
- name: Build kubevpn-linux
run: make kubevpn-linux
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: kubevpn-linux-amd64
asset_name: kubevpn-linux-amd64
asset_content_type: application/octet-stream
- name: Build kubevpn-macos
run: make kubevpn-macos
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: kubevpn-darwin-amd64
asset_name: kubevpn-darwin-amd64
asset_content_type: application/octet-stream
- name: Push image to docker hub
run: |
echo ${{ secrets.DOCKER_PASSWORD }} | docker login -u ${{ secrets.DOCKER_USER }} --password-stdin
make all-image
- name: Build kubevpn-windows
run: make kubevpn-windows
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Repository Dispatch
uses: peter-evans/repository-dispatch@v1
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: kubevpn-windows-amd64.exe
asset_name: kubevpn-windows-amd64.exe
asset_content_type: application/octet-stream
token: ${{ secrets.REPOSITORYDISPATCH }}
event-type: release-event
client-payload: '{"url": "${{ steps.create_release.outputs.upload_url }}", "tag": "${{ github.ref }}"}'

View File

@@ -31,7 +31,7 @@ jobs:
run: kubectl apply -f https://raw.githubusercontent.com/wencaiwulue/kubevpn/master/samples/bookinfo.yaml
- name: Build
run: make kubevpn-linux
run: make kubevpn-linux-amd64
- name: Wait for pods reviews to be ready
run: |
@@ -80,7 +80,7 @@ jobs:
run: kubectl apply -f https://raw.githubusercontent.com/wencaiwulue/kubevpn/master/samples/bookinfo.yaml
- name: Build
run: make kubevpn-macos
run: make kubevpn-darwin-amd64
- name: Wait for pods reviews to be ready
run: |

44
.github/workflows/upload_release.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
name: Upload release
on:
repository_dispatch:
types: [ release-event ]
jobs:
build:
name: Create Release
runs-on: ubuntu-latest
strategy:
matrix:
os-arch: [
kubevpn-darwin-amd64,
kubevpn-darwin-arm64,
kubevpn-windows-amd64.exe,
kubevpn-windows-arm64.exe,
kubevpn-windows-386.exe,
kubevpn-linux-amd64,
kubevpn-linux-arm64,
kubevpn-linux-386,
]
steps:
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.17
- name: Checkout code
uses: actions/checkout@v2
- name: Build kubevpn-all-arch
run: |
git tag ${{ github.event.client_payload.tag }} || true
make all-kubevpn
- name: Upload Release Asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ github.event.client_payload.url }}
asset_path: ${{ matrix.os-arch }}
asset_name: ${{ matrix.os-arch }}
asset_content_type: application/octet-stream

View File

@@ -9,50 +9,88 @@ GOARCH := $(shell go env GOHOSTARCH)
TARGET := kubevpn-${GOOS}-${GOARCH}
OS_ARCH := ${GOOS}/${GOARCH}
FOLDER := github.com/wencaiwulue/kubevpn/cmd/kubevpn
CONTROL_PLANE_FOLDER := github.com/wencaiwulue/kubevpn/pkg/controlplane/cmd/server
# Setup the -ldflags option for go build here, interpolate the variable values
LDFLAGS=--ldflags "-w -s \
-X github.com/wencaiwulue/kubevpn/cmd/kubevpn/cmds.Version=${VERSION} \
-X github.com/wencaiwulue/kubevpn/cmd/kubevpn/cmds.BuildTime=${BUILD_TIME} \
-X github.com/wencaiwulue/kubevpn/cmd/kubevpn/cmds.GitCommit=${GIT_COMMIT} \
-X github.com/wencaiwulue/kubevpn/cmd/kubevpn/cmds.Branch=${BRANCH} \
-X github.com/wencaiwulue/kubevpn/cmd/kubevpn/cmds.OsArch=${OS_ARCH} \
-X ${FOLDER}/cmds.Version=${VERSION} \
-X ${FOLDER}/cmds.BuildTime=${BUILD_TIME} \
-X ${FOLDER}/cmds.GitCommit=${GIT_COMMIT} \
-X ${FOLDER}/cmds.Branch=${BRANCH} \
-X ${FOLDER}/cmds.OsArch=${OS_ARCH} \
"
.PHONY: kubevpn-macos
kubevpn-macos:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ${LDFLAGS} -o kubevpn-darwin-amd64 github.com/wencaiwulue/kubevpn/cmd/kubevpn
.PHONY: all
all: all-kubevpn all-image
.PHONY: all-kubevpn
all-kubevpn: kubevpn-darwin-amd64 kubevpn-darwin-arm64 \
kubevpn-windows-amd64 kubevpn-windows-386 kubevpn-windows-arm64 \
kubevpn-linux-amd64 kubevpn-linux-386 kubevpn-linux-arm64
.PHONY: all-image
all-image: image image-mesh image-control-plane
# ---------darwin-----------
.PHONY: kubevpn-darwin-amd64
kubevpn-darwin-amd64:
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build ${LDFLAGS} -o kubevpn-darwin-amd64 ${FOLDER}
chmod +x kubevpn-darwin-amd64
cp kubevpn-darwin-amd64 /usr/local/bin/kubevpn
.PHONY: kubevpn-darwin-arm64
kubevpn-darwin-arm64:
CGO_ENABLED=0 GOOS=darwin GOARCH=arm64 go build ${LDFLAGS} -o kubevpn-darwin-arm64 ${FOLDER}
chmod +x kubevpn-darwin-arm64
cp kubevpn-darwin-arm64 /usr/local/bin/kubevpn
# ---------darwin-----------
.PHONY: kubevpn-windows
kubevpn-windows:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build ${LDFLAGS} -o kubevpn-windows-amd64.exe github.com/wencaiwulue/kubevpn/cmd/kubevpn
# ---------windows-----------
.PHONY: kubevpn-windows-amd64
kubevpn-windows-amd64:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build ${LDFLAGS} -o kubevpn-windows-amd64.exe ${FOLDER}
.PHONY: kubevpn-windows-arm64
kubevpn-windows-arm64:
CGO_ENABLED=0 GOOS=windows GOARCH=arm64 go build ${LDFLAGS} -o kubevpn-windows-arm64.exe ${FOLDER}
.PHONY: kubevpn-windows-386
kubevpn-windows-386:
CGO_ENABLED=0 GOOS=windows GOARCH=386 go build ${LDFLAGS} -o kubevpn-windows-386.exe ${FOLDER}
# ---------windows-----------
.PHONY: kubevpn-linux
kubevpn-linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o kubevpn-linux-amd64 github.com/wencaiwulue/kubevpn/cmd/kubevpn
# ---------linux-----------
.PHONY: kubevpn-linux-amd64
kubevpn-linux-amd64:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build ${LDFLAGS} -o kubevpn-linux-amd64 ${FOLDER}
chmod +x kubevpn-linux-amd64
cp kubevpn-linux-amd64 /usr/local/bin/kubevpn
.PHONY: control-plane-linux
control-plane-linux:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o envoy-xds-server github.com/wencaiwulue/kubevpn/pkg/controlplane/cmd/server
chmod +x envoy-xds-server
.PHONY: kubevpn-linux-arm64
kubevpn-linux-arm64:
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build ${LDFLAGS} -o kubevpn-linux-arm64 ${FOLDER}
chmod +x kubevpn-linux-arm64
cp kubevpn-linux-arm64 /usr/local/bin/kubevpn
.PHONY: kubevpn-linux-386
kubevpn-linux-386:
CGO_ENABLED=0 GOOS=linux GOARCH=386 go build ${LDFLAGS} -o kubevpn-linux-386 ${FOLDER}
chmod +x kubevpn-linux-386
cp kubevpn-linux-386 /usr/local/bin/kubevpn
# ---------linux-----------
.PHONY: image
image: kubevpn-linux
image: kubevpn-linux-amd64
mv kubevpn-linux-amd64 kubevpn
docker build -t naison/kubevpn:v2 -f ./dockerfile/server/Dockerfile .
rm -fr kubevpn
docker push naison/kubevpn:v2
.PHONY: image_mesh
image_mesh:
.PHONY: image-mesh
image-mesh:
docker build -t naison/kubevpnmesh:v2 -f ./dockerfile/mesh/Dockerfile .
docker push naison/kubevpnmesh:v2
.PHONY: image_control_plane
image_control_plane: control-plane-linux
.PHONY: image-control-plane
image-control-plane:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o envoy-xds-server ${CONTROL_PLANE_FOLDER}
chmod +x envoy-xds-server
docker build -t naison/envoy-xds-server:latest -f ./dockerfile/controlplane/Dockerfile .
rm -fr envoy-xds-server
docker push naison/envoy-xds-server:latest

View File

@@ -10,9 +10,9 @@ kubernetes cluster service can also access your local service
```shell
git clone https://github.com/wencaiwulue/kubevpn.git
cd kubevpn
make kubevpn-linux
make kubevpn-macos
make kubevpn-windows
make kubevpn-linux-amd64
make kubevpn-darwin-amd64
make kubevpn-windows-amd64
```
if you are using windows, you can build by this command:

View File

@@ -9,9 +9,9 @@
```shell
git clone https://github.com/wencaiwulue/kubevpn.git
cd kubevpn
make kubevpn-linux
make kubevpn-macos
make kubevpn-windows
make kubevpn-linux-amd64
make kubevpn-darwin-amd64
make kubevpn-windows-amd64
```
如果你在使用 Windows 系统,可以使用下面这条命令构建:

View File

@@ -1,5 +1,6 @@
//go:build windows && x86
// +build windows,x86
//go:build windows && (x86 || 386)
// +build windows
// +build x86 386
package wintun

View File

@@ -1,5 +1,5 @@
//go:build !amd64 && !arm64
// +build !amd64,!arm64
//go:build !amd64 && !arm64 && !x86 && !386
// +build !amd64,!arm64,!x86,!386
package pkg

View File

@@ -1,5 +1,5 @@
//go:build !windows || ignore || !darwin
// +build !windows ignore !darwin
//go:build !windows && !darwin
// +build !windows,!darwin
package pkg

View File

@@ -8,10 +8,12 @@ import (
corev1 "k8s.io/api/core/v1"
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/fields"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/cli-runtime/pkg/genericclioptions"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/util/retry"
cmdutil "k8s.io/kubectl/pkg/cmd/util"
"net"
"net/http"
@@ -33,6 +35,7 @@ var (
)
func TestFunctions(t *testing.T) {
kubevpnConnect()
t.Cleanup(cancelFunc)
t.Parallel()
t.Run(runtime.FuncForPC(reflect.ValueOf(pingPodIP).Pointer()).Name(), pingPodIP)
@@ -182,10 +185,14 @@ func dialUDP(t *testing.T) {
if len(ip) == 0 {
t.Errorf("can not found pods for service reviews")
}
time.Sleep(time.Second * 5)
log.Infof("dail udp to ip: %s", ip)
err = client(ip, port)
if err != nil {
log.Printf("dail udp to ip: %s", ip)
if err = retry.OnError(
wait.Backoff{Duration: time.Second, Factor: 2, Jitter: 0.2, Steps: 5},
func(err error) bool {
return err != nil
}, func() error {
return client(ip, port)
}); err != nil {
t.Errorf("can not access pod ip: %s, port: %v", ip, port)
}
}
@@ -201,6 +208,11 @@ func client(ip string, port int) error {
}
defer udpConn.Close()
err = udpConn.SetDeadline(time.Now().Add(time.Second * 30))
if err != nil {
return err
}
// 发送数据
sendData := []byte("hello server!")
_, err = udpConn.Write(sendData)
@@ -251,8 +263,7 @@ func server(port int) {
}
}
func init() {
initClient()
func kubevpnConnect() {
var ctx context.Context
ctx, cancelFunc = context.WithCancel(context.TODO())
childCtx, timeoutFunc := context.WithTimeout(ctx, time.Minute*10)
@@ -268,7 +279,7 @@ func init() {
<-childCtx.Done()
}
func initClient() {
func init() {
var err error
configFlags := genericclioptions.NewConfigFlags(true)