mirror of
https://github.com/openziti/ziti.git
synced 2026-10-12 15:28:05 +00:00
177 lines
5.5 KiB
Markdown
177 lines
5.5 KiB
Markdown
## Creating a Development Workspace for ziti-fabric Development
|
|
|
|
If you're going to be working on the Ziti fabric, or just want to track the latest development changes, you'll need a development workspace.
|
|
|
|
First, install the golang environment for your platform. Visit http://golang.org to download your installer.
|
|
|
|
As of this update, we're currently using version `1.13` of golang.
|
|
|
|
Make sure that `go` is in your path:
|
|
|
|
```
|
|
$ go version
|
|
go version go1.13.4 linux/amd64
|
|
```
|
|
|
|
Consider using a separate directory to contain the `GOPATH` for your `ziti-fabric` development (instead of just using `~/go`). I like to put mine in `~/local/ziti-fabric`, but you can root it wherever you'd like. This will contain the dependent package sources, and built binaries.
|
|
|
|
Essentially:
|
|
|
|
```
|
|
mkdir -p ~/local/ziti-fabric
|
|
export GOPATH=~/local/ziti-fabric
|
|
```
|
|
|
|
Include `GOPATH/bin` in your shell's `PATH`:
|
|
|
|
```
|
|
$ export PATH=$GOPATH/bin:$PATH
|
|
```
|
|
|
|
When you've got your `GOPATH` ready, you'll want to clone the repositories. I like to keep my repositories in `~/repos`.
|
|
|
|
```
|
|
mkdir ~/repos
|
|
cd ~/repos
|
|
git clone https://github.com/netfoundry/ziti-cmd.git
|
|
git clone https://github.com/netfoundry/ziti-fabric.git
|
|
```
|
|
|
|
We're going to need to update the `go.mod` file in the root of `ziti-cmd`, using the `replace` directive to point the `ziti-cmd` build at our local `ziti-fabric` development tree.
|
|
|
|
```
|
|
cd ~/repos/ziti-cmd
|
|
vi go.mod
|
|
```
|
|
|
|
The top of the file should look like this:
|
|
|
|
```
|
|
module github.com/netfoundry/ziti-cmd
|
|
|
|
go 1.13
|
|
|
|
require (
|
|
```
|
|
|
|
We're going to add a `replace` line, like this:
|
|
|
|
```
|
|
module github.com/netfoundry/ziti-cmd
|
|
|
|
go 1.13
|
|
|
|
replace github.com/netfoundry/ziti-fabric => ../ziti-fabric
|
|
|
|
require (
|
|
```
|
|
|
|
With that change made, you can alter the contents of your local clone of `ziti-fabric`, and builds of `ziti-cmd` will use your local changes, rather than the version it pulled into `GOPATH` from GitHub.
|
|
|
|
Build the tree:
|
|
|
|
```
|
|
$ cd ~/repos/ziti-cmd
|
|
$ go install ./...
|
|
```
|
|
|
|
The binaries will be placed in `$GOPATH/bin`.
|
|
|
|
The development configuration files live in `ziti-fabric/etc`, and contain relative paths, which expect the executables to be started from the root of `ziti-fabric` (ensure that `~/local/ziti-fabric/bin` (`$GOPATH/bin`) is in your shell's `PATH`).
|
|
|
|
```
|
|
$ cd ~repos/ziti-fabric
|
|
$ ziti-controller run etc/ctrl.yml
|
|
```
|
|
|
|
## Launching A Simple Environment
|
|
|
|
You'll want to open a number of terminal windows. All commands are executed relative to `~/repos/ziti-fabric`.
|
|
|
|
### Launch The Controller
|
|
|
|
`$ bin/ziti-controller run src/github.com/netfoundry/ziti-fabric/fabric/etc/ctrl.yml`
|
|
|
|
### Configure Dotzeet
|
|
|
|
In order to use the `ziti-fabric` tool, you'll need a working identity configuration in your home directory. Create the file `~/.ziti/identities.yml` containing the following. Substitute your concrete `$GOPATH` for the actual value of your `$GOPATH` in this file:
|
|
|
|
```
|
|
default:
|
|
caCert: "$HOME/repos/ziti-fabric/etc/ca/intermediate/certs/ca-chain.cert.pem"
|
|
cert: "$HOME/repos/ziti-fabric/etc/ca/intermediate/certs/dotzeet-client.cert.pem"
|
|
serverCert: "$HOME/repos/ziti-fabric/etc/ca/intermediate/certs/dotzeet-server.cert.pem"
|
|
key: "$HOME/repos/ziti-fabric/etc/ca/intermediate/private/dotzeet.key.pem"
|
|
endpoint: tls:127.0.0.1:10000
|
|
```
|
|
|
|
You'll want to replace `$HOME` in the above with the contents of your `HOME` environment variable. Im my case, this becomes `/home/michae/repos/ziti-fabric/`...
|
|
|
|
The `endpoint:` specification should point at the `mgmt` listener address for your `ziti-controller`.
|
|
|
|
### Enroll Routers
|
|
|
|
With your controller running, use the `ziti-fabric` tool to enroll routers:
|
|
|
|
```
|
|
$ ziti-fabric create router etc/ca/intermediate/certs/001-client.cert.pem
|
|
$ bin/ziti-fabric create router etc/ca/intermediate/certs/002-client.cert.pem
|
|
$ bin/ziti-fabric create router etc/ca/intermediate/certs/003-client.cert.pem
|
|
$ bin/ziti-fabric create router etc/ca/intermediate/certs/004-client.cert.pem
|
|
```
|
|
|
|
### Start Routers
|
|
|
|
With your controller running, you can now start routers to begin building your mesh:
|
|
|
|
```
|
|
$ ziti-router run etc/001.yml
|
|
```
|
|
|
|
There are 4 router configurations provided (`001`, `002`, `003`, `004`).
|
|
|
|
Start routers `001`, `002`, `003`, and `004`.
|
|
|
|
The configuration provided in the tree assembles a "diamond" shaped mesh, where router `001` is intended to initiate (ingress) sessions, and router `003` is intended to terminate (egress) sessions. With smart routing and dynamic healing in play, traffic can flow between router `001` and router `003` over either router `002` or `004`.
|
|
|
|
### Create a Google Service
|
|
|
|
Create a service to access `google.com`:
|
|
|
|
```
|
|
$ ziti-fabric create service google tcp:google.com:80 003
|
|
```
|
|
|
|
### Access the Google Service
|
|
|
|
Access the google service using `ziti-fabric`:
|
|
|
|
```
|
|
$ ziti-fabric-test http http://google --host www.google.com
|
|
```
|
|
|
|
You should see HTTP output from the google website.
|
|
|
|
## Generating Network Load Using loop2
|
|
|
|
In order to create interesting metrics, you'll need to create some network load. A simple tool for that is the `ziti-fabric-test loop2` tool.
|
|
|
|
Create the `loop` service in the fabric (if it's not already there):
|
|
|
|
```
|
|
$ ziti-fabric create service loop tcp:127.0.0.1:8171 003
|
|
```
|
|
|
|
Launch a `loop2` listener (in $GOPATH):
|
|
|
|
```
|
|
$ ziti-fabric-test loop2 listener
|
|
```
|
|
|
|
Launch a `loop2` dialer (begin generating load):
|
|
|
|
```
|
|
$ ziti-fabric-test loop2 dialer src/github.com/netfoundry/ziti-fabric/fabric/etc/loop2/10-ambient.loop2.yml
|
|
```
|
|
|
|
Take a look at the various `loop2` scenario configurations in `etc/loop2` for examples illustrating different workloads. |