docs: add documentation for kgctl connect
Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
This commit is contained in:
parent
d7fdccca33
commit
5ba45af4fe
@ -54,9 +54,47 @@ arkade get kgctl
|
||||
|
||||
|Command|Syntax|Description|
|
||||
|----|----|-------|
|
||||
|[connect](#connect)|`kgctl connect <peer-name> [flags]`|Connect the host to the cluster, setting up the required interfaces, routes, and keys.|
|
||||
|[graph](#graph)|`kgctl graph [flags]`|Produce a graph in GraphViz format representing the topology of the cluster.|
|
||||
|[showconf](#showconf)|`kgctl showconf ( node \| peer ) NAME [flags]`|Show the WireGuard configuration for a node or peer in the mesh.|
|
||||
|[showconf](#showconf)|`kgctl showconf ( node \| peer ) <name> [flags]`|Show the WireGuard configuration for a node or peer in the mesh.|
|
||||
|
||||
### connect
|
||||
|
||||
The `connect` command configures the local host as a WireGuard Peer of the cluster and applies all of the necessary networking configuration to connect to the cluster.
|
||||
As long as the process is running, it will watch the cluster for changes and automatically manage the configuration for new or updated Peers and Nodes.
|
||||
If the given Peer name does not exist in the cluster, the command will register a new Peer and generate the necessary WireGuard keys.
|
||||
When the command exits, all of the configuration, including newly registered Peers, is cleaned up.
|
||||
|
||||
Example:
|
||||
|
||||
```shell
|
||||
PEER_NAME=laptop
|
||||
SERVICECIDR=10.43.0.0/16
|
||||
kgctl connect $PEER_NAME --allowed-ips $SERVICECIDR
|
||||
```
|
||||
|
||||
The local host is now connected to the cluster and all IPs from the cluster and any registered Peers are fully routable.
|
||||
When combined with the `--clean-up false` flag, the configuration produced by the command is persistent and will remain in effect even after the process is stopped.
|
||||
|
||||
With the service CIDR of the cluster routable from the local host, Kubernetes DNS names can now be resolved by the cluster DNS provider.
|
||||
For example, the following snippet could be used to resolve the clusterIP of the Kubernetes API:
|
||||
```shell
|
||||
dig @$(kubectl get service -n kube-system kube-dns -o=jsonpath='{.spec.clusterIP}') kubernetes.default.svc.cluster.local +short
|
||||
# > 10.43.0.1
|
||||
```
|
||||
|
||||
For convenience, the cluster DNS provider's IP address can be configured as the local host's DNS server, making Kubernetes DNS names easily resolvable.
|
||||
For example, if using `systemd-resolved`, the following snippet could be used:
|
||||
```shell
|
||||
systemd-resolve --interface kilo0 --set-dns $(kubectl get service -n kube-system kube-dns -o=jsonpath='{.spec.clusterIP}') --set-domain cluster.local
|
||||
# Now all lookups for DNS names ending in `.cluster.local` will be routed over the `kilo0` interface to the cluster DNS provider.
|
||||
dig kubernetes.default.svc.cluster.local +short
|
||||
# > 10.43.0.1
|
||||
```
|
||||
|
||||
> **Note**: The `connect` command is currently only supported on Linux.
|
||||
|
||||
> **Note**: The `connect` command requires the `CAP_NET_ADMIN` capability in order to configure the host's networking stack; unprivileged users will need to use `sudo` or similar tools.
|
||||
|
||||
### graph
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user